fix(aihr): align app case permissions with brd
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
<button class="primary-button login-button" @click="goLogin">去登录</button>
|
||||
</view>
|
||||
|
||||
<view v-else class="panel">
|
||||
<view v-else-if="canSubmitCases" class="panel">
|
||||
<text class="panel-title">提交素材</text>
|
||||
<view class="file-box" :class="{ 'has-file': Boolean(selectedFile) }">
|
||||
<text class="file-title">{{ selectedFile?.name || '未选择音频' }}</text>
|
||||
@@ -39,6 +39,11 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-else-if="loggedIn" class="panel permission-panel">
|
||||
<text class="panel-title">案例学习</text>
|
||||
<text class="muted block">当前岗位可查看本项目已入库案例;提交案例素材需要主管或项目负责人权限。</text>
|
||||
</view>
|
||||
|
||||
<view v-if="uploadResult" class="panel">
|
||||
<text class="panel-title">ASR 转写</text>
|
||||
<view class="tag-row">
|
||||
@@ -117,7 +122,7 @@
|
||||
import { computed, ref } from 'vue';
|
||||
import { onShow } from '@dcloudio/uni-app';
|
||||
import type { CaseCurateResponse, CaseDetailResponse, CaseOrganizeResponse, CaseRecord, CaseSelectedFile, CaseUploadResponse } from '@/types/api';
|
||||
import { chooseCaseAudio, curateCase, getCaseDetail, getCaseRecords, organizeCase, uploadCaseAudio } from '@/services/case';
|
||||
import { chooseCaseAudio, curateCase, getCaseCapabilities, getCaseDetail, getCaseRecords, organizeCase, uploadCaseAudio } from '@/services/case';
|
||||
import { isLoggedIn, rememberLoginRedirect } from '@/services/auth';
|
||||
import { navigateBackToToday, resetPageScroll } from '@/services/navigation';
|
||||
import { ensureEmployeePosition } from '@/services/position';
|
||||
@@ -129,6 +134,7 @@ const organizeResult = ref<CaseOrganizeResponse | null>(null);
|
||||
const curateResult = ref<CaseCurateResponse | null>(null);
|
||||
const records = ref<CaseRecord[]>([]);
|
||||
const caseDetail = ref<CaseDetailResponse | null>(null);
|
||||
const canSubmitCases = ref(false);
|
||||
const status = ref<'idle' | 'uploading' | 'organizing' | 'curating'>('idle');
|
||||
const recordsLoading = ref(false);
|
||||
const caseDetailLoading = ref(false);
|
||||
@@ -151,6 +157,7 @@ const clearCaseData = () => {
|
||||
selectedFile.value = null;
|
||||
records.value = [];
|
||||
caseDetail.value = null;
|
||||
canSubmitCases.value = false;
|
||||
resetResult();
|
||||
};
|
||||
|
||||
@@ -196,6 +203,20 @@ const loadRecords = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
const loadCaseCapabilities = async () => {
|
||||
if (!loggedIn.value) {
|
||||
canSubmitCases.value = false;
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const capabilities = await getCaseCapabilities();
|
||||
canSubmitCases.value = Boolean(capabilities.canSubmit);
|
||||
} catch (error) {
|
||||
canSubmitCases.value = false;
|
||||
handleRequestError(error, '案例权限加载失败', true);
|
||||
}
|
||||
};
|
||||
|
||||
const refreshRecords = () => {
|
||||
if (!loggedIn.value) {
|
||||
goLogin();
|
||||
@@ -256,6 +277,7 @@ const handleShow = async () => {
|
||||
if (!(await ensureEmployeePosition('/pages/user/cases/index'))) {
|
||||
return;
|
||||
}
|
||||
void loadCaseCapabilities();
|
||||
void loadRecords();
|
||||
} else {
|
||||
clearCaseData();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type {
|
||||
CaseCurateResponse,
|
||||
CaseCapabilities,
|
||||
CaseDetailResponse,
|
||||
CaseOrganizeResponse,
|
||||
CaseRecord,
|
||||
@@ -73,6 +74,13 @@ export const curateCase = (caseId: string) =>
|
||||
timeout: 30000
|
||||
});
|
||||
|
||||
export const getCaseCapabilities = () =>
|
||||
apiRequest<CaseCapabilities>({
|
||||
url: '/api/knowledge/case/capabilities',
|
||||
method: 'GET',
|
||||
timeout: 15000
|
||||
});
|
||||
|
||||
export const getCaseRecords = () =>
|
||||
apiRequest<CaseRecord[]>({
|
||||
url: '/api/knowledge/case/records?limit=10',
|
||||
|
||||
@@ -105,6 +105,11 @@ export interface KnowledgeSearchResponse {
|
||||
reviewId?: number | null;
|
||||
}
|
||||
|
||||
export interface CaseCapabilities {
|
||||
canSubmit: boolean;
|
||||
canView: boolean;
|
||||
}
|
||||
|
||||
export interface PositionSopTopic {
|
||||
category: string;
|
||||
question: string;
|
||||
|
||||
Reference in New Issue
Block a user