人员管理
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
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) {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user