[dev]change permissions

This commit is contained in:
susie-laptop 2025-03-28 21:36:38 -04:00
parent b2df4ebfc8
commit 8f92e25258
8 changed files with 82 additions and 33 deletions

View File

@ -61,15 +61,15 @@ const CreateKnowledgeBaseModal = ({
if (isAdmin) {
return [
{ value: 'admin', label: '公共知识库' },
{ value: 'leader', label: 'Leader 级知识库' },
{ value: 'member', label: 'Member 级知识库' },
{ value: 'leader', label: '组长级知识库' },
{ value: 'member', label: '组内知识库' },
{ value: 'private', label: '私有知识库' },
{ value: 'secret', label: '密知识库' },
{ value: 'secret', label: '密知识库' },
];
} else if (isLeader) {
return [
{ value: 'admin', label: '公共知识库' },
{ value: 'member', label: 'Member 级知识库' },
{ value: 'member', label: '组内知识库' },
{ value: 'private', label: '私有知识库' },
];
} else {
@ -180,7 +180,7 @@ const CreateKnowledgeBaseModal = ({
</div>
{/* 仅当不是私有知识库时才显示部门选项 */}
{formData.type !== 'private' && (
{formData.type === 'member' && (
<div className='mb-3'>
<label htmlFor='department' className='form-label'>
部门 {isAdmin && needSelectGroup && <span className='text-danger'>*</span>}
@ -220,7 +220,7 @@ const CreateKnowledgeBaseModal = ({
)}
{/* 仅当不是私有知识库时才显示组别选项 */}
{formData.type !== 'private' && (
{formData.type === 'member' && (
<div className='mb-3'>
<label htmlFor='group' className='form-label'>
组别 {needSelectGroup && <span className='text-danger'>*</span>}

View File

@ -89,10 +89,10 @@ export default function SettingsTab({ knowledgeBase }) {
allowed = ['admin', 'leader', 'member', 'private', 'secret'].includes(value);
} else if (role === 'leader') {
// member private
allowed = ['member', 'private'].includes(value);
allowed = ['admin', 'member', 'private'].includes(value);
} else {
// private
allowed = value === 'private';
// private
allowed = ['admin', 'private'].includes(value);
}
if (!allowed) {
@ -299,6 +299,7 @@ export default function SettingsTab({ knowledgeBase }) {
})
);
// Navigate back to knowledge base list
// Redux store reducer
navigate('/knowledge-base');
})
.catch((error) => {

View File

@ -27,15 +27,15 @@ const KnowledgeBaseForm = ({
if (isAdmin) {
return [
{ value: 'admin', label: '公共知识库' },
{ value: 'leader', label: 'Leader 级知识库' },
{ value: 'member', label: 'Member 级知识库' },
{ value: 'leader', label: '组长级知识库' },
{ value: 'member', label: '组内知识库' },
{ value: 'private', label: '私有知识库' },
{ value: 'secret', label: '密知识库' },
{ value: 'secret', label: '密知识库' },
];
} else if (isLeader) {
return [
{ value: 'admin', label: '公共知识库' },
{ value: 'member', label: 'Member 级知识库' },
{ value: 'member', label: '组内知识库' },
{ value: 'private', label: '私有知识库' },
];
} else {
@ -125,7 +125,7 @@ const KnowledgeBaseForm = ({
</div>
{/* 仅当不是私有知识库时才显示部门选项 */}
{formData.type !== 'private' && (
{formData.type === 'member' && (
<div className='mb-3'>
<label htmlFor='department' className='form-label'>
部门 {isAdmin && <span className='text-danger'>*</span>}
@ -161,14 +161,13 @@ const KnowledgeBaseForm = ({
value={formData.department || ''}
readOnly
/>
<small className='text-muted'>部门信息根据知识库创建者自动填写</small>
</>
)}
</div>
)}
{/* 仅当不是私有知识库时才显示组别选项 */}
{formData.type !== 'private' && (
{formData.type === 'member' && (
<div className='mb-3'>
<label htmlFor='group' className='form-label'>
组别 {isAdmin && <span className='text-danger'>*</span>}
@ -205,7 +204,6 @@ const KnowledgeBaseForm = ({
value={formData.group || ''}
readOnly
/>
<small className='text-muted'>组别信息根据知识库创建者自动填写</small>
</>
)}
</div>

View File

@ -108,6 +108,7 @@ export default function KnowledgeBase() {
// Handle search input change
const handleSearchInputChange = (e) => {
const value = e.target.value;
console.log('搜索框输入值:', value);
setSearchKeyword(value);
//
@ -206,10 +207,10 @@ export default function KnowledgeBase() {
allowed = ['admin', 'leader', 'member', 'private', 'secret'].includes(value);
} else if (role === 'leader') {
// member private
allowed = ['member', 'private'].includes(value);
allowed = ['admin', 'member', 'private'].includes(value);
} else {
// private
allowed = value === 'private';
allowed = ['admin', 'private'].includes(value);
}
if (!allowed) {
@ -401,6 +402,7 @@ export default function KnowledgeBase() {
const handleDelete = (e, id) => {
e.preventDefault();
e.stopPropagation();
// Dispatch delete knowledge base action
dispatch(deleteKnowledgeBase(id))
.unwrap()
@ -411,6 +413,7 @@ export default function KnowledgeBase() {
type: 'success',
})
);
// Redux store reducer
})
.catch((error) => {
dispatch(

View File

@ -94,13 +94,14 @@ export default function KnowledgeCard({
</span>
)}
{access === 'full' || access === 'read' ? (
<button
className='btn btn-outline-dark btn-sm d-flex align-items-center gap-1'
onClick={handleNewChat}
>
<SvgIcon className={'chat-dot'} />
新聊天
</button>
<></>
// <button
// className='btn btn-outline-dark btn-sm d-flex align-items-center gap-1'
// onClick={handleNewChat}
// >
// <SvgIcon className={'chat-dot'} />
//
// </button>
) : (
<button
className='btn btn-outline-dark btn-sm d-flex align-items-center gap-1'

View File

@ -222,6 +222,24 @@ export default function PendingRequests() {
}
};
//
const getKnowledgeBaseTypeText = (type) => {
switch (type) {
case 'admin':
return '公共知识库';
case 'member':
return '组内知识库';
case 'private':
return '私人知识库';
case 'leader':
return '组长级知识库';
case 'secret':
return '私密知识库';
default:
return '未知类型';
}
};
//
if (fetchStatus === 'loading' && permissionRequests.length === 0) {
return (
@ -275,7 +293,13 @@ export default function PendingRequests() {
<div className='request-content'>
<div className='d-flex justify-content-between align-items-start mb-2'>
<div>
<p className='mb-0'>申请访问{request.knowledge_base.name}</p>
<small className='text-muted'>
类型{getKnowledgeBaseTypeText(request.knowledge_base.type)}
</small>
</div>
{renderStatusBadge(request.status)}
</div>
{request.permissions.can_edit ? (

View File

@ -21,6 +21,24 @@ export default function RequestDetailSlideOver({
const knowledgeBaseId = request.knowledge_base?.id || '';
const knowledgeBaseType = request.knowledge_base?.type || '';
//
const getKnowledgeBaseTypeText = (type) => {
switch (type) {
case 'admin':
return '公共知识库';
case 'member':
return '组内知识库';
case 'private':
return '私人知识库';
case 'leader':
return '组长级知识库';
case 'secret':
return '私密知识库';
default:
return '未知类型';
}
};
return (
<>
<div className={`slide-over-backdrop ${show ? 'show' : ''}`} onClick={onClose}></div>
@ -52,7 +70,7 @@ export default function RequestDetailSlideOver({
</p>
{knowledgeBaseType && (
<p className='mb-1'>
<strong>类型</strong> {knowledgeBaseType}
<strong>类型</strong> {getKnowledgeBaseTypeText(knowledgeBaseType)}
</p>
)}
</div>
@ -112,7 +130,8 @@ export default function RequestDetailSlideOver({
<div className='mb-4'>
<h6 className='text-muted mb-2'>审批人</h6>
<p className='mb-1'>
{request.approver.name || request.approver.username} ({request.approver.department || '未分配部门'})
{request.approver.name || request.approver.username} (
{request.approver.department || '未分配部门'})
</p>
</div>
)}
@ -126,9 +145,7 @@ export default function RequestDetailSlideOver({
<div className='mb-4'>
<h6 className='text-muted mb-2'>申请理由</h6>
<div className='p-3 bg-light rounded'>
{request.reason || '无申请理由'}
</div>
<div className='p-3 bg-light rounded'>{request.reason || '无申请理由'}</div>
</div>
</div>
{request.status === 'pending' && (

View File

@ -104,7 +104,12 @@ const knowledgeBaseSlice = createSlice({
})
.addCase(deleteKnowledgeBase.fulfilled, (state, action) => {
state.loading = false;
state.knowledgeBases = state.knowledgeBases.filter((kb) => kb.id !== action.meta.arg.knowledgeBaseId);
const deletedId = action.payload;
state.knowledgeBases = state.knowledgeBases.filter((kb) => kb.id !== deletedId);
if (state.pagination.total > 0) {
state.pagination.total -= 1;
state.pagination.total_pages = Math.ceil(state.pagination.total / state.pagination.page_size);
}
})
.addCase(deleteKnowledgeBase.rejected, (state, action) => {
state.loading = false;