人员管理

This commit is contained in:
guochunsi
2026-01-04 19:01:51 +08:00
parent 24453baf3e
commit 42f23491e5
4 changed files with 93 additions and 98 deletions

View File

@@ -81,6 +81,17 @@ export const delObj = (id: string | number) => {
}); });
}; };
/**审核
* @param obj
*/
export const examObj = (obj: any) => {
return request({
url: '/professional/professionaltitlerelation/exam',
method: 'post',
data: obj,
});
};
/** /**
* 删除职称对象 * 删除职称对象
* @param id * @param id

View File

@@ -53,26 +53,26 @@ const getImgSrcByToken = (src?: string) => {
}); });
} else { } else {
// 图片处理逻辑(已注释,如需要可取消注释并更新) // 图片处理逻辑(已注释,如需要可取消注释并更新)
// showIframe.value = false; showIframe.value = false;
// const imgSrc = src || props.authSrc; const imgSrc = src || props.authSrc;
// const tenantId = Session.getTenant(); const tenantId = Session.getTenant();
// const img = imgRef.value; const img = imgRef.value;
// if (!img) return; if (!img) return;
//
// const request = new XMLHttpRequest(); const request = new XMLHttpRequest();
// request.responseType = 'blob'; request.responseType = 'blob';
// request.open('get', imgSrc, true); request.open('get', imgSrc, true);
// request.setRequestHeader('Authorization', "Bearer " + Session.getToken()); request.setRequestHeader('Authorization', "Bearer " + Session.getToken());
// request.setRequestHeader('TENANT-ID', tenantId); request.setRequestHeader('TENANT-ID', tenantId);
// request.onreadystatechange = () => { request.onreadystatechange = () => {
// if (request.readyState == XMLHttpRequest.DONE && request.status == 200) { if (request.readyState == XMLHttpRequest.DONE && request.status == 200) {
// img.src = URL.createObjectURL(request.response); img.src = URL.createObjectURL(request.response);
// img.onload = () => { img.onload = () => {
// URL.revokeObjectURL(img.src); URL.revokeObjectURL(img.src);
// } }
// } }
// }; };
// request.send(null); request.send(null);
} }
}; };

View File

@@ -12,8 +12,7 @@
v-model="dataForm.professionalTitleConfigId" v-model="dataForm.professionalTitleConfigId"
filterable filterable
clearable clearable
placeholder="请选择职称等级" placeholder="请选择职称等级"
style="width: 100%"
> >
<el-option <el-option
v-for="item in proTitleList" v-for="item in proTitleList"
@@ -30,7 +29,6 @@
filterable filterable
clearable clearable
placeholder="请选择专业技术职务" placeholder="请选择专业技术职务"
style="width: 100%"
> >
<el-option <el-option
v-for="item in majorStationList" v-for="item in majorStationList"
@@ -48,7 +46,6 @@
placeholder="请选择取证时间" placeholder="请选择取证时间"
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
/> />
</el-form-item> </el-form-item>
@@ -59,7 +56,6 @@
placeholder="请选择职称任职时间" placeholder="请选择职称任职时间"
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
/> />
</el-form-item> </el-form-item>
@@ -74,7 +70,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="证明材料" prop="materialA"> <el-form-item label="证明材料" prop="evidence">
<el-upload <el-upload
:headers="headers" :headers="headers"
:limit="1" :limit="1"
@@ -109,8 +105,7 @@ import { Session } from '/@/utils/storage'
import { useMessage } from '/@/hooks/message' import { useMessage } from '/@/hooks/message'
import { getProfessionalTitleList } from '/@/api/professional/rsbase/professionaltitlelevelconfig' import { getProfessionalTitleList } from '/@/api/professional/rsbase/professionaltitlelevelconfig'
import { getMajorStationList } from '/@/api/professional/rsbase/professionalmajorstation' import { getMajorStationList } from '/@/api/professional/rsbase/professionalmajorstation'
import { putObj } from '/@/api/professional/professionaluser/professionaltitlerelation' import { addObj } from '/@/api/professional/professionaluser/professionaltitlerelation'
import { getMyTeacherNo, updateOtherInfo } from '/@/api/professional/professionaluser/teacherbase'
import { checkLocked } from '/@/api/professional/professionalstatuslock' import { checkLocked } from '/@/api/professional/professionalstatuslock'
// Emits // Emits
@@ -138,7 +133,6 @@ const dataForm = reactive({
materialA: '', materialA: '',
evidence: '', evidence: '',
state: '', state: '',
teacherNo: '',
id: '' id: ''
}) })
@@ -223,15 +217,31 @@ const materiaUploadSuccess = (response: any) => {
} }
// 统一使用 evidence 字段存储证明材料URL与后端API一致 // 统一使用 evidence 字段存储证明材料URL与后端API一致
dataForm.evidence = response.data.url dataForm.evidence = response.data.url
dataForm.materialA = response.data.url
} }
// 打开对话框 // 打开对话框
const openDialog = async (row?: any) => { const openDialog = async (row?: any) => {
// 新增时 row 可能为 null 或 undefined // 新增模式:先检查是否锁定
if (row && row.teacherNo) { if (!row || !row.id) {
// 编辑模式:使用传入的 teacherNo编辑不需要检查锁定 try {
url.value = `/professional/file/teacherAboutInfoUpload?teacherNo=${row.teacherNo}&type=2` const lockResponse = await checkLocked('title')
if (lockResponse.data) {
message.warning("新增功能已锁定,暂不允许操作")
return
}
} catch (error) {
message.error('操作失败')
return
}
}
// 公共设置
url.value = `/professional/file/teacherAboutInfoUpload?type=2`
fileList.value = []
// 根据是否有 row 设置不同的表单数据
if (row && row.id) {
// 编辑模式:使用传入的数据
Object.assign(dataForm, { Object.assign(dataForm, {
professionalTitleConfigId: row.professionalTitleConfigId || '', professionalTitleConfigId: row.professionalTitleConfigId || '',
majorStation: row.majorStation || '', majorStation: row.majorStation || '',
@@ -241,50 +251,27 @@ const openDialog = async (row?: any) => {
materialA: row.materialA || '', materialA: row.materialA || '',
evidence: row.evidence || '', evidence: row.evidence || '',
state: row.state || '', state: row.state || '',
teacherNo: row.teacherNo || '',
id: row.id || '' id: row.id || ''
}) })
fileList.value = []
// 先加载字典数据,再显示表单
await initDicData()
showForm.value = true
dialogVisible.value = true
} else { } else {
// 新增模式:先检查是否锁定,再获取当前用户的 teacherNo // 新增模式:重置为空
try { Object.assign(dataForm, {
const lockResponse = await checkLocked('title') professionalTitleConfigId: '',
if (lockResponse.data) { majorStation: '',
// 已锁定 certificateTime: '',
message.warning("新增功能已锁定,暂不允许操作") inOfficeDate: '',
return certificateNumber: '',
} materialA: '',
evidence: '',
// 未锁定,继续获取 teacherNo state: '',
const response = await getMyTeacherNo() id: ''
const teacherNo = response.data })
url.value = `/professional/file/teacherAboutInfoUpload?teacherNo=${teacherNo}&type=2`
Object.assign(dataForm, {
professionalTitleConfigId: '',
majorStation: '',
certificateTime: '',
inOfficeDate: '',
certificateNumber: '',
materialA: '',
evidence: '',
state: '',
teacherNo: teacherNo,
id: ''
})
fileList.value = []
// 先加载字典数据,再显示表单
await initDicData()
showForm.value = true
dialogVisible.value = true
} catch (error) {
message.error('获取教师编号失败')
return
}
} }
// 公共操作:加载字典数据并显示对话框
await initDicData()
showForm.value = true
dialogVisible.value = true
} }
// 提交表单 // 提交表单
@@ -301,31 +288,24 @@ const dialogSubmit = async () => {
if (valid) { if (valid) {
submitLoading.value = true submitLoading.value = true
try { try {
if (dataForm.id) { // 统一使用 addObj 接口(新增和编辑都使用)
// 编辑:使用 putObj 接口(管理员编辑) const submitData: any = {
dataForm.state = '0' professionalTitleConfigId: dataForm.professionalTitleConfigId,
await putObj(dataForm) majorStation: dataForm.majorStation,
message.success("修改成功") certificateTime: dataForm.certificateTime,
} else { inOfficeDate: dataForm.inOfficeDate,
// 新增:使用 updateOtherInfo 接口(与 MultiDialog 保持一致) certificateNumber: dataForm.certificateNumber,
const submitData: any = { evidence: dataForm.evidence,
type: 2, // 职称类型 state: '0' // 待审核
teacherNo: dataForm.teacherNo,
professionalTitleConfigId: dataForm.professionalTitleConfigId,
majorStation: dataForm.majorStation,
certificateTime: dataForm.certificateTime,
inOfficeDate: dataForm.inOfficeDate,
certificateNumber: dataForm.certificateNumber,
mateA: dataForm.evidence || dataForm.materialA // 使用 mateA 字段(与 MultiDialog 一致)
}
const res = await updateOtherInfo(submitData)
if (res.data == '-1') {
message.warning("当前不允许提交")
} else {
message.success("提交成功")
}
} }
// 编辑时需要传递 id
if (dataForm.id) {
submitData.id = dataForm.id
}
await addObj(submitData)
message.success(dataForm.id ? "修改成功" : "提交成功")
dialogVisible.value = false dialogVisible.value = false
emit('refreshData') emit('refreshData')
} catch (error: any) { } catch (error: any) {

View File

@@ -18,6 +18,8 @@
<el-input <el-input
v-model="waitShenheForm.form.certificateNumber" v-model="waitShenheForm.form.certificateNumber"
placeholder="请输入证书编号(仅支持英文和数字)" placeholder="请输入证书编号(仅支持英文和数字)"
show-word-limit
maxlength="64"
@input="handleCertificateNumberInput" @input="handleCertificateNumberInput"
/> />
</el-form-item> </el-form-item>
@@ -200,6 +202,8 @@
<el-input <el-input
v-model="waitShenheForm.form.certificateNumber" v-model="waitShenheForm.form.certificateNumber"
placeholder="请输入证书编号(仅支持英文和数字)" placeholder="请输入证书编号(仅支持英文和数字)"
show-word-limit
maxlength="32"
@input="handleCertificateNumberInput" @input="handleCertificateNumberInput"
/> />
</el-form-item> </el-form-item>