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

View File

@@ -42,3 +42,11 @@ export function delIdentifytexs(id) {
method: 'post' 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) { export function delNewRecord(id) {
return request({ return request({
url: '/dormitory/newRecord/' + id, 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"> <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> <i v-else class="el-icon-close" style="font-size: 20px;"></i>
</div> </div>
<!-- 聊天弹窗通过 v-if 控制显隐 --> <!-- 聊天弹窗通过 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
.ai-hover { .ai-hover {
@@ -215,8 +200,8 @@ export default {
right: 20px; right: 20px;
bottom: 20px; bottom: 20px;
/* 和弹窗拉开距离 */ /* 和弹窗拉开距离 */
width: 40px; width: 5vw;
height: 40px; height: 7vh;
background-color: #409eff; background-color: #409eff;
border-radius: 50%; border-radius: 50%;
display: flex; display: flex;

View File

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

View File

@@ -5,7 +5,8 @@ import { showToast } from "@/utils/toast"; // 请替换为你的Toast组件
// 创建axios实例 // 创建axios实例
const service = axios.create({ 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, timeout: 15000,
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",

View File

@@ -23,3 +23,28 @@ export function getTokenKeySessionStorage() {
export function removeToken() { export function removeToken() {
return Cookies.remove(TokenKey) 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,28 +1,34 @@
<template> <template>
<div> <div>
<div class="six-action-container">
<div class="six-action-container"> <div
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i"> style="padding: 1rem"
<div class="bubble" class="six-action-item"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }"> v-for="(v, i) in taskList"
<div class="act-text"> :key="i"
>
<div class="title"> <div
{{ v.label }}·待办 class="bubble"
</div> :style="{
<div class="todo"> backgroundImage: `url(${require('@/assets/index_bg/' +
{{ v.value }} (i + 1) +
</div> '.png')})`,
</div> }"
<div class="bg-to" @click="toRoute(v.url)">更多</div> >
</div> <div class="act-text">
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div> </div>
</div>
<div class="bg-to" @click="toRoute(v.url)">更多</div>
</div> </div>
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
import { isEmpty } from "@/api/helpFunc"; import { isEmpty } from "@/api/helpFunc";
import { countDeptUnTodo as getUndo } from "@/api/workstudy/post"; import { countDeptUnTodo as getUndo } from "@/api/workstudy/post";
@@ -30,114 +36,112 @@ import { countDeptUnTodo as getUndo } from "@/api/workstudy/post";
import { checkPermi } from "@/utils/permission"; import { checkPermi } from "@/utils/permission";
export default { export default {
name: "zzbld-qgzx", name: "zzbld-qgzx",
data() { data() {
return { return {
hasPrem:false, hasPrem: false,
taskList: [ 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"])) {
} this.getUndo();
}, this.hasPrem = true;
created() {
if (checkPermi(['home:dept:qgzx'])) {
this.getUndo();
this.hasPrem = true;
}
},
methods: {
async getUndo() {
this.taskList = [];
let res = await getUndo();
if (res.code == 200) {
let data = { ...res.data };
console.log(data);
this.taskList.push({
label: "部门·学生岗位审核",
name: "post",
value: data.post,
url: "/workstudy/post/dept"
});
this.taskList.push({
label: "部门·薪资审核",
name: "money",
value: data.money,
url: "/workstudy/money/dept"
});
}
},
toRoute(url) {
if (!isEmpty(url)) {
this.$router.push(url);
}
},
} }
},
methods: {
async getUndo() {
this.taskList = [];
let res = await getUndo();
if (res.code == 200) {
let data = { ...res.data };
console.log(data);
this.taskList.push({
label: "部门·学生岗位审核",
name: "post",
value: data.post,
url: "/workstudy/post/dept",
});
this.taskList.push({
label: "部门·薪资审核",
name: "money",
value: data.money,
url: "/workstudy/money/dept",
});
}
},
} toRoute(url) {
if (!isEmpty(url)) {
this.$router.push(url);
}
},
},
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.six-action-container { .six-action-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.six-action-item { .six-action-item {
flex-basis: 33.33%; flex-basis: 33.33%;
} }
.bubble { .bubble {
overflow: hidden; overflow: hidden;
margin: 0 auto; margin: 0 auto;
width: 100%; width: 100%;
height: 170px; height: 170px;
border-radius: 1rem; border-radius: 1rem;
// background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%); // background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%);
position: relative; position: relative;
background-size: cover; background-size: cover;
min-width: 250px; min-width: 250px;
} }
.act-text { .act-text {
width: 100%; width: 100%;
z-index: 2; z-index: 2;
margin: 1rem; margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;
color: #fff;
}
.title { .todo {
text-align: left; font-size: 6rem;
font-size: 1.25rem; color: #fff;
color: #fff; }
}
.todo {
font-size: 6rem;
color: #fff;
}
} }
.bg-to { .bg-to {
cursor: pointer; cursor: pointer;
z-index: 3; z-index: 3;
position: absolute; position: absolute;
bottom: 5%; bottom: 5%;
right: 3%; right: 3%;
margin-top: 10px; margin-top: 10px;
color: white; color: white;
} }
.six-action-item:hover, .six-action-item:hover,
.fast-act:hover { .fast-act:hover {
cursor: pointer; cursor: pointer;
transform: scale(1.1); transform: scale(1.1);
} }
</style> </style>

View File

@@ -110,7 +110,28 @@ export default {
name: "knzzgl", name: "knzzgl",
value: 0, value: 0,
url: "/hard/gl/fdy" 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,195 +1,238 @@
<template> <template>
<div> <div>
<div class="six-action-container"> <div class="six-action-container">
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i"> <div
<div class="bubble" style="padding: 1rem"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }"> class="six-action-item"
<div class="act-text"> v-for="(v, i) in taskList"
<div class="title"> :key="i"
{{ v.label }}·待办 >
</div> <div
<div class="todo"> class="bubble"
{{ v.value }} :style="{
</div> backgroundImage: `url(${require('@/assets/index_bg/' +
</div> (i + 1) +
<div class="bg-to" @click="toRoute(v.url)">更多</div> '.png')})`,
</div> }"
>
<div class="act-text">
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div> </div>
</div>
<div class="bg-to" @click="toRoute(v.url)">更多</div>
</div> </div>
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
import { countJwcUnDo as countUndo } from "@/api/stuCQS/good/apply"; import { countJwcUnDo as countUndo } from "@/api/stuCQS/good/apply";
import { isEmpty } from "@/api/helpFunc"; import { isEmpty } from "@/api/helpFunc";
import { checkPermi } from "@/utils/permission"; import { checkPermi } from "@/utils/permission";
export default { export default {
name: "jwc-undo", name: "jwc-undo",
data() { data() {
return { return {
hasPrem:false, hasPrem: false,
taskList: [ taskList: [
{ {
label: "学工·评优评先审核", label: "学工·评优评先审核",
name: "good", name: "good",
value: 0, value: 0,
url: "/stuGood/about-good/jwc" url: "/stuGood/about-good/jwc",
},
{
label: "学工·静湖之星审核",
name: "lake",
value: 0,
url: "/stuGood/about-lake/jwc"
},
{
label: "学工·优秀毕业生审核",
name: "biye",
value: 0,
url: "/stuGood/good-graduate/jwc"
},
{
label: "学工·困难认定审核",
name: "kn",
value: 0,
url: "/hard/pks/jwc"
},
{
label: "学工·助学金审核",
name: "zx",
value: 0,
url: "/hard/zxj/jwc"
},
{
label: "学工·宿舍管理审核",
name: "dms",
value: 0,
url: "/dormitory/stuDormitoryManage/final"
},
{
label: "学工·任务管理审核",
name: "rwgl",
value: 0,
url: "/task/todo"
},
{
label: "学工·困难资助审核",
name: "knzz",
value: 0,
url: "hard/tufa/xg"
},
// 宁博
{
label: "学工·国家励志奖学金审核",
name: "knzzgl",
value: 0,
url: "/hard/gl/xg"
},
{
label: "学工·学生证补办审核",
name: "xszb",
value: 0,
url: "/routine/sicr/learningIndustrialProductionAudit"
},
{
label: "学工·在校证明审核",
name: "zxzm",
value: 0,
url: "/routine/school/learning"
}
]
}
},
created() {
if (checkPermi(['home:xg:undo1'])) {
this.countUndo();
this.hasPrem = true;
}
},
methods: {
async countUndo() {
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));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
}
});
}
}, },
{
toRoute(url) { label: "学工·静湖之星审核",
if (!isEmpty(url)) { name: "lake",
this.$router.push(url); value: 0,
} url: "/stuGood/about-lake/jwc",
}, },
{
label: "学工·优秀毕业生审核",
name: "biye",
value: 0,
url: "/stuGood/good-graduate/jwc",
},
{
label: "学工·困难认定审核",
name: "kn",
value: 0,
url: "/hard/pks/jwc",
},
{
label: "学工·助学金审核",
name: "zx",
value: 0,
url: "/hard/zxj/jwc",
},
{
label: "学工·宿舍管理审核",
name: "dms",
value: 0,
url: "/dormitory/stuDormitoryManage/final",
},
{
label: "学工·任务管理审核",
name: "rwgl",
value: 0,
url: "/task/todo",
},
{
label: "学工·困难资助审核",
name: "knzz",
value: 0,
url: "hard/tufa/xg",
},
// 宁博
{
label: "学工·国家励志奖学金审核",
name: "knzzgl",
value: 0,
url: "/hard/gl/xg",
},
// 陈冠元
{
label: "学工·自治区人民政府奖学金审核",
name: "knzzzzq",
value: 0,
url: "/hard/zzq/xg",
},
{
label: "学工·学生证补办审核",
name: "xszb",
value: 0,
url: "/routine/sicr/learningIndustrialProductionAudit",
},
{
label: "学工·在校证明审核",
name: "zxzm",
value: 0,
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"])) {
this.countUndo();
this.hasPrem = true;
} }
},
methods: {
async countUndo() {
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));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
}
});
}
},
} toRoute(url) {
if (!isEmpty(url)) {
this.$router.push(url);
}
},
},
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.six-action-container { .six-action-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.six-action-item { .six-action-item {
flex-basis: 33.33%; flex-basis: 33.33%;
} }
.bubble { .bubble {
overflow: hidden; overflow: hidden;
margin: 0 auto; margin: 0 auto;
width: 100%; width: 100%;
height: 170px; height: 170px;
border-radius: 1rem; border-radius: 1rem;
// background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%); // background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%);
position: relative; position: relative;
background-size: cover; background-size: cover;
min-width: 250px; min-width: 250px;
} }
.act-text { .act-text {
width: 100%; width: 100%;
z-index: 2; z-index: 2;
margin: 1rem; margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;
color: #fff;
}
.title { .todo {
text-align: left; margin-top: 1rem;
font-size: 1.25rem; font-size: 6rem;
color: #fff; color: #fff;
} }
.todo {
margin-top: 1rem;
font-size: 6rem;
color: #fff;
}
} }
.bg-to { .bg-to {
cursor: pointer; cursor: pointer;
z-index: 3; z-index: 3;
position: absolute; position: absolute;
bottom: 5%; bottom: 5%;
right: 3%; right: 3%;
margin-top: 10px; margin-top: 10px;
color: white; color: white;
} }
.six-action-item:hover, .six-action-item:hover,
.fast-act:hover { .fast-act:hover {
cursor: pointer; cursor: pointer;
transform: scale(1.1); transform: scale(1.1);
} }
</style> </style>

View File

@@ -1,132 +1,157 @@
<template> <template>
<div> <div>
<div class="six-action-container"> <div class="six-action-container">
<div style="padding: 1rem;" class="six-action-item" v-for="(v, i) in taskList" :key="i"> <div
<div class="bubble" style="padding: 1rem"
:style="{ backgroundImage: `url(${require('@/assets/index_bg/' + (i + 1) + '.png')})` }"> class="six-action-item"
<div class="act-text"> v-for="(v, i) in taskList"
<div class="title"> :key="i"
{{ v.label }}·待办 >
</div> <div
<div class="todo"> class="bubble"
{{ v.value }} :style="{
</div> backgroundImage: `url(${require('@/assets/index_bg/' +
</div> (i + 1) +
<div class="bg-to" @click="toRoute(v.url)">更多</div> '.png')})`,
</div> }"
>
<div class="act-text">
<div class="title">{{ v.label }}·待办</div>
<div class="todo">
{{ v.value }}
</div> </div>
</div>
<div class="bg-to" @click="toRoute(v.url)">更多</div>
</div> </div>
</div>
</div> </div>
</div>
</template> </template>
<script> <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 { isEmpty } from "@/api/helpFunc";
import { checkPermi } from "@/utils/permission"; import { checkPermi } from "@/utils/permission";
export default { export default {
name: "sj-undo", name: "sj-undo",
data() { data() {
return { return {
hasPrem:false, hasPrem: false,
taskList: [ taskList: [
{ {
label: "书记·任务管理审核", label: "书记·任务管理审核",
name: "rwgl", name: "rwgl",
value: 0, value: 0,
url: "/task/todo", url: "/task/todo",
}
]
}
},
created() {
if (checkPermi(['home:sj:undo1'])) {
this.countUndo();
this.hasPrem = true;
}
},
methods: {
async countUndo() {
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));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
}
});
}
}, },
{
toRoute(url) { label: "书记·辅导员综合绩效审核",
if (!isEmpty(url)) { name: "jx",
this.$router.push(url); 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"])) {
this.countUndo();
this.hasPrem = true;
} }
},
methods: {
async countUndo() {
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));
if (!isEmpty(temp)) {
let result = temp[0].split("-")[1];
x.value = result;
}
});
}
},
} toRoute(url) {
if (!isEmpty(url)) {
this.$router.push(url);
}
},
},
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.six-action-container { .six-action-container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.six-action-item { .six-action-item {
flex-basis: 33.33%; flex-basis: 33.33%;
} }
.bubble { .bubble {
overflow: hidden; overflow: hidden;
margin: 0 auto; margin: 0 auto;
width: 100%; width: 100%;
height: 170px; height: 170px;
border-radius: 1rem; border-radius: 1rem;
// background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%); // background-image: linear-gradient(120deg, rgb(134, 233, 98) 0%, rgb(45, 175, 92) 100%);
position: relative; position: relative;
background-size: cover; background-size: cover;
min-width: 250px; min-width: 250px;
} }
.act-text { .act-text {
width: 100%; width: 100%;
z-index: 2; z-index: 2;
margin: 1rem; margin: 1rem;
.title {
text-align: left;
font-size: 1.25rem;
color: #fff;
}
.title { .todo {
text-align: left; margin-top: 1rem;
font-size: 1.25rem; font-size: 6rem;
color: #fff; color: #fff;
} }
.todo {
margin-top: 1rem;
font-size: 6rem;
color: #fff;
}
} }
.bg-to { .bg-to {
cursor: pointer; cursor: pointer;
z-index: 3; z-index: 3;
position: absolute; position: absolute;
bottom: 5%; bottom: 5%;
right: 3%; right: 3%;
margin-top: 10px; margin-top: 10px;
color: white; color: white;
} }
.six-action-item:hover, .six-action-item:hover,
.fast-act:hover { .fast-act:hover {
cursor: pointer; cursor: pointer;
transform: scale(1.1); transform: scale(1.1);
} }
</style> </style>

View File

@@ -95,6 +95,27 @@ export default {
value: 0, value: 0,
url: "/hard/gl/xw", 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, value: data.workLog,
url: "/workstudy/worklog/zdls" 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>
<template v-slot="scope"> <template v-slot="scope">
<button class="action-button" @click="going(scope.row.url)"> <button class="action-button" @click="going(scope.row.url)">
查看更多 点击前往处理
</button> </button>
</template> </template>
</el-table-column> </el-table-column>

View File

@@ -4,7 +4,22 @@
<el-form-item label="学号" prop="studentCode"> <el-form-item label="学号" prop="studentCode">
<el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" />
</el-form-item> </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" <el-cascader v-model="queryParams.classId" ref="cas" style="width: 500px;" :options="cascaderData"
:props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader> :props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader>
</el-form-item> </el-form-item>
@@ -479,7 +494,7 @@
</template> </template>
<script> <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 { treeStudent } from "@/api/stuCQS/basedata/student";
import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year"; import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year";
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
@@ -519,6 +534,7 @@ export default {
biaoJi: null, biaoJi: null,
excelName: null, excelName: null,
redingData: false, redingData: false,
xflag: false,
// 查询参数 // 查询参数
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@@ -595,13 +611,20 @@ export default {
}, },
// 获取级联数据 // 获取级联数据
async getCascaderData() { async getCascaderData() {
const res = await treeStudent() const res = await deptDataList()
this.cascaderData = res.data this.cascaderData = res.data
this.cascaderData.forEach(dept => { if(this.cascaderData.length > 0) {
dept.children.forEach(major => { this.xflag = true;
major.children.forEach(c => { delete c.children }) 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() { async listAllStuYear() {

View File

@@ -4,7 +4,22 @@
<el-form-item label="学号" prop="studentCode"> <el-form-item label="学号" prop="studentCode">
<el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.studentCode" placeholder="请输入学号" clearable @keyup.enter.native="handleQuery" />
</el-form-item> </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" <el-cascader v-model="queryParams.classId" ref="cas" style="width: 500px;" :options="cascaderData"
:props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader> :props="{ checkStrictly: false }" @change="handleChange" clearable filterable></el-cascader>
</el-form-item> </el-form-item>
@@ -388,6 +403,7 @@
<script> <script>
import { listRemarkstext, getRemarkstext, delRemarkstext, addRemarkstext, updateRemarkstext } from "@/api/comprehensive/remarkstext"; import { listRemarkstext, getRemarkstext, delRemarkstext, addRemarkstext, updateRemarkstext } from "@/api/comprehensive/remarkstext";
import { treeStudent } from "@/api/stuCQS/basedata/student"; import { treeStudent } from "@/api/stuCQS/basedata/student";
import { deptDataList } from "@/api/comprehensive/identifytexs";
import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year"; import { listQiyongYear as listYear } from "@/api/stuCQS/basedata/year";
import * as XLSX from 'xlsx'; import * as XLSX from 'xlsx';
import { excelDateToJSDate } from '@/utils/index'; import { excelDateToJSDate } from '@/utils/index';
@@ -426,6 +442,7 @@ export default {
excelName: null, excelName: null,
mode: 'add', mode: 'add',
redingdata: false, redingdata: false,
xflag: false,
// 查询参数 // 查询参数
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@@ -492,12 +509,18 @@ export default {
}, },
// 获取级联数据 // 获取级联数据
async getCascaderData() { async getCascaderData() {
const res = await treeStudent() const res = await deptDataList()
this.cascaderData = res.data this.cascaderData = res.data
this.cascaderData.forEach(dept => { if(this.cascaderData.length > 0) {
dept.children.forEach(major => { this.xflag = true
major.children.forEach(c => { delete c.children }) 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); let res = await initRecord(sdata);
loading.close(); loading.close();
if (res.code == 200) { if (res.code == 200) {
this.$message.success(res.msg); this.$message.success(res.msg + ",住宿费用确认消息已发送给相关学生");
this.getList(); // 刷新列表
} else {
this.$message.error(res.msg || "初始化失败");
} }
}, },
async listAllGrade() { async listAllGrade() {

View File

@@ -40,7 +40,7 @@
<el-form-item label="学院" prop="deptId"> <el-form-item label="学院" prop="deptId">
<el-select @change="changeDept" v-model="queryParams.deptId" placeholder="请选择学院" filterable <el-select @change="changeDept" v-model="queryParams.deptId" placeholder="请选择学院" filterable
clearable> 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-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@@ -88,6 +88,43 @@
</el-collapse-item> </el-collapse-item>
</el-collapse> </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-form-item label=" ">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <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 icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -119,7 +156,7 @@
</template> </template>
<script> <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 { cleanNotStu } from "@/api/dormitory/basedata/dormitory";
import { fullLoading, groupBy, getChineseKey, getImg, isEmpty } from "@/api/helpFunc"; import { fullLoading, groupBy, getChineseKey, getImg, isEmpty } from "@/api/helpFunc";
@@ -139,8 +176,7 @@ export default {
dicts: ['dorm_in_status'], dicts: ['dorm_in_status'],
data() { data() {
return { return {
searInputS: ['1', '2'], // 加载层
// 遮罩层
loading: true, loading: true,
// 选中数组 // 选中数组
ids: [], ids: [],
@@ -162,75 +198,67 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
campusId: null,
parkId: null,
buildingId: null,
floorId: null,
dormitoryId: null, dormitoryId: null,
bedId: null, deptId: null,
majorId: null,
classId: null,
gradeId: null,
stuNo: null, stuNo: null,
isDormitoryHead: null, stuName: null,
status: null, teacherName: null,
checkinTime: null, idCard: null,
inStatus: null submitTime: null,
roleType: null
}, },
// 表单参数 // 表单参数
form: {}, form: {},
// 表单校验 // 表单校验
rules: { 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: { fastForm: {
campusId: null, campusId: null,
parkId: null, parkId: null,
buildingId: null, buildingId: null,
floorId: null, floorId: null,
dormitoryId: null,
}, },
searInputS: ['1', '2'],
campus_list: [],
deptList: [],//学院列表
majorList: [],//专业列表
classList: [],//班级列表
gradeList: [],//年级列表
park_list: [], park_list: [],
building_list: [], building_list: [],
floor_list: [], floor_list: [],
room_list: [], room_list: [],
deptList: [],
majorList: [],
exportV: false, classList: [],
campus_list: [], gradeList: [],
fast_park_list: [], userRoleInfo: null,
fast_building_list: [], showRoleSwitch: false,
fast_floor_list: [], // 导入参数
fast_class_list: [],
fast_major_list: [],
fast_room_list: [],
uploadV: false,
upload: { upload: {
// 是否显示弹出层(导入)
open: false,
// 弹出层标题(导入)
title: "",
// 是否禁用上传
isUploading: false, isUploading: false,
// 是否更新已经存在的用户数据
updateSupport: 0, updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getTokenKeySessionStorage() }, 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 allLoading: false
}; };
}, },
created() { async created() {
this.listDept(); await this.getUserRoles();
await this.listDept();
this.listGrade(); this.listGrade();
this.getList(); this.getList();
this.listAllCampus(); this.listAllCampus();
@@ -247,8 +275,8 @@ export default {
}, },
async changeFloor(val) { async changeFloor(val) {
this.queryParams.dormitoryId = null; this.queryParams.dormitoryId = null;
this.room_list = []; this.room_list = [];
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listAllRoomByFloor(this.queryParams.floorId); let res = await listAllRoomByFloor(this.queryParams.floorId);
if (res.code == 200) { if (res.code == 200) {
@@ -259,9 +287,10 @@ export default {
async changeBuilding(val) { async changeBuilding(val) {
this.queryParams.floorId = null; this.queryParams.floorId = null;
this.queryParams.dormitoryId = null;
this.floor_list = []; this.floor_list = [];
this.room_list = []; this.room_list = [];
this.queryParams.dormitoryId = null;
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listFloorByBuilding(this.queryParams.buildingId); let res = await listFloorByBuilding(this.queryParams.buildingId);
if (res.code == 200) { if (res.code == 200) {
@@ -273,7 +302,6 @@ export default {
this.queryParams.buildingId = null; this.queryParams.buildingId = null;
this.queryParams.floorId = null; this.queryParams.floorId = null;
this.queryParams.dormitoryId = null; this.queryParams.dormitoryId = null;
this.building_list = []; this.building_list = [];
this.floor_list = []; this.floor_list = [];
this.room_list = []; this.room_list = [];
@@ -291,7 +319,6 @@ export default {
this.queryParams.buildingId = null; this.queryParams.buildingId = null;
this.queryParams.floorId = null; this.queryParams.floorId = null;
this.queryParams.dormitoryId = null; this.queryParams.dormitoryId = null;
this.park_list = []; this.park_list = [];
this.building_list = []; this.building_list = [];
this.floor_list = []; this.floor_list = [];
@@ -304,44 +331,43 @@ export default {
} }
} }
}, },
async listGrade() { async listGrade() {
let res = await listGrade(); let res = await listGrade();
this.gradeList = [...res.rows]; this.gradeList = [...res.rows];
}, },
async changeMajor(val) {
async changeMajor() { this.queryParams.classId = null;
if (!isEmpty(this.queryParams.majorId)) { this.classList = [];
let sdata = { if (!isEmpty(val)) {
majorId: this.queryParams.majorId let res = await listClass({ majorId: this.queryParams.majorId });
if (res.code == 200) {
this.classList = [...res.data];
} }
let res = await listClass(sdata);
this.classList = [...res.data];
} else {
this.queryParams.classId = null;
this.classList = [];
} }
}, },
async changeDept() { async changeDept(val) {
if (!isEmpty(this.queryParams.deptId)) { this.queryParams.majorId = null;
let sdata = { this.queryParams.classId = null;
collegeId: this.queryParams.deptId, this.majorList = [];
pageNum: 1, this.classList = [];
pageSize: 100 if (!isEmpty(val)) {
let res = await listMajors({ collegeId: this.queryParams.deptId, pageNum: 1, pageSize: 100 });
if (res.code == 200) {
this.majorList = [...res.rows];
} }
let res = await listMajors(sdata);
this.majorList = [...res.rows];
} else {
this.queryParams.majorId = null;
this.majorList = [];
} }
}, },
async listDept() { async listDept() {
let res = await getDeptName(); 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) { async changeFastFloor(val) {
this.form.dormitoryId = null; this.fastForm.dormitoryId = null;
this.room_list = [];
this.fast_room_list = [];
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listAllRoomByFloor(this.fastForm.floorId); let res = await listAllRoomByFloor(this.fastForm.floorId);
if (res.code == 200) { if (res.code == 200) {
this.fast_room_list = [...res.data]; this.room_list = [...res.data];
} }
} }
}, },
async changeFastBuilding(val) { async changeFastBuilding(val) {
this.fastForm.floorId = null; this.fastForm.floorId = null;
this.fast_floor_list = []; this.fastForm.dormitoryId = null;
this.fast_room_list = []; this.floor_list = [];
this.form.dormitoryId = null; this.room_list = [];
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listFloorByBuilding(this.fastForm.buildingId); let res = await listFloorByBuilding(this.fastForm.buildingId);
if (res.code == 200) { if (res.code == 200) {
this.fast_floor_list = [...res.data]; this.floor_list = [...res.data];
} }
} }
}, },
async changeFastPark(val) { async changeFastPark(val) {
this.fastForm.buildingId = null; this.fastForm.buildingId = null;
this.fastForm.floorId = null; this.fastForm.floorId = null;
this.form.dormitoryId = null; this.fastForm.dormitoryId = null;
this.building_list = [];
this.fast_building_list = []; this.floor_list = [];
this.fast_floor_list = []; this.room_list = [];
this.fast_room_list = [];
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listBuildingByPark(this.fastForm.parkId); let res = await listBuildingByPark(this.fastForm.parkId);
if (res.code == 200) { 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.parkId = null;
this.fastForm.buildingId = null; this.fastForm.buildingId = null;
this.fastForm.floorId = null; this.fastForm.floorId = null;
this.form.dormitoryId = null; this.fastForm.dormitoryId = null;
this.park_list = [];
this.fast_park_list = []; this.building_list = [];
this.fast_building_list = []; this.floor_list = [];
this.fast_floor_list = []; this.room_list = [];
this.fast_room_list = [];
if (!isEmpty(val)) { if (!isEmpty(val)) {
let res = await listParkByCampus(this.fastForm.campusId); let res = await listParkByCampus(this.fastForm.campusId);
if (res.code == 200) { if (res.code == 200) {
this.fast_park_list = [...res.data]; this.park_list = [...res.data];
} }
} }
}, },
@@ -441,13 +464,13 @@ export default {
reset() { reset() {
this.form = { this.form = {
id: null, id: null,
stuId: null,
dormitoryId: null, dormitoryId: null,
bedId: null, createBy: null,
stuNo: null, createTime: null,
isDormitoryHead: null, updateBy: null,
status: null, updateTime: null,
checkinTime: null, remark: null
inStatus: null
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@@ -462,7 +485,33 @@ export default {
this.handleQuery(); 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> </script>
@@ -472,4 +521,5 @@ export default {
margin-bottom: 5px; margin-bottom: 5px;
} }
} }
</style> </style>

View File

@@ -42,6 +42,7 @@
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <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 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="fastConfirm">一键确认所有辅导员已确认的记录</el-button>
<el-button type="success" icon="el-icon-check" size="mini" @click="confirmUnconfirmedStudents">一键确认未进行住宿费用确认的学生</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@@ -152,7 +153,7 @@
</template> </template>
<script> <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"; import { listAllYear } from "@/api/stuCQS/basedata/year";
@@ -358,6 +359,26 @@ export default {
this.download('dormitory/newRecord/export', { this.download('dormitory/newRecord/export', {
...this.queryParams ...this.queryParams
}, `newRecord_${new Date().getTime()}.xlsx`) }, `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> <template slot="label"> 班级 </template>
{{ form.className }} {{ form.className }}
</el-descriptions-item> </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> <el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template> <template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }} {{ form.jg }}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -42,6 +42,14 @@
<template slot="label"> 班级 </template> <template slot="label"> 班级 </template>
{{ form.className }} {{ form.className }}
</el-descriptions-item> </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> <el-descriptions-item>
<template slot="label"> 籍贯/自治区/直辖市 </template> <template slot="label"> 籍贯/自治区/直辖市 </template>
{{ form.jg }} {{ form.jg }}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <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>
<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-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>
<el-col :span="1.5"> <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-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-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-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:relieve:export']">导出</el-button>
</el-col> </el-col>
@@ -119,6 +119,18 @@
<el-input v-model="form.mz" placeholder="" /> <el-input v-model="form.mz" placeholder="" />
</el-form-item> </el-form-item>
</el-col> </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-col :span="12">
<el-form-item label="出生日期" prop="birthday"> <el-form-item label="出生日期" prop="birthday">
<el-input v-model="form.birthday" placeholder="" /> <el-input v-model="form.birthday" placeholder="" />
@@ -247,6 +259,7 @@ export default {
gradeName: [{ required: true, message: '请输入年级', trigger: 'blur' }], gradeName: [{ required: true, message: '请输入年级', trigger: 'blur' }],
className: [{ required: true, message: '请输入班级', trigger: 'blur' }], className: [{ required: true, message: '请输入班级', trigger: 'blur' }],
mz: [{ required: true, message: '请输入民族', trigger: 'blur' }], mz: [{ required: true, message: '请输入民族', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
birthday: [{ required: true, message: '请输入出生日期', trigger: 'blur' }], birthday: [{ required: true, message: '请输入出生日期', trigger: 'blur' }],
jg: [{ required: true, message: '请选择籍贯', trigger: 'blur' }], jg: [{ required: true, message: '请选择籍贯', trigger: 'blur' }],
penaltyNumber: [{ required: true, message: '请输入处分文号', trigger: 'blur' }], penaltyNumber: [{ required: true, message: '请输入处分文号', trigger: 'blur' }],

View File

@@ -20,14 +20,14 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <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>
<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-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>
<el-col :span="1.5"> <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-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-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-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuDropOutSchool:export']">导出</el-button>
</el-col> </el-col>
@@ -304,6 +304,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }], parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }], mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }], jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }], attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }], reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }], applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <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>
<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-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>
<el-col :span="1.5"> <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-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-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-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuQuitSchool:export']">导出</el-button>
</el-col> </el-col>
@@ -293,6 +293,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }], parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }], mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }], jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }], attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }], reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }], applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -18,14 +18,14 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <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>
<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-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>
<el-col :span="1.5"> <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-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-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-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['routine:rtStuReentrySchool:export']">导出</el-button>
</el-col> </el-col>
@@ -308,6 +308,7 @@ export default {
parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }], parentPhone: [{ required: true, message: '家长电话不能为空', trigger: 'blur' }],
mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }], mz: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }], jg: [{ required: true, message: '籍贯不能为空', trigger: 'blur' }],
politicalStatus: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }], attachmentUpload: [{ required: true, message: '请上传附件', trigger: 'blur' }],
reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }], reasonApplying: [{ required: true, message: '请输入申请原因', trigger: 'blur' }],
applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }], applySignature: [{ required: true, message: '请上传申请人签名', trigger: 'blur' }],

View File

@@ -16,7 +16,7 @@
</el-form-item> --> </el-form-item> -->
<el-form-item label="审核时间" prop="reviewTime"> <el-form-item label="审核时间" prop="reviewTime">
<el-date-picker clearable v-model="queryParams.reviewTime" type="date" value-format="yyyy-MM-dd" <el-date-picker clearable v-model="queryParams.reviewTime" type="date" value-format="yyyy-MM-dd"
placeholder="请选择审核时间"> placeholder="请选择审核时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@@ -28,19 +28,19 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['routine:stuMultiLevelReview:add']">新增</el-button> v-hasPermi="['routine:stuMultiLevelReview:add']">新增</el-button>
</el-col> </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" <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['routine:stuMultiLevelReview:edit']">修改</el-button> v-hasPermi="['routine:stuMultiLevelReview:edit']">修改</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['routine:stuMultiLevelReview:remove']">删除</el-button> v-hasPermi="['routine:stuMultiLevelReview:remove']">删除</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['routine:stuMultiLevelReview:export']">导出</el-button> v-hasPermi="['routine:stuMultiLevelReview:export']">导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getUser"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getUser"></right-toolbar>
</el-row> </el-row>
@@ -76,17 +76,17 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" @click="handleCompleted(scope.row)" <el-button size="mini" type="text" @click="handleCompleted(scope.row)"
v-hasPermi="['routine:stuMultiLevelReview:completed']" v-if="scope.row.reviewerStatus === 2">完成制作</el-button> v-hasPermi="['routine:stuMultiLevelReview:completed']" v-if="scope.row.reviewerStatus === 2">完成制作</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['routine:stuMultiLevelReview:edit']">修改</el-button> v-hasPermi="['routine:stuMultiLevelReview:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['routine:stuMultiLevelReview:remove']">删除</el-button> v-hasPermi="['routine:stuMultiLevelReview:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getUser" /> @pagination="getUser" />
<!-- 添加或修改多级审核 <!-- 添加或修改多级审核
对话框 --> 对话框 -->
@@ -109,7 +109,7 @@
</el-form-item> </el-form-item>
<el-form-item label="审核时间" prop="reviewTime"> <el-form-item label="审核时间" prop="reviewTime">
<el-date-picker clearable v-model="form.reviewTime" type="date" value-format="yyyy-MM-dd" <el-date-picker clearable v-model="form.reviewTime" type="date" value-format="yyyy-MM-dd"
placeholder="请选择审核时间"> placeholder="请选择审核时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="notes"> <el-form-item label="备注" prop="notes">
@@ -229,7 +229,7 @@ export default {
this.roleGroup = response.roleGroup; this.roleGroup = response.roleGroup;
// this.postGroup = response.postGroup; // this.postGroup = response.postGroup;
// console.log(response); // console.log(response);
if (!response.roleGroup.includes("超级管理员")) { if (!response.roleGroup.includes("超级管理员")) {
this.queryParams.reviewer = response.data.nickName this.queryParams.reviewer = response.data.nickName
} }
this.getList(); this.getList();
@@ -237,7 +237,7 @@ export default {
}); });
}, },
/** 查询多级审核 /** 查询多级审核
列表 */ 列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listStuMultiLevelReview(this.queryParams).then(response => { listStuMultiLevelReview(this.queryParams).then(response => {
@@ -346,25 +346,25 @@ export default {
this.completedForm.id = row.id; this.completedForm.id = row.id;
this.completedOpen = true; this.completedOpen = true;
}, },
// 完成制作表单重置 // 完成制作表单重置
resetCompleted() { resetCompleted() {
this.completedForm = { this.completedForm = {
stuName: null, stuName: null,
stuNo: null, stuNo: null,
reason: null, reason: null,
messageContent: "你申请办理的学生证制作完成,长堽校区前往xxx领取里建校区前往xxx领取", messageContent: "你申请办理的学生证制作完成,长堽校区前往经管楼学工处1-1办公室领取里建校区前往“一站式”学生社区大厅领取",
id: null id: null
}; };
this.resetForm("completedForm"); this.resetForm("completedForm");
}, },
// 完成制作取消按钮 // 完成制作取消按钮
cancelCompleted() { cancelCompleted() {
this.completedOpen = false; this.completedOpen = false;
this.resetCompleted(); this.resetCompleted();
}, },
// 完成制作提交按钮 // 完成制作提交按钮
submitCompleted() { submitCompleted() {
this.$refs["completedForm"].validate(valid => { this.$refs["completedForm"].validate(valid => {
@@ -374,10 +374,10 @@ export default {
const receiverId = response.data; const receiverId = response.data;
if (!receiverId) { if (!receiverId) {
throw new Error('未找到学生用户ID'); throw new Error('未找到学生用户ID');
} }
// 第二步:获取当前用户信息作为发送者 // 第二步:获取当前用户信息作为发送者
return getUserProfile().then(userResponse => { return getUserProfile().then(userResponse => {
const senderId = userResponse.data.userId; const senderId = userResponse.data.userId;
// 第三步:发送消息通知学生 // 第三步:发送消息通知学生
return addMsg({ return addMsg({
sender: senderId, sender: senderId,