From 898d2095948dfbf4e793468f6751dc2b71d97221 Mon Sep 17 00:00:00 2001 From: ZhangAo Date: Fri, 19 Dec 2025 17:31:43 +0800 Subject: [PATCH] u --- .../model/dto/DeleteCompanyUserDTO.java | 3 +- .../model/dto/UpdateCompanyUserDTO.java | 1 - .../company/service/CompanyUserService.java | 50 +++++-- .../src/request/api/company/user.ts | 10 +- .../link56-frontend-new/src/router/index.ts | 12 ++ .../src/types/company/user.ts | 17 +++ .../src/views/settings/forum/editor.vue | 10 ++ .../src/views/settings/forum/home.vue | 10 ++ .../src/views/settings/forum/post.vue | 10 ++ .../info/user/components/EditDrawer.vue | 112 +++++++------- .../src/views/settings/info/user/index.vue | 138 ++++++++++++++++-- 11 files changed, 295 insertions(+), 78 deletions(-) create mode 100644 code/link56/link56-frontend-new/src/views/settings/forum/editor.vue create mode 100644 code/link56/link56-frontend-new/src/views/settings/forum/home.vue create mode 100644 code/link56/link56-frontend-new/src/views/settings/forum/post.vue diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/DeleteCompanyUserDTO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/DeleteCompanyUserDTO.java index 6742f903..ac325202 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/DeleteCompanyUserDTO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/DeleteCompanyUserDTO.java @@ -5,13 +5,14 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; +import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class DeleteCompanyUserDTO { @NotNull(message = "公司成员不能为空") - private Long id; + private List ids; @NotNull(message = "公司不能为空") private Long companyId; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java index 47a69320..d3bb4838 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/model/dto/UpdateCompanyUserDTO.java @@ -18,7 +18,6 @@ public class UpdateCompanyUserDTO { @NotBlank(message = "邮箱不能为空") private String email; - @NotBlank(message = "密码不能为空") private String password; private String position; diff --git a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java index db00ed09..ecaccf0f 100644 --- a/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java +++ b/code/link56/link56-backend/src/main/java/cn/link56/company/service/CompanyUserService.java @@ -12,6 +12,7 @@ import cn.link56.company.model.dto.UpdateCompanyUserDTO; import cn.link56.company.model.po.CompanyUserPO; import cn.link56.company.model.vo.QueryCompanyUserVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.ObjectUtils; @@ -205,46 +206,69 @@ public class CompanyUserService extends ServiceImpl ids = deleteCompanyUserDTO.getIds(); Long companyId = deleteCompanyUserDTO.getCompanyId(); + // 检查用户是否有权限删除该公司用户 boolean hasPermission = hasPermission(companyId, UserContext.getUserId()); - - if (!hasPermission){ + if (!hasPermission) { throw new BusinessException("您没有权限访问该公司的信息,操作被拒绝"); } - companyUserMapper.deleteById(id); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(CompanyUserPO::getId, ids) + .eq(CompanyUserPO::getCompanyId, companyId) + .ne(CompanyUserPO::getRole, 0); + + // 执行删除操作 + companyUserMapper.delete(updateWrapper); } + + } diff --git a/code/link56/link56-frontend-new/src/request/api/company/user.ts b/code/link56/link56-frontend-new/src/request/api/company/user.ts index 7993b2b1..2973c077 100644 --- a/code/link56/link56-frontend-new/src/request/api/company/user.ts +++ b/code/link56/link56-frontend-new/src/request/api/company/user.ts @@ -1,9 +1,15 @@ -import type { AddCompanyUserParams, CompanyUser, QueryCompanyUserParams } from '@/types/company/user' +import type { AddCompanyUserParams, CompanyUser, DeleteCompanyUserParams, QueryCompanyUserParams, UpdateCompanyUserParams } from '@/types/company/user' import { httpGet, httpPostJson } from '@/request/utils' export function queryCompanyUserApi(params: QueryCompanyUserParams) { return httpPostJson>('/company/user/query', params) } export function addCompanyUserApi(params: AddCompanyUserParams) { - return httpPostJson>('/company/user/add', params) + return httpPostJson('/company/user/add', params) +} +export function updateCompanyUserApi(params: UpdateCompanyUserParams) { + return httpPostJson('/company/user/update', params) +} +export function deleteCompanyUserApi(params: DeleteCompanyUserParams) { + return httpPostJson('/company/user/delete', params) } diff --git a/code/link56/link56-frontend-new/src/router/index.ts b/code/link56/link56-frontend-new/src/router/index.ts index 190f681d..2383573d 100644 --- a/code/link56/link56-frontend-new/src/router/index.ts +++ b/code/link56/link56-frontend-new/src/router/index.ts @@ -34,6 +34,18 @@ const router = createRouter({ path: '/settings/info/user', component: () => import('@/views/settings/info/user/index.vue'), }, + { + path: '/settings/forum/home', + component: () => import('@/views/settings/forum/home.vue'), + }, + { + path: '/settings/forum/editor', + component: () => import('@/views/settings/forum/editor.vue'), + }, + { + path: '/settings/forum/post', + component: () => import('@/views/settings/forum/post.vue'), + }, ], }, ], diff --git a/code/link56/link56-frontend-new/src/types/company/user.ts b/code/link56/link56-frontend-new/src/types/company/user.ts index 63a38cd0..2dd4bd05 100644 --- a/code/link56/link56-frontend-new/src/types/company/user.ts +++ b/code/link56/link56-frontend-new/src/types/company/user.ts @@ -35,3 +35,20 @@ export interface AddCompanyUserParams { phone: string canuse: string } +export interface UpdateCompanyUserParams { + id: number + companyId: number + + email: string + password: string + + name: string + position: string + phone: string + canuse: string +} + +export interface DeleteCompanyUserParams { + companyId: number + ids: number[] +} diff --git a/code/link56/link56-frontend-new/src/views/settings/forum/editor.vue b/code/link56/link56-frontend-new/src/views/settings/forum/editor.vue new file mode 100644 index 00000000..fd477cab --- /dev/null +++ b/code/link56/link56-frontend-new/src/views/settings/forum/editor.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/code/link56/link56-frontend-new/src/views/settings/forum/home.vue b/code/link56/link56-frontend-new/src/views/settings/forum/home.vue new file mode 100644 index 00000000..fd477cab --- /dev/null +++ b/code/link56/link56-frontend-new/src/views/settings/forum/home.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/code/link56/link56-frontend-new/src/views/settings/forum/post.vue b/code/link56/link56-frontend-new/src/views/settings/forum/post.vue new file mode 100644 index 00000000..fd477cab --- /dev/null +++ b/code/link56/link56-frontend-new/src/views/settings/forum/post.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/code/link56/link56-frontend-new/src/views/settings/info/user/components/EditDrawer.vue b/code/link56/link56-frontend-new/src/views/settings/info/user/components/EditDrawer.vue index 3be6f002..769f1f13 100644 --- a/code/link56/link56-frontend-new/src/views/settings/info/user/components/EditDrawer.vue +++ b/code/link56/link56-frontend-new/src/views/settings/info/user/components/EditDrawer.vue @@ -6,7 +6,7 @@ import { ElMessage } from 'element-plus' import { computed, ref, watch } from 'vue' import EmailCodeInput from '@/components/EmailCodeInput.vue' import { authCodeVerifyApi } from '@/request/api/auth/code' -import { addCompanyUserApi } from '@/request/api/company/user' +import { addCompanyUserApi, updateCompanyUserApi } from '@/request/api/company/user' import { useUserStore } from '@/store/user' import { AuthCodeChannel, AuthCodePurpose } from '@/types/auth/code' import { validatePhone } from '@/utils/validate' @@ -18,6 +18,8 @@ const props = defineProps({ }, }) +const emits = defineEmits(['customClose', 'dataChange']) + const userStore = useUserStore() const roleOptions = [ { @@ -91,8 +93,7 @@ const formRules = { password: [ { validator: (rule: any, value: any, callback: any) => { - // 更新时允许不填 - if (isUpdate.value && !value) { + if (isUpdate.value && (value === undefined || value === null || value === '')) { callback() return } @@ -136,57 +137,65 @@ async function handleSubmit(formEl: FormInstance | undefined) { if (!formEl) return - await formEl.validate((valid) => { - if (valid) { - if (isEmailChanged.value) { - submitLoading.value = true + // 表单验证 + const valid = await formEl.validate() + if (!valid) { + console.log('===验证失败===') + return + } - authCodeVerifyApi({ - channel: AuthCodeChannel.EMAIL, - purpose: isUpdate.value ? AuthCodePurpose.UPDATE_EMAIL : AuthCodePurpose.REGISTER, - target: form.value.email, - code: form.value.emailCode, - }).then((res) => { - if (res.isSuccess) { - addCompanyUserApi({ - companyId: userStore.userInfo.company.id, - email: form.value.email, - password: form.value.password, - name: form.value.name, - position: form.value.position, - phone: form.value.phone, - canuse: form.value.canuse, - }).then((res) => { - if (res.isSuccess) { - ElMessage.success('保存成功') - } - else { - ElMessage.error(res.message || '新增失败,请稍后再试') - } - }).catch((err) => { - console.log(err) - ElMessage.error('新增失败,请稍后再试') - }).finally(() => { - submitLoading.value = false - }) - } - else { - submitLoading.value = false + submitLoading.value = true - ElMessage.error(res.message || '验证码无效或已过期,请重新获取') - } - }).catch((err) => { - submitLoading.value = false + try { + // 验证邮箱是否变化 + if (isEmailChanged.value) { + const res = await authCodeVerifyApi({ + channel: AuthCodeChannel.EMAIL, + purpose: isUpdate.value ? AuthCodePurpose.UPDATE_EMAIL : AuthCodePurpose.REGISTER, + target: form.value.email, + code: form.value.emailCode, + }) - console.log(err) - ElMessage.error('邮箱验证码校验失败,请稍后再试') - }) + if (!res.isSuccess) { + throw new Error(res.message || '验证码无效或已过期,请重新获取') } } - else { - console.log('===验证失败===') + + // 提交用户数据 + const userApi = isUpdate.value ? updateCompanyUserApi : addCompanyUserApi + const response = await userApi({ + id: form.value.id, + companyId: userStore.userInfo.company.id, + email: form.value.email, + password: form.value.password, + name: form.value.name, + position: form.value.position, + phone: form.value.phone, + canuse: form.value.canuse, + }) + + if (response.isSuccess) { + ElMessage.success(isUpdate.value ? '更新成功' : '保存成功') + + emits('customClose') + emits('dataChange') } - }) + else { + ElMessage.error(response.message || (isUpdate.value ? '更新失败,请稍后再试' : '新增失败,请稍后再试')) + } + } + catch (err) { + console.log(err) + if (err instanceof Error) { + ElMessage.error(err.message || '操作失败,请稍后再试') + } + else { + ElMessage.error('操作失败,请稍后再试') + } + } + finally { + submitLoading.value = false + } } @@ -256,9 +265,14 @@ async function handleSubmit(formEl: FormInstance | undefined) { +