This commit is contained in:
2025-12-03 09:58:31 +08:00
14 changed files with 1166 additions and 61 deletions

View File

@@ -42,3 +42,13 @@ export function delEnlistmentReserveApproval(id) {
method: 'post'
})
}
// 新增保留学籍审批记录
export function insertOrUpdateByStuAndApprover(data) {
return request({
url: '/routine/enlistmentReserveApproval/insertOrUpdateByStuAndApprover',
method: 'post',
data: data
})
}

View File

@@ -51,3 +51,12 @@ export function delEnlistmentReserveAttach(id) {
method: 'post'
})
}
// 删除保留学籍申请附件(入伍通知书等)
export function deleteRtEnlistmentReserveAttachByFileNameAndStuName(query) {
return request({
url: '/routine/enlistmentReserveAttach/deleteRtEnlistmentReserve',
method: 'post',
params: query
})
}

View File

@@ -75,3 +75,12 @@ export function delYear(id) {
method: 'post'
})
}
//为学年分配标签
export function assignTag(yearId,tag){
return request({
url:`/system/year/${yearId}/assign-tag`,
method: 'post',
params:{ tag: tag }
})
}

View File

@@ -251,6 +251,10 @@ export default {
if(this.fileList.length == 0){
this.affixId = ''
}
// 关键:触发自定义事件,传递被删除的文件名
// 事件名建议delete-file参数file.name文件名
this.$emit('delete-file', file.name);
} else {
this.$message.error(res.message)
}

View File

