import React, { useState, useEffect } from 'react'; import SvgIcon from './SvgIcon'; // 部门和组别的映射关系 const departmentGroups = { 技术部: ['开发组', '测试组', '运维组', '架构组', '安全组'], 产品部: ['产品规划组', '用户研究组', '交互设计组', '项目管理组'], 市场部: ['品牌推广组', '市场调研组', '客户关系组', '社交媒体组'], 行政部: ['人事组', '财务组', '行政管理组', '后勤组'], }; // 部门列表 const departments = Object.keys(departmentGroups); /** * 创建知识库模态框组件 * @param {Object} props * @param {boolean} props.show - 是否显示弹窗 * @param {Object} props.formData - 表单数据 * @param {Object} props.formErrors - 表单错误信息 * @param {boolean} props.isSubmitting - 是否正在提交 * @param {Function} props.onClose - 关闭弹窗的回调函数 * @param {Function} props.onChange - 表单输入变化的回调函数 * @param {Function} props.onSubmit - 提交表单的回调函数 * @param {Object} props.currentUser - 当前用户信息 */ const CreateKnowledgeBaseModal = ({ show, formData, formErrors, isSubmitting, onClose, onChange, onSubmit, currentUser, }) => { // 根据用户角色确定可以创建的知识库类型 const isAdmin = currentUser?.role === 'admin'; const isLeader = currentUser?.role === 'leader'; // 获取当前用户的部门和组别 const userDepartment = currentUser?.department || ''; // 可选的组别列表 const [availableGroups, setAvailableGroups] = useState([]); // 当部门变化时更新可用的组别 useEffect(() => { if (formData.department && departmentGroups[formData.department]) { setAvailableGroups(departmentGroups[formData.department]); } else { setAvailableGroups([]); } }, [formData.department]); // 提前返回需要放在所有 Hooks 之后 if (!show) return null; // 获取当前用户可以创建的知识库类型 const getAvailableTypes = () => { if (isAdmin) { return [ { value: 'admin', label: 'Admin 级知识库' }, { value: 'leader', label: 'Leader 级知识库' }, { value: 'member', label: 'Member 级知识库' }, { value: 'private', label: '私有知识库' }, { value: 'secret', label: '保密知识库' }, ]; } else if (isLeader) { return [ { value: 'member', label: 'Member 级知识库' }, { value: 'private', label: '私有知识库' }, ]; } else { return [{ value: 'private', label: '私有知识库' }]; } }; const availableTypes = getAvailableTypes(); // 判断是否需要选择组别 const isMemberTypeSelected = formData.type === 'member'; const needSelectGroup = isMemberTypeSelected; return (
新建知识库
{formErrors.name &&
{formErrors.name}
}
{formErrors.desc &&
{formErrors.desc}
}
{availableTypes.map((type, index) => (
))}
{!isAdmin && !isLeader && ( 注意:您当前只能创建私有知识库。其他类型需要更高权限。 )} {formErrors.type &&
{formErrors.type}
}
{/* 仅当不是私有知识库时才显示部门选项 */} {formData.type !== 'private' && (
{isAdmin ? ( // 管理员可以选择任意部门 ) : ( // 非管理员显示只读字段 )} {formErrors.department && (
{formErrors.department}
)}
)} {/* 仅当不是私有知识库时才显示组别选项 */} {formData.type !== 'private' && (
{isAdmin || (isLeader && needSelectGroup) ? ( // 管理员可以选择任意组别,组长只能选择自己部门下的组别 ) : ( // 普通用户显示只读字段 )} {formErrors.group &&
{formErrors.group}
}
)}
); }; export default CreateKnowledgeBaseModal;