将知识库笔记迁移为注意事项

This commit is contained in:
Cheng Zhou
2026-05-28 10:52:05 +08:00
parent 8da7fc715c
commit d2b41ae454
13 changed files with 479 additions and 281 deletions
@@ -24,7 +24,7 @@
<el-button @click="resetFilters">{{ TEXT.common.actions.reset }}</el-button>
</div>
<div class="filter-spacer"></div>
<el-button v-if="canWriteSharedLibrary" type="primary" @click="goNew">
<el-button v-if="canWritePrecautions" type="primary" @click="goNew">
{{ TEXT.modules.knowledgeNotes.newTitle }}
</el-button>
</el-form>
@@ -36,7 +36,7 @@
style="width: 100%"
class="ctms-table"
@row-click="onRowClick"
:row-class-name="noteRowClass"
:row-class-name="precautionRowClass"
table-layout="fixed"
>
<el-table-column prop="site_name" :label="TEXT.common.fields.site" show-overflow-tooltip />
@@ -48,7 +48,7 @@
<el-table-column :label="TEXT.common.labels.actions" width="120">
<template #default="scope">
<el-button
v-if="canWriteSharedLibrary"
v-if="canWritePrecautions"
link
type="danger"
size="small"
@@ -73,7 +73,7 @@ import { computed, onMounted, reactive, ref } from "vue";
import { useRouter } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useStudyStore } from "../../store/study";
import { listKnowledgeNotes, deleteKnowledgeNote } from "../../api/knowledgeNotes";
import { listPrecautions, deletePrecaution } from "../../api/precautions";
import { fetchSites } from "../../api/sites";
import { displayDateTime } from "../../utils/display";
import { usePermission } from "../../utils/permission";
@@ -98,7 +98,7 @@ const siteActiveMap = computed(() => {
return map;
});
const isInactiveSite = (siteName?: string) => !!siteName && siteActiveMap.value[siteName] === false;
const noteRowClass = ({ row }: { row: any }) =>
const precautionRowClass = ({ row }: { row: any }) =>
`${row?.id ? "clickable-row" : ""}${isInactiveSite(row?.site_name) ? " row-inactive" : ""}`.trim();
const filteredItems = computed(() => {
const siteKeyword = filters.site_name.trim().toLowerCase();
@@ -112,7 +112,7 @@ const filteredItems = computed(() => {
const sortedItems = computed(() =>
[...filteredItems.value].sort((a, b) => Number(isInactiveSite(a?.site_name)) - Number(isInactiveSite(b?.site_name)))
);
const canWriteSharedLibrary = computed(() => can("shared.library.write"));
const canWritePrecautions = computed(() => can("precautions.write"));
const loadSites = async () => {
const studyId = study.currentStudy?.id;
@@ -130,7 +130,7 @@ const load = async () => {
if (!studyId) return;
loading.value = true;
try {
const { data } = await listKnowledgeNotes(studyId, {}) as any;
const { data } = await listPrecautions(studyId, {}) as any;
items.value = Array.isArray(data) ? data : data.items || [];
} catch (e: any) {
ElMessage.error(e?.response?.data?.message || TEXT.common.messages.loadFailed);
@@ -144,8 +144,8 @@ const resetFilters = () => {
filters.keyword = "";
};
const goNew = () => router.push("/knowledge/notes/new");
const goDetail = (id: string) => router.push(`/knowledge/notes/${id}`);
const goNew = () => router.push("/knowledge/precautions/new");
const goDetail = (id: string) => router.push(`/knowledge/precautions/${id}`);
const onRowClick = (row: any) => {
if (!row?.id) return;
goDetail(row.id);
@@ -161,7 +161,7 @@ const remove = async (row: any) => {
const ok = await ElMessageBox.confirm(TEXT.common.confirm.delete, TEXT.common.labels.tips).catch(() => null);
if (!ok) return;
try {
await deleteKnowledgeNote(studyId, row.id);
await deletePrecaution(studyId, row.id);
ElMessage.success(TEXT.common.messages.deleteSuccess);
load();
} catch (e: any) {