This commit is contained in:
guochunsi
2026-01-09 18:46:41 +08:00
parent bacf93c33e
commit 4b46d3cc0d
40 changed files with 1977 additions and 939 deletions

View File

@@ -1,9 +1,9 @@
<template>
<el-dialog v-model="dialogEmptyFromVisible" title="教职工信息导出" width="80%">
<el-form style="margin-left: 7px" :inline="true">
<el-form :inline="true" label-width="100px" style="margin-bottom: 20px;">
<el-form-item>
<el-tag>导出教职工人数,依据'职工信息'页面检索条件,如部门,职称等级等条件</el-tag>
<el-tag type="warning">*请在'职工信息'页面点击搜索后,再点开当前导出页面</el-tag>
<el-tag type="info">导出依据"职工信息"页面检索条件</el-tag>
<el-tag type="warning" style="margin-left: 10px;">请在搜索后再打开导出页面</el-tag>
</el-form-item>
<el-form-item label="是否退休">
<el-select
@@ -11,7 +11,7 @@
filterable
reserve-keyword
clearable
>
style="width: 200px;">
<el-option
v-for="item in YES_OR_NO"
:key="item.value"
@@ -25,52 +25,54 @@
type="primary"
@click="exportTeacherInfo"
:loading="exportLoading"
size="small">导出</el-button>
:icon="Download">导出</el-button>
</el-form-item>
</el-form>
<!-- 信息 -->
<div class="div_stuData" style="margin-bottom: 5px;margin-top: 5px;">基础信息
<el-checkbox v-model="allCheckTeacherBaseInfo" style="margin-left:20px">全选</el-checkbox>
</div>
<el-tabs type="border-card" tab-position="left">
<el-form ref="baseForm" label-width="120px">
<el-row>
<el-checkbox-group v-model="checkedTeacherBaseInfo">
<el-checkbox v-for="(item,index) in teacherBasicCheckData" :label="item.value" :key="index">{{item.label}}</el-checkbox>
</el-checkbox-group>
</el-row>
</el-form>
</el-tabs>
<!-- 信息 -->
<el-card shadow="never" style="margin-bottom: 20px;">
<template #header>
<div style="display: flex; justify-content: space-between; align-items: center;">
<span>基础信息</span>
<el-checkbox v-model="allCheckTeacherBaseInfo">全选</el-checkbox>
</div>
</template>
<el-checkbox-group v-model="checkedTeacherBaseInfo">
<el-checkbox v-for="(item, index) in teacherBasicCheckData" :label="item.value" :key="index" style="margin-right: 20px; margin-bottom: 10px;">
{{item.label}}
</el-checkbox>
</el-checkbox-group>
</el-card>
<!-- 岗位信息 -->
<div class="div_stuData" style="margin-bottom: 5px;margin-top: 5px;">岗位信息
<el-checkbox v-model="allCheckStationInfo">全选</el-checkbox>
</div>
<el-tabs type="border-card" tab-position="left">
<el-form ref="baseForm" label-width="120px">
<el-row>
<el-checkbox-group v-model="checkedTeacherStationInfo">
<el-checkbox v-for="(item, index) in teacherStationData" :key="index" :label="item.value">{{item.label}}</el-checkbox>
</el-checkbox-group>
</el-row>
</el-form>
</el-tabs>
<!-- 岗位信息 -->
<el-card shadow="never" style="margin-bottom: 20px;">
<template #header>
<div style="display: flex; justify-content: space-between; align-items: center;">
<span>岗位信息</span>
<el-checkbox v-model="allCheckStationInfo">全选</el-checkbox>
</div>
</template>
<el-checkbox-group v-model="checkedTeacherStationInfo">
<el-checkbox v-for="(item, index) in teacherStationData" :key="index" :label="item.value" style="margin-right: 20px; margin-bottom: 10px;">
{{item.label}}
</el-checkbox>
</el-checkbox-group>
</el-card>
<!-- 其他 -->
<div class="div_stuData" style="margin-bottom: 5px;margin-top: 5px;">其他
<el-checkbox v-model="allCheckedother" style="margin-left: 20px">全选</el-checkbox>
</div>
<el-tabs type="border-card" tab-position="left">
<el-form ref="baseForm" label-width="120px">
<el-row>
<el-checkbox-group v-model="checkedTeacherOtherInfo">
<el-checkbox v-for="(item, index) in teacherOtherData" :key="index" :label="item.value">{{item.label}}</el-checkbox>
</el-checkbox-group>
</el-row>
</el-form>
</el-tabs>
<!-- 其他 -->
<el-card shadow="never">
<template #header>
<div style="display: flex; justify-content: space-between; align-items: center;">
<span>其他</span>
<el-checkbox v-model="allCheckedother">全选</el-checkbox>
</div>
</template>
<el-checkbox-group v-model="checkedTeacherOtherInfo">
<el-checkbox v-for="(item, index) in teacherOtherData" :key="index" :label="item.value" style="margin-right: 20px; margin-bottom: 10px;">
{{item.label}}
</el-checkbox>
</el-checkbox-group>
</el-card>
</el-dialog>
@@ -79,6 +81,7 @@
<script setup lang="ts">
import { ref, watch } from 'vue'
import { ElNotification } from 'element-plus'
import { Download } from '@element-plus/icons-vue'
import global from '/@/components/tools/commondict.vue'
import request from '/@/utils/request'
@@ -250,5 +253,4 @@
</script>
<style scoped>
</style>