@@ -439,7 +439,7 @@
<!--流程流转记录-->
<el-tab-pane label="流转记录" name="2">
<!--flowRecordList-->
<el-col :span="16" :offset="4">
<el-col :span="16" :offset="4" v-loading="loading" style="min-height: 500px;">
<div class="block">
<el-timeline>
<el-timeline-item v-for="(item, index) in flowRecordList" :key="index" :icon="setIcon(item.finishTime)" :color="setColor(item.finishTime)">
@@ -660,7 +660,10 @@ import { checkRole } from '@/utils/permission' // 权限判断函数
import flow from '@/views/flowable/task/todo/detail/flow'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import pdf from 'vue-pdf'
import { getEnlistmentReserveByProcessInstanceId} from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { getEnlistmentReserveByProcessInstanceId, updateEnlistmentReserve } from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { insertOrUpdateByStuAndApprover } from "@/api/routine/enlistmentReserve/enlistmentReserveApproval";
import { getUserProfile } from '@/api/system/user' // 获取当前登录用户
import { updateStudent } from '@/api/stuCQS/basedata/student'
export default {
name: 'Record',
@@ -728,7 +731,8 @@ export default {
variables: {
variables: {},
approvalOpinion: '', // 必须初始化,避免 null 报错
approvalResult: ''
approvalResult: '',
targetNodeName: ''
},
penaltyNumber: '',
letterServiceContent: '',
@@ -983,9 +987,11 @@ export default {
flowRecord(params)
.then((res) => {
that.flowRecordList = res.data.flowList
this.loading = false
})
.catch((res) => {
this.goBack()
this.loading = false
})
},
fillFormData(form, data) {
@@ -1015,24 +1021,7 @@ export default {
// 初始化或完善 variables 对象,确保 approvalOpinion入伍保留学籍申请审核意见 存在
if (this.taskForm.variables == null) {
// 情况1variables 为 null → 初始化完整结构(包含原有 variables 嵌套和 approvalOpinion
this.taskForm.variables = {
variables: {}, // 保留原有的嵌套 variables 结构(后端可能依赖)
approvalOpinion: '', // 初始化审批意见为空白
approvalResult: ''
}
} else {
// 情况2variables 已存在 → 保留原有字段,补充 approvalOpinion无则添加有则保留原值
this.taskForm.variables = {
...this.taskForm.variables, // 展开原有所有字段(如 variables、其他自定义字段
approvalOpinion: this.taskForm.variables.approvalOpinion || '', // 兜底:若原有未定义则设为空白
approvalResult: this.taskForm.variables.approvalOpinion || ''
}
}
this.initApproval()
this.formKeyExist = res.data.formKeyExist
})
@@ -1058,7 +1047,7 @@ export default {
if (valid) {
this.$modal.loading('正在努力加载中,请稍等...')
this.taskForm.comment = '同意'
this.taskForm.comment = this.taskForm.variables.approvalOpinion != '' ? this.taskForm.variables.approvalOpinion : '同意'
this.taskForm.variables.approvalResult = 1
if (this.taskForm && this.formKeyExist) {
// 表单是否禁用
@@ -1070,7 +1059,6 @@ export default {
complete(this.taskForm).then((response) => {
this.$modal.closeLoading()
this.goBack()
})
} else {
@@ -1102,6 +1090,10 @@ export default {
this.form.quitNumber = this.taskForm.quitNumber
this.form.remark = this.taskForm.remark
this.updateRtStuQuitSchool()
} else if (this.category == 'enlistmentReserve') { // 是应征入伍保留学籍申请,才执行
if (this.taskName == '教务处主管领导审批') { // (最后一个领导审核完成之后,修改学生学籍状态, status07是入伍保留学籍)
updateStudent({stuId: this.form.studentId, status: '07'}).then(response => {})
}
} else {
this.$modal.msgSuccess(response.msg)
}
@@ -1153,13 +1145,18 @@ export default {
/** 驳回任务 */
taskReject() {
this.$refs['taskForm'].validate((valid) => {
this.$modal.loading('正在努力加载中,请稍等...')
if (valid) {
// 入伍保留学籍审核状态和意见
this.taskForm.variables.approvalResult = 0
this.taskForm.variables.approvalOpinion = this.taskForm.comment
rejectTask(this.taskForm).then((res) => {
// 是应征入伍保留学籍申请,才执行
if (this.category == 'enlistmentReserve') {
this.taskReturnApproval("驳回")
}
this.$modal.msgSuccess(res.msg)
this.$modal.closeLoading()
this.goBack()
})
}
@@ -1172,18 +1169,46 @@ export default {
returnList(this.taskForm).then((res) => {
this.returnTaskList = res.data
this.taskForm.variables = null
// 是应征入伍保留学籍申请,才执行
if (this.category == 'enlistmentReserve') {
// 取原审批列表的副本避免直接修改原表单数据导致重复push
const approvalList = [...this.form.enlistmentReserveApprovalList]
// 判断approvalList中是否已存在"学生申请"项仅不存在时才push
const hasStudentApply = approvalList.some(record => record.nodeName === "学生申请")
if (!hasStudentApply) {
approvalList.push({ nodeName: "学生申请" })
}
// 过滤returnTaskList使用处理后的临时approvalList不污染原数据
this.returnTaskList = this.returnTaskList.filter(returnTask => {
return approvalList.some(record => record.nodeName === returnTask.documentation)
})
}
this.initApproval()
})
},
/** 提交退回任务 */
taskReturn() {
this.$refs['taskForm'].validate((valid) => {
if (valid) {
this.$modal.loading('正在努力加载中,请稍等...')
returnTask(this.taskForm).then((res) => {
// 是应征入伍保留学籍申请,才执行
if (this.category == 'enlistmentReserve') {
this.taskReturnApproval("退回")
}
this.$modal.msgSuccess(res.msg)
this.$modal.closeLoading()
this.goBack()
})
}
})
},
/** 取消回退任务按钮 */
cancelTask() {
@@ -1240,6 +1265,70 @@ export default {
fileUpload() {
download.resource(this.pdfURL)
},
// 初始化入伍保留学籍申请审核意见参数
initApproval() {
// 初始化或完善 variables 对象,确保 approvalOpinion入伍保留学籍申请审核意见 存在
if (this.taskForm.variables == null) {
// 情况1variables 为 null → 初始化完整结构(包含原有 variables 嵌套和 approvalOpinion
this.taskForm.variables = {
variables: {}, // 保留原有的嵌套 variables 结构(后端可能依赖)
approvalOpinion: '', // 初始化审批意见为空白
approvalResult: '', // 审批状态
targetNodeName: '' // 审批节点
}
} else {
// 情况2variables 已存在 → 保留原有字段,补充 approvalOpinion无则添加有则保留原值
this.taskForm.variables = {
...this.taskForm.variables, // 展开原有所有字段(如 variables、其他自定义字段
approvalOpinion: this.taskForm.variables.approvalOpinion || '', // 兜底:若原有未定义则设为空白
approvalResult: this.taskForm.variables.approvalResult || '',
targetNodeName: this.taskForm.variables.targetNodeName || ''
}
}
},
// 退回或驳回的时候生成入伍保留学籍申请审核
taskReturnApproval(text) {
getUserProfile().then(res => {
let data = {
applyId: this.form.id,
processInstanceId: this.form.processInstanceId,
taskId: this.taskForm.taskId,
nodeName: this.taskName,
approverId: res.data.userId,
approverName: res.data.nickName,
approvalOpinion: this.taskForm.comment,
approvalResult: 2,
studentName: this.form.studentName,
studentNo: this.form.studentNo
}
// 生成审核记录
insertOrUpdateByStuAndApprover(data).then(ress => {
// 审核记录生成之后,判断退回或驳回是不是到学生申请,如果是则更新申请表状态
if (text == '退回') {
let nodeName = ''
this.returnTaskList.forEach(element => {
if (element.id == this.taskForm.targetKey) { // 如果选中的节点id等于列表里面的id就将节点名称获取到nodeName
nodeName = element.documentation
}
});
if (nodeName == '学生申请') { // 如果退回选择的是学生节点更新申请表状态
this.form.applyStatus = 0
updateEnlistmentReserve(this.form).then(result => {
this.$modal.closeLoading()
})
}
} else {
// 驳回
if (this.taskName == '辅导员审批') { // 当前节点如果是辅导员审批,证明驳回就到了学生,所以更新申请表状态
this.form.applyStatus = 0
updateEnlistmentReserve(this.form).then(result => {
this.$modal.closeLoading()
})
}
}
})
})
}
},
}
</script>

View File

@@ -92,7 +92,32 @@
__
{{ form.maList.length > 0 ? form.maList[0].newmajor : '暂无数据' }}__
</p>
<p class="attachment-tip">设上传入伍通知书等佐证材料区域</p>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].proof"
:src="form.maList[0].proof"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].idcard"
:src="form.maList[0].idcard"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].material"
:src="form.maList[0].material"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<p class="attachment-tip"></p>
<div class="applicant-info right-align">
<span>申请人</span>
<el-input v-model="form.stName" readonly class="applicant-input"></el-input>
@@ -109,7 +134,7 @@
<tr></tr>
<!-- 招生意见行 -->
<tr>
<tr v-if="form.conversion === 'Y'">
<td class="label" rowspan="4">招生与<br />就业处<br />意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<p class="reason-text" style="color: red;">符合转专业条件拟同意转入年级和专业

View File

@@ -0,0 +1,729 @@
<template>
<div class="application-form-container">
<h2 class="form-title">广西水利电力职业技术学院</h2>
<h3 class="form-subtitle">退役复学申请表</h3>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<table class="application-table">
<!-- 基本信息行1 -->
<tr>
<td class="label">姓名</td>
<td class="input-cell">
<el-form-item prop="stName" class="form-item-custom">
<el-input v-model="form.stName" placeholder="请输入姓名" class="basic-input"></el-input>
</el-form-item>
</td>
<td class="label">性别</td>
<td class="input-cell">
<el-form-item prop="sex" class="form-item-custom">
<el-select v-model="form.sex" placeholder="请选择性别" class="basic-input">
<el-option label="男" value="0"></el-option>
<el-option label="女" value="1"></el-option>
</el-select>
</el-form-item>
</td>
<td class="label">民族</td>
<td class="input-cell">
<el-form-item prop="nations" class="form-item-custom">
<el-input v-model="form.nations" placeholder="请输入民族" class="basic-input"></el-input>
</el-form-item>
</td>
<td class="label">班级</td>
<td class="input-cell" colspan="2">
<el-form-item prop="stClass" class="form-item-custom">
<el-input v-model="form.stClass" placeholder="请输入年级" class="basic-input"></el-input>
</el-form-item>
</td>
</tr>
<!-- 专业学号班级行 -->
<tr>
<td class="label">学号</td>
<td class="input-cell">
<el-form-item prop="stId" class="form-item-custom">
<el-input v-model="form.stId" placeholder="请输入学号" class="basic-input" type="textarea" :rows="3"></el-input>
</el-form-item>
</td>
<td class="label" rowspan="2">专业<br />名称</td>
<td class="input-cell" colspan="3" rowspan="2">
<el-form-item prop="majors" class="form-item-custom">
<el-input v-model="form.majors" placeholder="请输入专业名称" class="major-input" type="textarea" :rows="3"></el-input>
</el-form-item>
</td>
<td class="label">联系电话</td>
<td class="input-cell" colspan="2">
<el-form-item prop="datab" class="form-item-custom">
<el-input v-model="form.datab" placeholder="请输入电话" class="basic-input" type="textarea" :rows="3"></el-input>
</el-form-item>
</td>
</tr>
<tr></tr>
<tr>
<td class="label" rowspan="4">申请<br />理由</td>
<td class="input-cell" colspan="8" rowspan="4">
<p class="reason-text">本人于
<el-form-item prop="rwTime" class="form-item-custom inline-item">
<el-date-picker v-model="form.rwTime" type="date" placeholder="选择日期" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" class="date-picker"></el-date-picker>
</el-form-item>
应征入伍
<el-form-item prop="dataa" class="form-item-custom inline-item">
<el-date-picker v-model="form.dataa" type="date" placeholder="选择日期" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" class="date-picker"></el-date-picker>
</el-form-item> 日退役退役后申请复学
</p>
<p class="reason-text" style="" v-if="form.conversion=='Y'">是否申请转专业
</p>
<p class="reason-text" style="" v-else>是否申请转专业 ×
</p>
<p class="reason-text" style="color: red;">原年级和专业:__
{{ form.maList.length > 0 ? form.maList[0].oldgrade : '暂无数据' }}
__{{ form.maList.length > 0 ? form.maList[0].oldmajor : '暂无数据' }}__
<!-- <el-input v-model="form.maList.oldgrade" type="textarea" :rows="3"
class="opinion-textarea">{{oldgrade}}</el-input> -->
<!-- <el-input v-model="form.maList.oldgrade" type="textarea" :rows="3"
class="opinion-textarea"></el-input> -->
申请转入年级和专业__
{{ form.maList.length > 0 ? form.maList[0].newgrade : '暂无数据' }}
__
{{ form.maList.length > 0 ? form.maList[0].newmajor : '暂无数据' }}__
</p>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].proof"
:src="form.maList[0].proof"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].idcard"
:src="form.maList[0].idcard"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<image-preview
v-if="form.maList.length > 0 && form.maList[0].material"
:src="form.maList[0].material"
:width="240"
:height="160"
/>
<span v-else>暂无图片</span>
<p class="attachment-tip"></p>
<div class="applicant-info right-align">
<span>申请人</span>
<el-input v-model="form.stName" readonly class="applicant-input"></el-input>
<span class="date-label">日期</span>
<el-form-item prop="times" class="form-item-custom inline-item">
<el-date-picker v-model="form.times" type="date" placeholder="选择日期" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</el-form-item>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 招生意见行 -->
<tr v-if="form.conversion === 'Y'">
<td class="label" rowspan="4">招生与<br />就业处<br />意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<p class="reason-text" style="color: red;">符合转专业条件拟同意转入年级和专业
__{{ form.maList.length > 0 ? form.maList[0].newgrade : '暂无数据' }}
__
{{ form.maList.length > 0 ? form.maList[0].newmajor : '暂无数据' }}__
</p>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.status" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.idea" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.time" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 辅导员意见行 -->
<tr>
<td class="label" rowspan="4">辅导员<br />意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<el-input v-model="form.fdIdea" type="textarea" :rows="3" placeholder="请填写辅导员意见..."
class="opinion-textarea"></el-input>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.fdStatus" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.fdQm" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.fdTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 学务意见行 -->
<tr>
<td class="label" rowspan="4">学务<br />意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<p>拟编入</p>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.xwStatus" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.xwQm" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.xwTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 二级意见行 -->
<tr>
<td class="label" rowspan="4">二级学<br />院意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<el-input v-model="form.twoIdea" type="textarea" :rows="3" placeholder="请填写意见..."
class="opinion-textarea"></el-input>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.twoStatus" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.erQm" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.twoTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 学籍管理科意见行 -->
<tr>
<td class="label" rowspan="4">学籍管<br />理科意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<el-input v-model="form.xjIdea" type="textarea" :rows="3" placeholder="请填写意见..."
class="opinion-textarea"></el-input>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.xjglStatus" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.xjQm" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.xjTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<!-- 教务处主意见行 -->
<tr>
<td class="label" rowspan="4">教务处<br />主管领导意见</td>
<td class="input-cell" colspan="8" rowspan="4">
<el-input v-model="form.jwIdea" type="textarea" :rows="3" placeholder="请填写意见..."
class="opinion-textarea"></el-input>
<div class="signature-area right-align">
<span>审批结果</span>
<el-select v-model="form.jwStatus" placeholder="请选择" class="short-select">
<el-option label="通过" value="1"></el-option>
<el-option label="驳回" value="2"></el-option>
</el-select>
<span class="date-label">签名</span>
<el-input v-model="form.jwQm" placeholder="请输入姓名" class="signature-input"></el-input>
<span class="date-label">日期</span>
<el-date-picker v-model="form.jwTime" type="date" placeholder="选择日期"
format="yyyy-MM-dd" value-format="yyyy-MM-dd" class="date-picker full-date"></el-date-picker>
</div>
</td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
</table>
<!-- 说明信息 -->
<div class="form-description">
<p>说明1.本表应附学生入伍证明材料复印件</p>
<p>2.本表一式两份二级学院和教务处各留存一份</p>
</div>
<!-- 操作按钮 -->
<!-- <div class="form-btn-group"> -->
<!-- <el-button type="primary" @click="submitForm">提交审核</el-button> -->
<!-- <el-button @click="resetForm">重置表单</el-button> -->
<!-- <el-button type="text" @click="printForm">打印表单</el-button> -->
<!-- </div> -->
</el-form>
</div>
</template>
<script>
import { listBasic, getBasic, delBasic, addBasic, updateBasic } from "@/api/routine/basic";
export default {
name: "Basic",
dicts: ['sys_user_sex'],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 退伍复学申请表格数据
basicList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
fxId: null,
fxTime: null,
stId: null,
stName: null,
fdName: null,
sex: null,
nations: null,
fdQm: null,
xwQm: null,
erQm: null,
xjQm: null,
jwQm: null,
stClass: null,
majors: null,
grade: null,
college: null,
reasons: null,
fdIdea: null,
twoIdea: null,
xwIdea: null,
xjIdea: null,
jwIdea: null,
zsIdea: null,
zsStatus: null,
times: null,
fdStatus: null,
xwStatus: null,
twoStatus: null,
xjglStatus: null,
jwStatus: null,
rwTime: null,
zsTime: null,
fdTime: null,
xwTime: null,
twoTime: null,
xjTime: null,
jwTime: null,
datab: null,
dataa: null,
conversion: null,
processId: null,
deployId: null
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
this.showData()
},
methods: {
showData() {
if (this.$route.query.id != undefined) {
console.log(this.$route.query.id)
getBasic(this.$route.query.id).then((response) => {
this.form = response.data
// this.active = response.data.status + 1;
})
}
},
/** 查询退伍复学申请列表 */
getList() {
this.loading = true;
listBasic(this.queryParams).then(response => {
this.basicList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
fxId: null,
fxTime: null,
stId: null,
stName: null,
fdName: null,
sex: null,
nations: null,
fdQm: null,
xwQm: null,
erQm: null,
xjQm: null,
jwQm: null,
stClass: null,
majors: null,
grade: null,
college: null,
reasons: null,
fdIdea: null,
twoIdea: null,
xwIdea: null,
xjIdea: null,
jwIdea: null,
zsIdea: null,
zsStatus: null,
times: null,
fdStatus: null,
xwStatus: null,
twoStatus: null,
xjglStatus: null,
jwStatus: null,
rwTime: null,
zsTime: null,
fdTime: null,
xwTime: null,
twoTime: null,
xjTime: null,
jwTime: null,
datab: null,
dataa: null,
conversion: null,
processId: null,
deployId: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加退伍复学申请";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getBasic(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改退伍复学申请";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateBasic(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addBasic(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除退伍复学申请编号为"' + ids + '"的数据项?').then(function() {
return delBasic(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('routine/basic/export', {
...this.queryParams
}, `basic_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style scoped>
.application-form-container {
width: 100%;
padding: 30px;
box-sizing: border-box;
font-family: "Source Han Sans CN", "PingFang SC", "Microsoft YaHei", sans-serif;
}
.form-title {
text-align: center;
font-size: 20px;
font-weight: 700;
color: #222;
margin: 0 0 12px 0;
}
.form-subtitle {
text-align: center;
font-size: 18px;
font-weight: 600;
color: #222;
margin: 0 0 25px 0;
}
.application-table {
width: 100%;
border-collapse: separate;
/* 关键使用separate替代collapse */
border-spacing: 0;
/* 消除单元格间距 */
border: 1.5px solid #000;
background-color: #fff;
position: relative;
z-index: 1;
}
.application-table td {
border: 1px solid #000;
padding: 8px;
vertical-align: top;
position: relative;
/* 关键:为子元素提供定位上下文 */
}
.label {
width: 80px;
text-align: center;
background-color: #f5f5f5;
font-weight: 600;
line-height: 1.6;
vertical-align: middle !important;
}
.input-cell {
min-height: 36px;
padding-top: 20px !important;
padding-bottom: 25px !important;
/* 关键:预留验证提示空间 */
}
/* 解决验证提示遮挡核心样式 */
.form-item-custom {
position: relative;
margin-bottom: 0 !important;
}
.el-form-item__error {
position: absolute !important;
left: 0 !important;
bottom: -22px !important;
/* 显示在单元格内预留空间 */
background: #f56c6c !important;
color: #fff !important;
padding: 2px 6px !important;
border-radius: 2px !important;
z-index: 10 !important;
white-space: nowrap !important;
font-size: 12px !important;
box-shadow: none !important;
}
.inline-item {
display: inline-block !important;
}
/* 输入控件样式 */
.basic-input {
width: 100%;
}
.major-input,
.address-input {
width: 100%;
min-height: 72px;
}
.opinion-textarea {
width: 100%;
min-height: 80px;
resize: none;
}
.date-picker {
width: 150px;
margin: 0 6px;
}
.date-picker.full-date {
width: 180px;
}
.applicant-input,
.signature-input {
width: 200px;
margin: 0 6px;
display: inline-block;
}
.short-select {
width: 120px;
margin: 0 10px;
display: inline-block;
}
/* 文本样式 */
.reason-text {
margin: 10px 0;
line-height: 2;
font-size: 14px;
}
.attachment-tip {
margin: 10px 0;
color: #666;
font-size: 13px;
}
.right-align {
text-align: right;
margin-top: 15px;
line-height: 2.2;
}
.date-label {
margin-left: 20px;
}
/* 按钮样式 */
.form-btn-group {
margin-top: 30px;
text-align: center;
}
.form-btn-group .el-button {
margin: 0 10px;
}
.form-description {
margin-top: 20px;
font-size: 13px;
line-height: 2;
padding-left: 10px;
}
/* 打印样式 */
@media print {
.form-btn-group {
display: none;
}
.el-input,
.el-select,
.el-textarea {
border: 1px solid #000 !important;
background: transparent !important;
}
.label {
background-color: #eee !important;
-webkit-print-color-adjust: exact;
}
.el-form-item__error {
display: none !important;
}
.input-cell {
padding-bottom: 8px !important;
}
}
</style>

View File

@@ -175,13 +175,13 @@
<el-input v-model="form.newmajor" placeholder="请输入新专业" />
</el-form-item>
<el-form-item label="退役证明" prop="proof">
<file-upload v-model="form.proof" />
<image-upload v-model="form.proof" />
</el-form-item>
<el-form-item label="身份证" prop="idcard">
<image-upload v-model="form.idcard" />
</el-form-item>
<el-form-item label="材料" prop="material">
<file-upload v-model="form.material" />
<image-upload v-model="form.material" />
</el-form-item>
</el-form>

View File

@@ -72,20 +72,38 @@
</template> -->
</el-table-column>
<el-table-column label="时间" align="center" prop="times" />
<el-table-column label="辅导员审核状态" align="center" prop="fdStatus" />
<!-- <el-table-column label="辅导员审核状态" align="center" prop="fdStatus" />
<el-table-column label="学务审核" align="center" prop="xwStatus" />
<el-table-column label="二级学院审核状态" align="center" prop="twoStatus" />
<el-table-column label="学籍管理审核状态" align="center" prop="xjglStatus" />
<el-table-column label="教务处审核状态" align="center" prop="jwcStatus" />
<el-table-column label="学籍管理审核状态" align="center" prop="xjglStatus" /> -->
<el-table-column label="审核状态" align="center" prop="jwcStatus" >
<template slot-scope="scope">
<!-- 审批状态0待审批1已通过 -->
<el-tag v-if="scope.row.jwcStatus == 0 || scope.row.jwcStatus == null">审批中</el-tag>
<el-tag v-else-if="scope.row.jwcStatus == 1" type="success">已通过</el-tag>
<el-tag v-else-if="scope.row.jwcStatus == 2" type="danger">已驳回</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-if="scope.row.fdStatus === 2 || scope.row.xwStatus === 2 || scope.row.twoStatus===2||scope.row.jwcStatus===2||scope.row.xjglStatus===2||scope.row.zsStatus===2"
size="mini"
type="text"
icon="el-icon-edit"
@click="handledetail(scope.row)"
v-hasPermi="['routine:basic:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleTable(scope.row)"
v-hasPermi="['routine:basic:edit']"
>查看申请表</el-button>
<el-button
size="mini"
type="text"
@@ -256,6 +274,7 @@
</template>
<script>
import { delDeployment, todoList } from '@/api/flowable/todo'
import { listBasic, getBasic, delBasic, addBasic, updateBasic } from "@/api/routine/basic";
import { listMate, getMate, delMate, addMate, updateMate } from "@/api/routine/mate";
import { getUserProfile } from '@/api/system/user' // 获取
@@ -288,25 +307,48 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
fxId: null,
fxTime: null,
stId: null,
stName: null,
fdName: null,
sex: null,
nations: null,
fdQm: null,
xwQm: null,
erQm: null,
xjQm: null,
jwQm: null,
stClass: null,
majors: null,
grade: null,
college: null,
reasons: null,
fdIdea: null,
twoIdea: null,
xwIdea: null,
xjIdea: null,
jwIdea: null,
zsIdea: null,
zsStatus: null,
times: null,
fdStatus: null,
xwStatus: null,
twoStatus: null,
xjglStatus: null,
jwStatus: null,
rwTime: null,
zsTime: null,
fdTime: null,
xwTime: null,
twoTime: null,
xjTime: null,
jwTime: null,
datab: null,
dataa: null,
conversion: null,
jwcStatus: null
processId: null,
deployId: null
},
// 表单参数
form: {},
@@ -360,6 +402,18 @@ export default {
this.getUser()
},
methods: {
// 表格下载
handleTable(row) {
this.$router.push({
path: '/routine/dis/formSt',
query: {
id: row.id,
},
// });
})
},
// 跳转到表单页面
handledetail(row) {
this.$router.push({
@@ -413,25 +467,48 @@ export default {
reset() {
this.form = {
id: null,
fxId: null,
fxTime: null,
stId: null,
stName: null,
fdName: null,
sex: null,
nations: null,
fdQm: null,
xwQm: null,
erQm: null,
xjQm: null,
jwQm: null,
stClass: null,
majors: null,
grade: null,
college: null,
reasons: null,
fdIdea: null,
twoIdea: null,
xwIdea: null,
xjIdea: null,
jwIdea: null,
zsIdea: null,
zsStatus: null,
times: null,
fdStatus: null,
xwStatus: null,
twoStatus: null,
xjglStatus: null,
jwStatus: null,
rwTime: null,
zsTime: null,
fdTime: null,
xwTime: null,
twoTime: null,
xjTime: null,
jwTime: null,
datab: null,
dataa: null,
conversion: null,
jwcStatus: null
processId: null,
deployId: null
};
this.resetForm("form");
},

View File

@@ -248,7 +248,7 @@
<el-form-item prop="affixId">
<p class="attachment-tip">
<span style="color: red">请上传:入伍通知书等佐证材料.</span>
<Affix v-model="formData.affixId" @input="handleAffix" @fileUploaded="handleAffix" />
<Affix v-model="formData.affixId" @input="handleAffix" @fileUploaded="handleAffix" @delete-file="handleDeleteFile"/>
</p>
</el-form-item>
@@ -425,9 +425,9 @@
<!-- 操作按钮 -->
<div class="form-btn-group">
<el-button type="primary" @click="submitForm(0)">保存</el-button>
<el-button type="primary" @click="submitForm(1)">提交申请</el-button>
<el-button @click="resetForm">重置表单</el-button>
<el-button type="text" @click="printForm">打印表单</el-button>
<el-button type="primary" @click="submitForm(1)" v-if="formData.applyStatus == 0">提交申请</el-button>
<!-- <el-button @click="resetForm">重置表单</el-button> -->
<!-- <el-button type="text" @click="printForm">打印表单</el-button> -->
</div>
</el-form>
</div>
@@ -435,7 +435,7 @@
<script>
import { getOwnInfo, getEnlistmentReserve, delEnlistmentReserve, addEnlistmentReserve, updateEnlistmentReserve } from "@/api/routine/enlistmentReserve/enlistmentReserve";
import { batchAddEnlistmentReserveAttach } from "@/api/routine/enlistmentReserve/enlistmentReserveAttach";
import { batchAddEnlistmentReserveAttach, deleteRtEnlistmentReserveAttachByFileNameAndStuName } from "@/api/routine/enlistmentReserve/enlistmentReserveAttach";
import { getUserProfile } from '@/api/system/user' // 获取当前登录用户
import { flowRecord } from '@/api/flowable/finished'
export default {
@@ -603,6 +603,7 @@ export default {
this.getFlowRecordList()
} else {
this.deployId = null
this.loading = false
}
}
}
@@ -678,25 +679,38 @@ export default {
if (!this.formData.applyNo) {
const year = new Date().getFullYear();
const randomNo = Math.floor(Math.random() * 1000000).toString().padStart(6, '0');
this.formData.applyNo = `RY${year}${randomNo}`;
this.formData.reserveNo = `RN${year}${randomNo}`;
this.formData.applyNo = `RY${year}${randomNo}`; // 获取申请编号
this.formData.reserveNo = `RN${year}${randomNo}`; // 获取保留学籍编号
}
this.formData.applyStatus = applyStatus;
this.formData.updateTime = new Date().toISOString().split('T')[0];
this.formData.applyReason = "本人应征入伍,申请保留学籍从 " + this.formData.reserveStartDate + " 至退役后两年。"
// 新增的时候根据点击的按钮确定状态,点击保存按钮申请状态是草稿,点击提交按钮申请状态就是待审核
this.formData.applyStatus = applyStatus;
const submitData = {
formData: this.formData,
};
if (this.formData.id != null) {
updateEnlistmentReserve(submitData.formData).then(response => {
this.$modal.msgSuccess("修改成功");
// 填写附件里面的申请编号
this.enlistmentReserveAttachList.forEach(element => {
element.applyNo = this.formData.applyNo
element.applyId = response.data.id
})
// 批量新增材料附件
if (this.enlistmentReserveAttachList && this.enlistmentReserveAttachList.length > 0) {
batchAddEnlistmentReserveAttach(this.enlistmentReserveAttachList)
}
this.loading = false;
this.$modal.msgSuccess("修改成功");
this.goBack()
});
} else {
addEnlistmentReserve(submitData.formData).then(response => {
this.$modal.msgSuccess("新增成功");
// 申请表新增成功之后,进行附件的添加
if (response.code == 200) {
// 填写附件里面的申请编号
@@ -704,8 +718,13 @@ export default {
element.applyNo = this.formData.applyNo
element.applyId = response.data.id
})
// 批量新增材料附件
if (this.enlistmentReserveAttachList && this.enlistmentReserveAttachList.length > 0) {
batchAddEnlistmentReserveAttach(this.enlistmentReserveAttachList)
}
this.loading = false;
this.$modal.msgSuccess("新增成功");
this.goBack()
}
});
}
@@ -779,6 +798,15 @@ export default {
}
console.log(this.enlistmentReserveAttachList);
},
// 处理子组件传递的删除文件事件
handleDeleteFile(fileName) {
// 接收文件名后,可执行后续逻辑,删除在数据库的数据
if (fileName) {
deleteRtEnlistmentReserveAttachByFileNameAndStuName({fileName:fileName, studentName: this.formData.studentName}).then(res => {
this.$message.success(`成功删除文件:${fileName}`);
})
}
}
}
};

View File

@@ -50,8 +50,12 @@
</el-table-column>
<el-table-column label="文件路径" align="center" prop="filePath">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" :content="scope.row.filePath" placement="top">
<div class="text-ellipsis">{{ scope.row.filePath }}</div>
<el-tooltip class="item" effect="dark" :content="`点击可下载文件`" placement="top">
<div class="text-ellipsis">
<el-link :href="`${baseUrl}${scope.row.filePath}`" :underline="false" target="_blank">
<span style="color: #007AFF;">{{ scope.row.filePath }}</span>
</el-link>
</div>
</el-tooltip>
</template>
</el-table-column>
@@ -101,6 +105,7 @@ export default {
name: "EnlistmentReserveAttach",
data() {
return {
baseUrl:process.env.VUE_APP_BASE_API,
// 遮罩层
loading: true,
// 选中数组

View File

@@ -103,7 +103,8 @@
</el-table-column>
<el-table-column label="申请状态" align="center" prop="applyStatus">
<template slot-scope="scope">
<el-tag v-if="scope.row.applyStatus == 0" type="info">待提交</el-tag>
<el-tag v-if="scope.row.applyStatus == 0 && scope.row.processInstanceId == ''" type="info">待提交</el-tag>
<el-tag v-if="scope.row.applyStatus == 0 && scope.row.processInstanceId != ''" type="info">被驳回</el-tag>
<el-tag v-if="scope.row.applyStatus == 1">审核中</el-tag>
<el-tag v-if="scope.row.applyStatus == 2" type="success">审核通过</el-tag>
</template>
@@ -126,7 +127,7 @@
v-hasPermi="['routine:enlistmentReserve:edit']" v-if="scope.row.applyStatus == 0">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['routine:enlistmentReserve:remove']" v-if="scope.row.applyStatus == 0">删除</el-button>
<el-button v-if="scope.row.applyStatus == 1" size="mini" type="text" icon="el-icon-info"
<el-button v-if="scope.row.applyStatus != 0" size="mini" type="text" icon="el-icon-info"
@click="detail(scope.row)">详情</el-button>
</template>
</el-table-column>
@@ -315,7 +316,14 @@ export default {
};
},
created() {
this.getUser();
// this.getUser();
},
// 路由守卫:当路由进入该组件时触发(解决返回后不刷新问题)
beforeRouteEnter(to, from, next) {
next(vm => {
// vm 是组件实例,这里调用数据加载方法
vm.getUser();
});
},
methods: {
/** 查询应征入伍保留学籍申请列表 */
@@ -454,7 +462,16 @@ export default {
},
// 跳转申请表
openForm() {
this.$router.push("/routine/enlistmentReserve/applicationForm")
// 利用some方法快速判断是否存在重复申请找到匹配项后立即终止遍历
const isDuplicate = this.enlistmentReserveList?.some(element =>
element.studentName === this.user?.nickName && element.studentNo === this.user?.userName
) || false;
if (isDuplicate) {
this.$message.error('您已经申请过了,请勿重新申请!');
} else {
this.$router.push("/routine/enlistmentReserve/applicationForm");
}
},
detail(row) {
this.$router.push({

View File

@@ -78,6 +78,7 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="申请人" align="center" prop="rtCreatRole" />
<el-table-column label="手机号码" align="center" prop="mobilePhone" />
<el-table-column label="使用部门/学院" align="center" prop="rtDepar" width="150px" />
<el-table-column label="功能房名" align="center" prop="roomName" />
<el-table-column label="主题" align="center" prop="rtTheme" />

View File

@@ -4,6 +4,18 @@
<el-form-item label="学年名称" prop="stuYearName">
<el-input v-model="queryParams.stuYearName" placeholder="请输入学年名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<!-- 在搜索表单中添加标签筛选 -->
<!-- <el-form-item label="模块标签" prop="moduleTags">
<el-select v-model="queryParams.moduleTags" placeholder="请选择模块标签" clearable>
<el-option
v-for="dict in dict.type.module_tag"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> -->
<el-form-item label="开始时间" prop="startTime">
<el-date-picker v-model="queryParams.startTime" clearable type="date" value-format="yyyy-MM-dd"
placeholder="请选择开始时间"
@@ -63,6 +75,16 @@
<template slot-scope="scope">
<dict-tag :options="dict.type.srs_stu_year_status" :value="scope.row.status" />
</template>
</el-table-column>
<!-- 在表格中添加标签展示列在状态列后添加 -->
<el-table-column label="模块标签" align="center" prop="moduleTags">
<template slot-scope="scope">
<dict-tag
:options="dict.type.module_tag"
:value="scope.row.moduleTags ? scope.row.moduleTags.split(',') : []"
:showType="'tag'"
/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
@@ -73,6 +95,9 @@
@click="handleDelete(scope.row)"
>删除</el-button>
<!-- 新增分配标签按钮 -->
<el-button size="mini" type="text" icon="el-icon-setting" @click="handleAssignTag(scope.row)">分配标签</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="updateStatusVClick(scope.row)">修改状态</el-button>
</template>
</el-table-column>
@@ -133,17 +158,54 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 添加分配标签对话框 -->
<el-dialog
title="分配标签"
:visible.sync="assignTagVisible"
width="500px"
append-to-body
>
<el-form ref="assignTagForm" :model="assignTagForm" label-width="80px">
<el-form-item label="学年">
<el-input v-model="assignTagForm.stuYearName" readonly />
</el-form-item>
<el-form-item label="模块标签">
<el-checkbox-group v-model="assignTagForm.selectedTags">
<el-checkbox
v-for="dict in dict.type.module_tag"
:key="dict.value"
:label="dict.value"
:disabled="isTagAssigned(dict.value)"
>
{{ dict.label }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="assignTagVisible = false"> </el-button>
<el-button type="primary" @click="submitAssignTag"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listYear, getYear, delYear, addYear, updateYear } from '@/api/stuCQS/basedata/year'
import { listYear, getYear, delYear, addYear, updateYear,assignTag } from '@/api/stuCQS/basedata/year'
export default {
name: 'Year',
dicts: ['srs_stu_year_status'],
dicts: ['srs_stu_year_status','module_tag'],
data() {
return {
// 分配标签对话框可见性
assignTagVisible: false,
// 分配标签表单
assignTagForm: {
id: null,
stuYearName: '',
selectedTags: []
},
updateStatusV: false,
updateForm: {
id: null,
@@ -315,7 +377,47 @@ export default {
this.download('system/year/export', {
...this.queryParams
}, `year_${new Date().getTime()}.xlsx`)
},
/** 分配标签按钮操作 */
handleAssignTag(row) {
this.assignTagForm.id = row.id
this.assignTagForm.stuYearName = row.stuYearName
// 将已有的标签转换为数组
this.assignTagForm.selectedTags = row.moduleTags ? row.moduleTags.split(',') : []
this.assignTagVisible = true
},
/** 提交分配标签 */
submitAssignTag() {
// 获取当前学年已有的标签
const currentYear = this.yearList.find(item => item.id === this.assignTagForm.id);
let existingTags = [];
if (currentYear && currentYear.moduleTags) {
existingTags = currentYear.moduleTags.split(',');
}
// 过滤掉已存在的标签,只发送新增的标签
const newTags = this.assignTagForm.selectedTags.filter(tag => !existingTags.includes(tag));
const tags = newTags.join(',');
assignTag(this.assignTagForm.id, tags).then(response => {
if (response.code === 200) {
this.$message.success(response.msg);
this.assignTagVisible = false;
this.getList();
}
})
},
/** 判断标签是否已分配给当前学年(基于数据库数据) */
isTagAssigned(tagValue) {
// 从 yearList 中找到当前正在编辑的学年记录
const currentYear = this.yearList.find(item => item.id === this.assignTagForm.id);
if (currentYear && currentYear.moduleTags) {
// 基于数据库中的实际标签数据判断
const existingTags = currentYear.moduleTags.split(',');
return existingTags.includes(tagValue);
}
return false;
}
}
}
</script>