75修改还是提示“当前卫生机构下已存在该科室名称的诊室”。
This commit is contained in:
@@ -26,11 +26,11 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
|
||||
if (roomName != null && ObjectUtil.isNotEmpty(roomName)) {
|
||||
clinicRoom.setRoomName(roomName);
|
||||
}
|
||||
|
||||
|
||||
// 分页查询
|
||||
Page<ClinicRoom> page = new Page<>(pageNum, pageSize);
|
||||
Page<ClinicRoom> result = clinicRoomService.selectClinicRoomPage(page, clinicRoom);
|
||||
|
||||
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,12 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
|
||||
if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) {
|
||||
return R.fail(400, "备注长度不能超过500个字符");
|
||||
}
|
||||
|
||||
|
||||
// 检查诊室名称在同卫生机构下是否已存在
|
||||
if (clinicRoomService.existsByOrgNameAndRoomName(clinicRoom.getOrgName(), clinicRoom.getRoomName())) {
|
||||
return R.fail(400, "当前卫生机构下已存在该诊室名称");
|
||||
}
|
||||
|
||||
// 新增诊室
|
||||
int result = clinicRoomService.insertClinicRoom(clinicRoom);
|
||||
if (result > 0) {
|
||||
@@ -86,13 +91,18 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
|
||||
if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) {
|
||||
return R.fail(400, "备注长度不能超过500个字符");
|
||||
}
|
||||
|
||||
|
||||
// 检查诊室是否存在
|
||||
ClinicRoom existingClinicRoom = clinicRoomService.selectClinicRoomById(clinicRoom.getId());
|
||||
if (existingClinicRoom == null) {
|
||||
return R.fail(404, "诊室不存在");
|
||||
}
|
||||
|
||||
|
||||
// 检查诊室名称在同卫生机构下是否已存在(排除当前记录)
|
||||
if (clinicRoomService.existsByOrgNameAndRoomNameExcludeId(clinicRoom.getOrgName(), clinicRoom.getRoomName(), clinicRoom.getId())) {
|
||||
return R.fail(400, "当前卫生机构下已存在该诊室名称");
|
||||
}
|
||||
|
||||
// 更新诊室
|
||||
int result = clinicRoomService.updateClinicRoom(clinicRoom);
|
||||
if (result > 0) {
|
||||
@@ -109,7 +119,7 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
|
||||
if (existingClinicRoom == null) {
|
||||
return R.fail(404, "诊室不存在");
|
||||
}
|
||||
|
||||
|
||||
// 删除诊室
|
||||
int result = clinicRoomService.deleteClinicRoomById(id);
|
||||
if (result > 0) {
|
||||
|
||||
@@ -51,4 +51,23 @@ public interface IClinicRoomService extends IService<ClinicRoom> {
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteClinicRoomById(Long id);
|
||||
|
||||
/**
|
||||
* 检查指定卫生机构下是否已存在相同诊室名称(新增时使用)
|
||||
*
|
||||
* @param orgName 卫生机构名称
|
||||
* @param roomName 诊室名称
|
||||
* @return 是否存在
|
||||
*/
|
||||
boolean existsByOrgNameAndRoomName(String orgName, String roomName);
|
||||
|
||||
/**
|
||||
* 检查指定卫生机构下是否已存在相同诊室名称(编辑时使用,排除当前记录)
|
||||
*
|
||||
* @param orgName 卫生机构名称
|
||||
* @param roomName 诊室名称
|
||||
* @param id 当前记录ID
|
||||
* @return 是否存在
|
||||
*/
|
||||
boolean existsByOrgNameAndRoomNameExcludeId(String orgName, String roomName, Long id);
|
||||
}
|
||||
|
||||
@@ -44,4 +44,21 @@ public class ClinicRoomServiceImpl extends ServiceImpl<ClinicRoomMapper, ClinicR
|
||||
public int deleteClinicRoomById(Long id) {
|
||||
return baseMapper.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsByOrgNameAndRoomName(String orgName, String roomName) {
|
||||
LambdaQueryWrapper<ClinicRoom> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ClinicRoom::getOrgName, orgName)
|
||||
.eq(ClinicRoom::getRoomName, roomName);
|
||||
return count(queryWrapper) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsByOrgNameAndRoomNameExcludeId(String orgName, String roomName, Long id) {
|
||||
LambdaQueryWrapper<ClinicRoom> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(ClinicRoom::getOrgName, orgName)
|
||||
.eq(ClinicRoom::getRoomName, roomName)
|
||||
.ne(ClinicRoom::getId, id);
|
||||
return count(queryWrapper) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,104 +276,14 @@ const form = reactive({
|
||||
const rules = {
|
||||
roomName: [
|
||||
{ required: true, message: '诊室名称不能为空', trigger: 'blur' },
|
||||
{ max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
// console.log('Validating roomName:', { value, formId: form.id });
|
||||
if (!value) {
|
||||
return callback()
|
||||
}
|
||||
// 检查诊室名称是否已存在(全局唯一性)
|
||||
const isExist = clinicRoomList.value.some(item => {
|
||||
const checkRoomName = String(item.roomName) === String(value); // Ensure type consistency
|
||||
const checkId = item.id !== form.id;
|
||||
|
||||
// console.log('Comparing item for roomName:', {
|
||||
// itemId: item.id,
|
||||
// itemRoomName: item.roomName,
|
||||
// checkRoomName,
|
||||
// checkId,
|
||||
// allConditions: checkRoomName && checkId
|
||||
// });
|
||||
|
||||
return checkRoomName && checkId
|
||||
})
|
||||
if (isExist) {
|
||||
callback(new Error('诊室名称已存在'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
} ], department: [
|
||||
{ required: true, message: '', trigger: 'change' },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
// console.log('Validating department:', { value, formOrgName: form.orgName, formId: form.id });
|
||||
if (!value) {
|
||||
return callback()
|
||||
}
|
||||
if (!form.orgName) {
|
||||
// console.log('Department validation: form.orgName is missing, skipping uniqueness check.');
|
||||
return callback()
|
||||
}
|
||||
// 检查当前卫生机构下科室名称是否已存在
|
||||
const isExist = clinicRoomList.value.some(item => {
|
||||
const checkDepartment = String(item.department) === String(value);
|
||||
const checkOrgName = String(item.orgName) === String(form.orgName); // Ensure type consistency
|
||||
const checkId = item.id !== form.id; // Check against other items
|
||||
|
||||
// console.log('Comparing item:', {
|
||||
// itemId: item.id,
|
||||
// itemDepartment: item.department,
|
||||
// itemOrgName: item.orgName,
|
||||
// checkDepartment,
|
||||
// checkOrgName,
|
||||
// checkId,
|
||||
// allConditions: checkDepartment && checkOrgName && checkId
|
||||
// });
|
||||
|
||||
return checkDepartment && checkOrgName && checkId
|
||||
})
|
||||
if (isExist) {
|
||||
// 不在此处直接报错,而是依赖orgName的校验来显示错误
|
||||
callback()
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
// 触发对orgName字段的重新验证,以实现联动校验
|
||||
proxy.formRef.validateField('orgName')
|
||||
},
|
||||
trigger: 'change'
|
||||
}
|
||||
],
|
||||
orgName: [
|
||||
{ required: true, message: '卫生机构不能为空', trigger: 'change' },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
// 如果卫生机构为空或科室名称为空,则不进行组合唯一性校验
|
||||
if (!value || !form.department) {
|
||||
return callback()
|
||||
}
|
||||
// 检查当前卫生机构下科室名称是否已存在
|
||||
const isExist = clinicRoomList.value.some(item => {
|
||||
const checkDepartment = String(item.department) === String(form.department);
|
||||
const checkOrgName = String(item.orgName) === String(value); // 这里使用当前的value (orgName)
|
||||
const checkId = item.id !== form.id;
|
||||
|
||||
return checkDepartment && checkOrgName && checkId
|
||||
})
|
||||
if (isExist) {
|
||||
callback(new Error('当前卫生机构下已存在该科室名称的诊室'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
// 触发对department字段的重新验证,以实现联动校验
|
||||
proxy.formRef.validateField('department')
|
||||
},
|
||||
trigger: 'change'
|
||||
}
|
||||
]
|
||||
{ max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }
|
||||
],
|
||||
department: [
|
||||
{ required: true, message: '科室名称不能为空', trigger: 'change' }
|
||||
],
|
||||
orgName: [
|
||||
{ required: true, message: '卫生机构不能为空', trigger: 'change' }
|
||||
]
|
||||
}
|
||||
|
||||
// 获取诊室列表
|
||||
@@ -530,32 +440,10 @@ function handleEdit(row) {
|
||||
dialogTitle.value = '编辑诊室'
|
||||
dialogVisible.value = true
|
||||
|
||||
// 为编辑模式修改诊室名称验证规则:检查同一租户下是否重复
|
||||
// 为编辑模式设置基础验证规则
|
||||
rules.roomName = [
|
||||
{ required: true, message: '诊室名称不能为空', trigger: 'blur' },
|
||||
{ max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' },
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
return callback()
|
||||
}
|
||||
if (!form.orgName) {
|
||||
return callback()
|
||||
}
|
||||
// 编辑时检查当前租户下是否已存在相同的诊室名称(排除当前记录)
|
||||
const isExist = clinicRoomList.value.some(item => {
|
||||
return item.roomName === value &&
|
||||
item.orgName === form.orgName &&
|
||||
item.id !== form.id
|
||||
})
|
||||
if (isExist) {
|
||||
callback(new Error('诊室名称已存在'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
{ max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }
|
||||
]
|
||||
} else {
|
||||
ElMessage.error(response.msg || '获取诊室详情失败')
|
||||
@@ -633,7 +521,12 @@ function submitForm() {
|
||||
dialogVisible.value = false
|
||||
getList()
|
||||
} else {
|
||||
ElMessage.error(response.msg || '修改失败')
|
||||
// 特别处理唯一性验证错误
|
||||
if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) {
|
||||
ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称')
|
||||
} else {
|
||||
ElMessage.error(response.msg || '修改失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
@@ -648,7 +541,12 @@ function submitForm() {
|
||||
dialogVisible.value = false
|
||||
getList()
|
||||
} else {
|
||||
ElMessage.error(response.msg || '新增失败')
|
||||
// 特别处理唯一性验证错误
|
||||
if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) {
|
||||
ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称')
|
||||
} else {
|
||||
ElMessage.error(response.msg || '新增失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
Reference in New Issue
Block a user