View File

@@ -1,39 +1,46 @@
<template>
<el-dialog v-model="visible" title="导入" width="80%" append-to-body>
<el-row>
<el-col>
<a href="excel/dictlist.xlsx" rel="external nofollow" download="职工信息字典下载">
<el-button style="margin-left: 20px" size="small" type="success">职工信息字典下载</el-button>
</a>
</el-col>
</el-row>
<el-row>
<el-col>
<el-tag>导入时部分字段需严格按照字典值填写</el-tag>
</el-col>
</el-row>
<el-dialog v-model="visible" title="导入职工信息" width="600" append-to-body>
<el-alert
type="warning"
:closable="false"
show-icon
style="margin-bottom: 20px;">
<template #title>
<span>导入前请先下载字典文件部分字段需严格按照字典值填写</span>
</template>
</el-alert>
<el-row>
<el-upload
class="upload-demo"
action="/professional/file/importTeacherInfoSimple"
:headers="headers"
:accept="'.xls,.xlsx'"
:on-success="handleUploadSuccess"
:on-error="handleAvatarError"
list-type="picture">
<el-button size="small" type="primary">点击上传</el-button>
<template #tip>
<div class="el-upload__tip">只能上传后缀为xls,xlsx的文件</div>
</template>
</el-upload>
</el-row>
<div style="text-align: center; margin-bottom: 20px;">
<a href="excel/dictlist.xlsx" rel="external nofollow" download="职工信息字典下载" style="text-decoration: none;">
<el-button type="success" :icon="Download">下载字典文件</el-button>
</a>
</div>
<el-upload
class="upload-demo"
action="/professional/file/importTeacherInfoSimple"
:headers="headers"
:accept="'.xls,.xlsx'"
:on-success="handleUploadSuccess"
:on-error="handleAvatarError"
drag>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">
将文件拖到此处<em>点击上传</em>
</div>
<template #tip>
<div class="el-upload__tip">
只能上传 .xls .xlsx 格式的 Excel 文件
</div>
</template>
</el-upload>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
import { ElNotification } from 'element-plus'
import { Download, UploadFilled } from '@element-plus/icons-vue'
import { Session } from '/@/utils/storage'
// 响应式数据
@@ -77,6 +84,10 @@
})
</script>
<style scoped>
<style scoped lang="scss">
.upload-demo {
:deep(.el-upload-dragger) {
width: 100%;
}
}
</style>

View File

