This commit is contained in:
吴红兵
2026-03-07 12:35:45 +08:00
parent 271710e870
commit b997b3ba48
423 changed files with 79612 additions and 91574 deletions

View File

@@ -1,383 +1,359 @@
<template>
<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}} - {{waitShenheForm.form.realName}}</el-tag>
</el-form-item>
<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 }} - {{ waitShenheForm.form.realName }}</el-tag>
</el-form-item>
<el-form-item label="原部门名称">
<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="请选择二级部门">
<el-option v-for="item in secDeptList"
:key="item.deptCode"
:label="item.deptName"
:value="item.deptCode">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="原部门名称">
<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="请选择二级部门">
<el-option v-for="item in secDeptList" :key="item.deptCode" :label="item.deptName" :value="item.deptCode"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="现子级部门">
<el-select v-model="newSecChildDeptCode" placeholder="请选择下级部门" clearable style="width: 100%">
<el-option v-for="item in newSecChildDeptCodeList"
:key="item.deptCode"
:label="item.deptName"
:value="item.deptCode">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="调令日期" prop="changeDate">
<el-date-picker
v-model="waitShenheForm.form.changeDate"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="岗位类型" prop="pos">
<el-select v-model="waitShenheForm.form.pos" placeholder="请选择岗位类型" style="width: 100%">
<el-option
v-for="item in global.STATION_TYPE"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="waitShenheForm.form.remarks" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<div style="text-align: right; width: 100%;">
<el-button type="primary" @click="dialogSubmit(5)">提交</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</el-form-item>
</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}} - {{waitShenheForm.form.realName}}</el-tag>
</el-form-item>
<el-form-item label="现子级部门">
<el-select v-model="newSecChildDeptCode" placeholder="请选择下级部门" clearable style="width: 100%">
<el-option v-for="item in newSecChildDeptCodeList" :key="item.deptCode" :label="item.deptName" :value="item.deptCode"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="原支部名">
<el-select disabled v-model="waitShenheForm.form.oldBranchName" style="width: 100%">
<el-option
v-for="item in baseInfoAbout.partBranchList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="调令日期" prop="changeDate">
<el-date-picker v-model="waitShenheForm.form.changeDate" type="date" placeholder="选择日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
</el-form-item>
<el-form-item label="现支部名" prop="branchName">
<el-select clearable v-model="waitShenheForm.form.branchName" placeholder="请选择现支部" style="width: 100%">
<el-option
v-for="item in baseInfoAbout.partBranchList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="党费" prop="partyFee">
<el-input-number v-model="waitShenheForm.form.partyFee" :precision="2" :min="0" style="width: 100%" />
</el-form-item>
<el-form-item label="变动时间" prop="changeTime">
<el-date-picker
v-model="waitShenheForm.form.changeTime"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="waitShenheForm.form.remarks" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<div style="text-align: right; width: 100%;">
<el-button type="primary" @click="dialogSubmit(6)">提交</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</el-form-item>
</el-form>
</el-dialog>
<el-form-item label="岗位类型" prop="pos">
<el-select v-model="waitShenheForm.form.pos" placeholder="请选择岗位类型" style="width: 100%">
<el-option v-for="item in global.STATION_TYPE" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="waitShenheForm.form.remarks" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<div style="text-align: right; width: 100%">
<el-button type="primary" @click="dialogSubmit(5)">提交</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</el-form-item>
</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 }} - {{ waitShenheForm.form.realName }}</el-tag>
</el-form-item>
<el-form-item label="原支部名">
<el-select disabled v-model="waitShenheForm.form.oldBranchName" style="width: 100%">
<el-option v-for="item in baseInfoAbout.partBranchList" :key="item.id" :label="item.name" :value="item.id"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="现支部名" prop="branchName">
<el-select clearable v-model="waitShenheForm.form.branchName" placeholder="请选择现支部" style="width: 100%">
<el-option v-for="item in baseInfoAbout.partBranchList" :key="item.id" :label="item.name" :value="item.id"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="党费" prop="partyFee">
<el-input-number v-model="waitShenheForm.form.partyFee" :precision="2" :min="0" style="width: 100%" />
</el-form-item>
<el-form-item label="变动时间" prop="changeTime">
<el-date-picker
v-model="waitShenheForm.form.changeTime"
type="date"
placeholder="选择日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-input v-model="waitShenheForm.form.remarks" type="textarea" :rows="3" placeholder="请输入备注" />
</el-form-item>
<el-form-item>
<div style="text-align: right; width: 100%">
<el-button type="primary" @click="dialogSubmit(6)">提交</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</div>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script setup lang="ts">
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'
import { addObj as addStationChangeObj } from '/@/api/professional/professionaluser/professionalteacherstationchange'
import { addObj as addPartyChangeObj } from '/@/api/professional/professionaluser/professionalpartychange'
import global from '/@/components/tools/commondict.vue'
import type { Pagination } from '/@/hooks/table'
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';
import { addObj as addStationChangeObj } from '/@/api/professional/professionaluser/professionalteacherstationchange';
import { addObj as addPartyChangeObj } from '/@/api/professional/professionaluser/professionalpartychange';
import global from '/@/components/tools/commondict.vue';
import type { Pagination } from '/@/hooks/table';
// 表单类型常量
const FORM_TYPE = {
PERSONNEL_TRANSFER: 5, // 人员调动
PARTY_TRANSFER: 6 // 党员调动
} as const
// 表单类型常量
const FORM_TYPE = {
PERSONNEL_TRANSFER: 5, // 人员调动
PARTY_TRANSFER: 6, // 党员调动
} as const;
// 类型定义
interface FormData {
newDeptCodeList?: any[]
deptCodeList?: any[]
teacherNo?: string
realName?: string
userName?: string
deptName?: string
id?: string
oldBranchId?: string
oldBranchName?: string
newDeptCode?: string
newSecDeptCode?: string
changeDate?: string
pos?: string
remarks?: string
branchName?: string
partyFee?: number
changeTime?: string
[key: string]: any
}
// 类型定义
interface FormData {
newDeptCodeList?: any[];
deptCodeList?: any[];
teacherNo?: string;
realName?: string;
userName?: string;
deptName?: string;
id?: string;
oldBranchId?: string;
oldBranchName?: string;
newDeptCode?: string;
newSecDeptCode?: string;
changeDate?: string;
pos?: string;
remarks?: string;
branchName?: string;
partyFee?: number;
changeTime?: string;
[key: string]: any;
}
interface WaitShenheForm {
form: FormData
title: string
isPersonnelTransfer: boolean
isPartyTransfer: boolean
}
interface WaitShenheForm {
form: FormData;
title: string;
isPersonnelTransfer: boolean;
isPartyTransfer: boolean;
}
// 表单 ref
const stationChangeFormRef = ref()
const partChangeFormRef = ref()
// 人员调动验证规则
const stationChangeRules = {
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: 'blur' }],
changeTime: [{ required: true, message: '请选择变动时间', trigger: 'blur' }]
}
// 表单 ref
const stationChangeFormRef = ref();
const partChangeFormRef = ref();
/**
* 定义Props
* @param page 分页信息
* @param nowRow 当前行数据
*/
const props = defineProps<{
page?: Pagination
nowRow: Record<string, any>
}>()
// 人员调动验证规则
const stationChangeRules = {
newDeptCode: [{ required: true, message: '请选择要调入的二级部门', trigger: 'blur' }],
changeDate: [{ required: true, message: '请选择调令日期', trigger: 'blur' }],
pos: [{ required: true, message: '请选择岗位类型', trigger: 'blur' }],
};
/**
* 定义Emits
*/
const emit = defineEmits<{
(e: 'getList', page?: Pagination): void
}>()
// 党员调动验证规则
const partChangeRules = {
branchName: [{ required: true, message: '请选择现支部', trigger: 'blur' }],
changeTime: [{ required: true, message: '请选择变动时间', trigger: 'blur' }],
};
// 消息提示 hooks
const message = useMessage()
const messageBox = useMessageBox()
/**
* 定义Props
* @param page 分页信息
* @param nowRow 当前行数据
*/
const props = defineProps<{
page?: Pagination;
nowRow: Record<string, any>;
}>();
// 响应式数据
const dialogVisible = ref(false)
/**
* 等待审核表单
*/
const waitShenheForm = reactive<WaitShenheForm>({
form: {
newDeptCodeList: [],
deptCodeList: []
},
title: '',
isPersonnelTransfer: false,
isPartyTransfer: false
})
const baseInfoAbout = reactive({
partBranchList: [] as any[]
})
const secDeptList = ref<any[]>([])
const newSecChildDeptCodeList = ref<any[]>([])
const newSecDeptCode = ref('')
const newSecChildDeptCode = ref('')
const teacherNo = ref('')
/**
* 定义Emits
*/
const emit = defineEmits<{
(e: 'getList', page?: Pagination): void;
}>();
// 方法定义
/**
* 初始化字典数据
*/
const initDicData = async () => {
const response = await getAllInfoAboutList()
const map = response.data
baseInfoAbout.partBranchList = map['partBranchList'] || []
}
// 消息提示 hooks
const message = useMessage();
const messageBox = useMessageBox();
/**
* 初始化对话框
* @param val 表单类型5-人员调动6-党员调动
*/
const init = async (val: number) => {
if (val !== FORM_TYPE.PERSONNEL_TRANSFER && val !== FORM_TYPE.PARTY_TRANSFER) {
return
}
await initDicData()
teacherNo.value = props.nowRow.teacherNo
handleFormType(val)
}
// 响应式数据
const dialogVisible = ref(false);
/**
* 处理表单类型显示
* @param val 表单类型
*/
const handleFormType = (val: number) => {
// 重置所有表单状态
waitShenheForm.isPersonnelTransfer = false
waitShenheForm.isPartyTransfer = false
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
// 人员调动:加载部门数据
waitShenheForm.title = "人员调动"
waitShenheForm.isPersonnelTransfer = true
waitShenheForm.form = { ...props.nowRow }
waitShenheForm.form.id = ''
waitShenheForm.form.newDeptCodeList = []
waitShenheForm.form.deptCodeList = []
newSecDeptCode.value = ''
newSecChildDeptCode.value = ''
getDeptListByLevelTwo().then((res: any) => {
secDeptList.value = res.data || []
dialogVisible.value = true
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
stationChangeFormRef.value?.clearValidate()
})
})
} else if (val === FORM_TYPE.PARTY_TRANSFER) {
// 党员调动:设置原支部
waitShenheForm.title = "党员调动"
waitShenheForm.isPartyTransfer = true
waitShenheForm.form = { ...props.nowRow }
waitShenheForm.form.id = ''
waitShenheForm.form.realName = waitShenheForm.form.userName || waitShenheForm.form.realName
waitShenheForm.form.oldBranchName = waitShenheForm.form.oldBranchId
dialogVisible.value = true
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
partChangeFormRef.value?.clearValidate()
})
}
}
/**
* 提交表单
* @param val 表单类型5-人员调动6-党员调动
*/
const dialogSubmit = async (val: number) => {
if (val !== FORM_TYPE.PERSONNEL_TRANSFER && val !== FORM_TYPE.PARTY_TRANSFER) {
return
}
/**
* 等待审核表单
*/
const waitShenheForm = reactive<WaitShenheForm>({
form: {
newDeptCodeList: [],
deptCodeList: [],
},
title: '',
isPersonnelTransfer: false,
isPartyTransfer: false,
});
waitShenheForm.form.teacherNo = teacherNo.value
const baseInfoAbout = reactive({
partBranchList: [] as any[],
});
// 表单验证配置
const formRefMap: Record<number, any> = {
[FORM_TYPE.PERSONNEL_TRANSFER]: stationChangeFormRef.value,
[FORM_TYPE.PARTY_TRANSFER]: partChangeFormRef.value
}
const formRef = formRefMap[val]
// 人员调动:在验证前同步数据
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
waitShenheForm.form.newDeptCode = newSecDeptCode.value
waitShenheForm.form.newSecDeptCode = newSecChildDeptCode.value || newSecDeptCode.value
}
const secDeptList = ref<any[]>([]);
const newSecChildDeptCodeList = ref<any[]>([]);
const newSecDeptCode = ref('');
const newSecChildDeptCode = ref('');
const teacherNo = ref('');
// 验证表单
if (formRef) {
try {
await formRef.validate()
} catch (err) {
return
}
}
// 方法定义
/**
* 初始化字典数据
*/
const initDicData = async () => {
const response = await getAllInfoAboutList();
const map = response.data;
baseInfoAbout.partBranchList = map['partBranchList'] || [];
};
// 先确认,用户取消时不执行后续操作
try {
await messageBox.confirm('确认提交?')
} catch (err: any) {
// 用户取消操作,直接返回,不显示错误提示
return
}
// 用户确认后,执行提交操作
try {
let res: any
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
// 人员调动:使用人员调动接口
res = await addStationChangeObj(waitShenheForm.form)
} else if (val === FORM_TYPE.PARTY_TRANSFER) {
// 党员调动:使用党员调动接口
res = await addPartyChangeObj(waitShenheForm.form)
}
if (res && res.data === '-1') {
message.warning("当前不允许提交")
} else if (res) {
message.success("提交成功")
emit("getList", props.page)
dialogVisible.value = false
}
} catch (err: any) {
// 处理业务错误
message.error(err.msg)
}
}
/**
* 初始化对话框
* @param val 表单类型5-人员调动6-党员调动
*/
const init = async (val: number) => {
if (val !== FORM_TYPE.PERSONNEL_TRANSFER && val !== FORM_TYPE.PARTY_TRANSFER) {
return;
}
/**
* 获取子部门列表
*/
const getDeptListByParent = async () => {
newSecChildDeptCode.value = ''
newSecChildDeptCodeList.value = []
if (!newSecDeptCode.value) {
return
}
const res = await getDeptListByParentApi(newSecDeptCode.value)
newSecChildDeptCodeList.value = res.data || []
}
await initDicData();
teacherNo.value = props.nowRow.teacherNo;
handleFormType(val);
};
// 暴露方法
defineExpose({
init
})
/**
* 处理表单类型显示
* @param val 表单类型
*/
const handleFormType = (val: number) => {
// 重置所有表单状态
waitShenheForm.isPersonnelTransfer = false;
waitShenheForm.isPartyTransfer = false;
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
// 人员调动:加载部门数据
waitShenheForm.title = '人员调动';
waitShenheForm.isPersonnelTransfer = true;
waitShenheForm.form = { ...props.nowRow };
waitShenheForm.form.id = '';
waitShenheForm.form.newDeptCodeList = [];
waitShenheForm.form.deptCodeList = [];
newSecDeptCode.value = '';
newSecChildDeptCode.value = '';
getDeptListByLevelTwo().then((res: any) => {
secDeptList.value = res.data || [];
dialogVisible.value = true;
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
stationChangeFormRef.value?.clearValidate();
});
});
} else if (val === FORM_TYPE.PARTY_TRANSFER) {
// 党员调动:设置原支部
waitShenheForm.title = '党员调动';
waitShenheForm.isPartyTransfer = true;
waitShenheForm.form = { ...props.nowRow };
waitShenheForm.form.id = '';
waitShenheForm.form.realName = waitShenheForm.form.userName || waitShenheForm.form.realName;
waitShenheForm.form.oldBranchName = waitShenheForm.form.oldBranchId;
dialogVisible.value = true;
// 弹窗打开后,清除表单验证状态,避免立即显示验证提示
nextTick(() => {
partChangeFormRef.value?.clearValidate();
});
}
};
/**
* 提交表单
* @param val 表单类型5-人员调动6-党员调动
*/
const dialogSubmit = async (val: number) => {
if (val !== FORM_TYPE.PERSONNEL_TRANSFER && val !== FORM_TYPE.PARTY_TRANSFER) {
return;
}
waitShenheForm.form.teacherNo = teacherNo.value;
// 表单验证配置
const formRefMap: Record<number, any> = {
[FORM_TYPE.PERSONNEL_TRANSFER]: stationChangeFormRef.value,
[FORM_TYPE.PARTY_TRANSFER]: partChangeFormRef.value,
};
const formRef = formRefMap[val];
// 人员调动:在验证前同步数据
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
waitShenheForm.form.newDeptCode = newSecDeptCode.value;
waitShenheForm.form.newSecDeptCode = newSecChildDeptCode.value || newSecDeptCode.value;
}
// 验证表单
if (formRef) {
try {
await formRef.validate();
} catch (err) {
return;
}
}
// 先确认,用户取消时不执行后续操作
try {
await messageBox.confirm('确认提交?');
} catch (err: any) {
// 用户取消操作,直接返回,不显示错误提示
return;
}
// 用户确认后,执行提交操作
try {
let res: any;
if (val === FORM_TYPE.PERSONNEL_TRANSFER) {
// 人员调动:使用人员调动接口
res = await addStationChangeObj(waitShenheForm.form);
} else if (val === FORM_TYPE.PARTY_TRANSFER) {
// 党员调动:使用党员调动接口
res = await addPartyChangeObj(waitShenheForm.form);
}
if (res && res.data === '-1') {
message.warning('当前不允许提交');
} else if (res) {
message.success('提交成功');
emit('getList', props.page);
dialogVisible.value = false;
}
} catch (err: any) {
// 处理业务错误
message.error(err.msg);
}
};
/**
* 获取子部门列表
*/
const getDeptListByParent = async () => {
newSecChildDeptCode.value = '';
newSecChildDeptCodeList.value = [];
if (!newSecDeptCode.value) {
return;
}
const res = await getDeptListByParentApi(newSecDeptCode.value);
newSecChildDeptCodeList.value = res.data || [];
};
// 暴露方法
defineExpose({
init,
});
</script>