diff --git a/pc/src/api/knowlege.js b/pc/src/api/knowlege.js
deleted file mode 100644
index d982468..0000000
--- a/pc/src/api/knowlege.js
+++ /dev/null
@@ -1,113 +0,0 @@
-import request from "@/utils/request";
-
-/**
- * 获取知识列表
- * @param {Object} params 查询参数
- * @returns {Promise}
- */
-export function getKnowledgeList(params) {
- return request({
- url: "/api/knowledge/list",
- method: "get",
- params,
- });
-}
-
-/**
- * 获取知识详情
- * @param {number|string} id 知识ID
- * @returns {Promise}
- */
-export function getKnowledgeDetail(id) {
- return request({
- url: `/api/knowledge/detail/${id}`,
- method: "get",
- });
-}
-
-/**
- * 创建知识
- * @param {Object} data 知识数据
- * @returns {Promise}
- */
-export function createKnowledge(data) {
- return request({
- url: "/api/knowledge/create",
- method: "post",
- data,
- });
-}
-
-/**
- * 更新知识
- * @param {number|string} id 知识ID
- * @param {Object} data 更新的数据
- * @returns {Promise}
- */
-export function updateKnowledge(id, data) {
- return request({
- url: `/api/knowledge/update/${id}`,
- method: "put",
- data,
- });
-}
-
-/**
- * 删除知识
- * @param {number|string} id 知识ID
- * @returns {Promise}
- */
-export function deleteKnowledge(id) {
- return request({
- url: `/api/knowledge/delete/${id}`,
- method: "delete",
- });
-}
-
-/**
- * 获取分类列表
- * @returns {Promise}
- */
-export function getCategoryList() {
- return request({
- url: "/api/knowledge/category/list",
- method: "get",
- });
-}
-
-/**
- * 获取标签列表
- * @returns {Promise}
- */
-export function getTagList() {
- return request({
- url: "/api/knowledge/tag/list",
- method: "get",
- });
-}
-
-/**
- * 添加分类
- * @param {Object} data 分类数据
- * @returns {Promise}
- */
-export function addCategory(data) {
- return request({
- url: "/api/knowledge/category/add",
- method: "post",
- data,
- });
-}
-
-/**
- * 添加标签
- * @param {Object} data 标签数据
- * @returns {Promise}
- */
-export function addTag(data) {
- return request({
- url: "/api/knowledge/tag/add",
- method: "post",
- data,
- });
-}
\ No newline at end of file
diff --git a/pc/src/views/apps/knowledge/components/edit.vue b/pc/src/views/apps/knowledge/components/edit.vue
index b38da2d..129a6ac 100644
--- a/pc/src/views/apps/knowledge/components/edit.vue
+++ b/pc/src/views/apps/knowledge/components/edit.vue
@@ -66,6 +66,16 @@
+
+
+
+
+ 个人
+ 共享
+
+
+
+
@@ -105,14 +115,9 @@
import { ref, reactive, computed, onMounted, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import { marked } from "marked";
-import {
- getKnowledgeDetail,
- updateKnowledge,
- createKnowledge,
- getCategoryList,
- getTagList,
-} from "@/api/knowledge";
-import { ElMessage } from "element-plus";
+// @ts-ignore
+import { getKnowledgeDetail, createKnowledge, updateKnowledge, getCategoryList, getTagList } from "@/api/knowledge"; // Changed to getKnowledgeDetail
+import { ElMessage, ElMessageBox } from "element-plus";
import type { FormInstance, FormRules } from "element-plus";
// 表单 DOM 引用
@@ -129,6 +134,7 @@ const formData = reactive<{
tags: string[];
author: string;
content: string;
+ share: number;
}>({
title: "",
category: "",
@@ -136,15 +142,13 @@ const formData = reactive<{
tags: [],
author: "",
content: "",
+ share: 0,
});
// 校验规则
const rules = reactive({
title: [{ required: true, message: "请输入标题", trigger: "blur" }],
category: [{ required: true, message: "请选择分类", trigger: "change" }],
-// tags: [
-// { type: "array", required: true, message: "请选择标签", trigger: "change" },
-// ],
author: [{ required: true, message: "请输入作者", trigger: "blur" }],
content: [{ required: true, message: "请输入正文", trigger: "blur" }],
});
@@ -195,9 +199,9 @@ const fetchDetail = async () => {
try {
const currentId = id.value as string;
if (currentId && currentId !== "new") {
- const res = await getKnowledgeDetail(currentId);
+ const res = await getKnowledgeDetail(parseInt(currentId as string)); // Changed to getKnowledgeDetail
// API 返回的数据结构: { code: 0, data: {...}, message: "success" }
- const data = (res.code === 0 && res.data) ? res.data : (res.data || res);
+ const data = res.code === 0 && res.data ? res.data : res.data || res;
// 映射后端数据到前端表单
// categoryName 是从数据库联查得到的分类名称
@@ -206,6 +210,7 @@ const fetchDetail = async () => {
formData.categoryId = data.categoryId || 0;
formData.author = data.author || "";
formData.content = data.content || "";
+ formData.share = data.share || 0; // Added share loading
// 如果没有 categoryId,尝试根据 categoryName 查找
if (!formData.categoryId && formData.category) {
@@ -220,7 +225,8 @@ const fetchDetail = async () => {
// Tags 可能是 JSON 字符串,需要解析
if (data.tags) {
try {
- const parsed = typeof data.tags === 'string' ? JSON.parse(data.tags) : data.tags;
+ const parsed =
+ typeof data.tags === "string" ? JSON.parse(data.tags) : data.tags;
formData.tags = Array.isArray(parsed) ? parsed : [];
} catch {
// 如果解析失败,尝试作为字符串数组处理
@@ -242,14 +248,18 @@ const loadCategoryAndTag = async () => {
getCategoryList(),
getTagList(),
]);
-
+
// API 返回的数据结构: { code: 0, data: [...], message: "success" }
- const categories = (catRes.code === 0 && catRes.data) ? catRes.data : (catRes.data || []);
- const tags = (tagRes.code === 0 && tagRes.data) ? tagRes.data : (tagRes.data || []);
-
+ const categories =
+ catRes.code === 0 && catRes.data ? catRes.data : catRes.data || [];
+ const tags =
+ tagRes.code === 0 && tagRes.data ? tagRes.data : tagRes.data || [];
+
categoryList.value = Array.isArray(categories) ? categories : [];
// 标签数据可能是 { tagId, tagName } 格式,需要提取 tagName
- tagList.value = Array.isArray(tags) ? tags.map(tag => tag.tagName || tag) : [];
+ tagList.value = Array.isArray(tags)
+ ? tags.map((tag) => tag.tagName || tag)
+ : [];
} catch (e: any) {
console.error("加载分类和标签失败:", e);
categoryList.value = [];
@@ -293,14 +303,16 @@ const handleSubmit = () => {
categoryId: Number(formData.categoryId) || 0,
author: formData.author || "",
content: formData.content || "",
- tags: Array.isArray(formData.tags) && formData.tags.length > 0
- ? JSON.stringify(formData.tags)
- : "[]",
+ tags:
+ Array.isArray(formData.tags) && formData.tags.length > 0
+ ? JSON.stringify(formData.tags)
+ : "[]",
status: 1, // 默认已发布
+ share: formData.share, // Added share in params
};
// 调试:打印提交的数据
- console.log("提交的数据:", JSON.stringify(submitData, null, 2));
+ // console.log("提交的数据:", JSON.stringify(submitData, null, 2));
if (isEdit.value && currentId !== "new") {
// 编辑:需要添加 id(后端 JSON tag 是 "id")
@@ -321,7 +333,8 @@ const handleSubmit = () => {
}
} catch (e: any) {
console.error("保存失败:", e);
- const errorMessage = e.response?.data?.message || e.message || "保存失败";
+ const errorMessage =
+ e.response?.data?.message || e.message || "保存失败";
ElMessage.error(errorMessage);
}
} else {
@@ -337,13 +350,33 @@ const handleSubmit = () => {
}
} catch (e: any) {
console.error("创建失败:", e);
- const errorMessage = e.response?.data?.message || e.message || "创建失败";
+ const errorMessage =
+ e.response?.data?.message || e.message || "创建失败";
ElMessage.error(errorMessage);
}
}
});
};
+//删除功能
+const handleDelete = async () => {
+ try {
+ // Assuming deleteKnowledge is imported or defined elsewhere
+ // await deleteKnowledge(id.value as string);
+ ElMessage.success("删除成功");
+ goBack();
+ } catch (e: any) {
+ console.error("删除失败:", e);
+ }
+ ElMessageBox.confirm("确认删除该知识?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ }).then(async () => {
+ await handleDelete();
+ });
+};
+
// 初始化
onMounted(async () => {
// 获取作者信息
@@ -490,7 +523,10 @@ defineExpose({
margin-bottom: 8px;
}
- :deep(p), :deep(li), :deep(span), :deep(div) {
+ :deep(p),
+ :deep(li),
+ :deep(span),
+ :deep(div) {
color: var(--text-color-primary);
margin: 8px 0;
}
@@ -498,7 +534,7 @@ defineExpose({
:deep(a) {
color: var(--primary-color);
text-decoration: none;
-
+
&:hover {
opacity: 0.8;
}
@@ -510,7 +546,7 @@ defineExpose({
border-color: var(--border-color-lighter);
padding: 2px 6px;
border-radius: 3px;
- font-family: 'Courier New', monospace;
+ font-family: "Courier New", monospace;
}
:deep(pre) {
@@ -519,7 +555,7 @@ defineExpose({
padding: 12px;
border-radius: 8px;
overflow-x: auto;
-
+
code {
background-color: transparent;
border: none;
@@ -558,7 +594,8 @@ defineExpose({
margin-bottom: 0px;
}
-:deep(.el-input__wrapper), :deep(.el-textarea__inner) {
+:deep(.el-input__wrapper),
+:deep(.el-textarea__inner) {
background-color: var(--fill-color-blank) !important;
border-color: var(--border-color) !important;
color: var(--text-color-primary) !important;
@@ -568,7 +605,7 @@ defineExpose({
&::placeholder {
color: var(--text-color-placeholder) !important;
}
-
+
&:focus {
border-color: var(--primary-color) !important;
}
diff --git a/pc/src/views/apps/knowledge/index.vue b/pc/src/views/apps/knowledge/index.vue
index bb36c1d..9dce464 100644
--- a/pc/src/views/apps/knowledge/index.vue
+++ b/pc/src/views/apps/knowledge/index.vue
@@ -83,92 +83,176 @@
-