@@ -1940,7 +1940,7 @@
return [
{
command: 'export',
label: '导出',
label: '导出信息',
icon: Download,
visible: () => permissions.value.professional_teacherbase_export
},

View File

@@ -2,20 +2,15 @@
<el-dialog v-model="dialogVisible" width="600" :title="waitShenheForm.title" append-to-body>
<!--人员调动-->
<el-form v-if="waitShenheForm.isPersonnelTransfer" ref="stationChangeFormRef" :model="waitShenheForm.form" :rules="stationChangeRules" label-width="120px">
<el-form-item label="工号">
<el-tag>{{waitShenheForm.form.teacherNo}}</el-tag>
</el-form-item>
<el-form-item label="姓名">
<el-tag>{{waitShenheForm.form.realName}}</el-tag>
<el-form-item label="工号 / 姓名">
<el-tag>{{waitShenheForm.form.teacherNo}} - {{waitShenheForm.form.realName}}</el-tag>
</el-form-item>
<el-form-item label="原部门名称">
<el-tag disabled>{{waitShenheForm.form.deptName}}</el-tag>
<el-input v-model="waitShenheForm.form.deptName" disabled />
</el-form-item>
<el-form-item label="现二级部门" prop="newDeptCode">
<el-select v-model="newSecDeptCode" @change="getDeptListByParent" placeholder="请选择二级部门" style="width: 100%">
<el-select v-model="newSecDeptCode" @change="getDeptListByParent" placeholder="请选择二级部门">
<el-option v-for="item in secDeptList"
:key="item.deptCode"
:label="item.deptName"
@@ -68,12 +63,8 @@
</el-form>
<!--党员调动-->
<el-form v-if="waitShenheForm.isPartyTransfer" ref="partChangeFormRef" :model="waitShenheForm.form" :rules="partChangeRules" label-width="120px">
<el-form-item label="工号">
<el-tag>{{waitShenheForm.form.teacherNo}}</el-tag>
</el-form-item>
<el-form-item label="用户名">
<el-tag>{{waitShenheForm.form.realName}}</el-tag>
<el-form-item label="工号 / 用户名">
<el-tag>{{waitShenheForm.form.teacherNo}} - {{waitShenheForm.form.realName}}</el-tag>
</el-form-item>
<el-form-item label="原支部名">
@@ -113,7 +104,7 @@
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="waitShenheForm.form.remarks" placeholder="请输入备注" />
<el-input v-model="waitShenheForm.form.remarks" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
@@ -127,7 +118,7 @@
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
import { ref, reactive, nextTick } from 'vue'
import { useMessage, useMessageBox } from '/@/hooks/message'
import { getAllInfoAboutList } from '/@/api/professional/professionaluser/teacherbase'
import { getDeptListByLevelTwo, getDeptListByParent as getDeptListByParentApi } from '/@/api/basic/basicdept'
@@ -177,15 +168,15 @@
// 人员调动验证规则
const stationChangeRules = {
newDeptCode: [{ required: true, message: '请选择要调入的二级部门', trigger: 'change' }],
changeDate: [{ required: true, message: '请选择调令日期', trigger: 'change' }],
pos: [{ required: true, message: '请选择岗位类型', trigger: 'change' }]
newDeptCode: [{ required: true, message: '请选择要调入的二级部门', trigger: 'blur' }],
changeDate: [{ required: true, message: '请选择调令日期', trigger: 'blur' }],
pos: [{ required: true, message: '请选择岗位类型', trigger: 'blur' }]
}
// 党员调动验证规则
const partChangeRules = {
branchName: [{ required: true, message: '请选择现支部', trigger: 'change' }],
changeTime: [{ required: true, message: '请选择变动时间', trigger: 'change' }]
branchName: [{ required: true, message: '请选择现支部', trigger: 'blur' }],
changeTime: [{ required: true, message: '请选择变动时间', trigger: 'blur' }]
}
/**
@@ -273,6 +264,7 @@
waitShenheForm.title = "人员调动"
waitShenheForm.isPersonnelTransfer = true
waitShenheForm.form = { ...props.nowRow }
waitShenheForm.form.id = ''
waitShenheForm.form.newDeptCodeList = []
waitShenheForm.form.deptCodeList = []
newSecDeptCode.value = ''
@@ -281,6 +273,10 @@
getDeptListByLevelTwo().then((res: any) => {
secDeptList.value = res.data || []
dialogVisible.value = true
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
stationChangeFormRef.value?.clearValidate()
})
})
} else if (val === FORM_TYPE.PARTY_TRANSFER) {
// 党员调动:设置原支部
@@ -291,6 +287,10 @@
waitShenheForm.form.realName = waitShenheForm.form.userName || waitShenheForm.form.realName
waitShenheForm.form.oldBranchName = waitShenheForm.form.oldBranchId
dialogVisible.value = true
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
partChangeFormRef.value?.clearValidate()
})
}
}
/**
@@ -312,12 +312,8 @@
const formRef = formRefMap[val]
// 人员调动:需要选择部门
// 人员调动:在验证前同步数据
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
if (!newSecDeptCode.value) {
message.info("请选择要调入的部门")
return
}
waitShenheForm.form.newDeptCode = newSecDeptCode.value
waitShenheForm.form.newSecDeptCode = newSecChildDeptCode.value || newSecDeptCode.value
}
@@ -331,8 +327,16 @@
}
}
// 先确认,用户取消时不执行后续操作
try {
await messageBox.confirm('确认提交?')
} catch (err: any) {
// 用户取消操作,直接返回,不显示错误提示
return
}
// 用户确认后,执行提交操作
try {
let res: any
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {