From 9b02272ea9223f8ecab4afacbb5ab064f47fb5ec Mon Sep 17 00:00:00 2001 From: AaronWu <2463371514@qq.com> Date: Thu, 10 Apr 2025 17:01:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9F=A5=E8=AF=86=E5=BA=93=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=A8=A1=E5=9D=97=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/issue/index.ts | 11 + src/api/knowledgeBase/index.ts | 22 +- src/api/knowledgeBase/model.d.ts | 6 + src/locales/lang/en-US/routes/question.ts | 1 + src/locales/lang/zh-CN/routes/question.ts | 1 + src/router/constant.ts | 2 + src/router/outsideLayout.ts | 13 +- src/router/staticModules/question.ts | 11 + src/views/knowledgeBase/index.vue | 179 +++++++ src/views/question/issue/columns.tsx | 3 + src/views/question/issue/detail.vue | 74 +-- src/views/question/issue/formSchemas.tsx | 1 + src/views/question/issue/index.vue | 50 +- src/views/question/knowledge/columns.tsx | 62 +++ src/views/question/knowledge/data.ts | 32 ++ src/views/question/knowledge/detail.vue | 156 ++++++ src/views/question/knowledge/formSchemas.tsx | 83 +++ src/views/question/knowledge/index.vue | 520 +++++++++++++++++++ 18 files changed, 1176 insertions(+), 51 deletions(-) create mode 100644 src/views/knowledgeBase/index.vue create mode 100644 src/views/question/knowledge/columns.tsx create mode 100644 src/views/question/knowledge/data.ts create mode 100644 src/views/question/knowledge/detail.vue create mode 100644 src/views/question/knowledge/formSchemas.tsx create mode 100644 src/views/question/knowledge/index.vue diff --git a/src/api/issue/index.ts b/src/api/issue/index.ts index 145f81e..3161cf3 100644 --- a/src/api/issue/index.ts +++ b/src/api/issue/index.ts @@ -94,6 +94,17 @@ export function findOneById(params: { id: string }) { }); } +/** + * @description 加入知识库 + */ +export function addToknowledge(params: { id: string }) { + return request({ + url: `question/addKnowledge`, + method: 'get', + params, + }); +} + /** * @description 删除单条 ?id=${data.id} */ diff --git a/src/api/knowledgeBase/index.ts b/src/api/knowledgeBase/index.ts index bcf3603..9be9529 100644 --- a/src/api/knowledgeBase/index.ts +++ b/src/api/knowledgeBase/index.ts @@ -10,15 +10,15 @@ import type { BaseResponse } from '@/utils/request'; import { request } from '@/utils/request'; /** * @description 查询列表 - * @param {SearchListParams} data + * @param {SearchListParams} params * @returns */ -export function fetchKnowledgeBaseList(data: API.SearchListParams) { +export function fetchKnowledgeBaseList(params: API.SearchListParams) { return request>( { - url: 'question/list', - method: 'post', - data, + url: 'knowledge/list', + method: 'get', + params, }, { isGetDataDirectly: false, @@ -34,7 +34,7 @@ export function fetchKnowledgeBaseList(data: API.SearchListParams) { export function fetchKnowledgeBasePageList(data: API.SearchPageListParams) { return request>( { - url: 'question/list', + url: 'knowledge/page', method: 'post', data, }, @@ -51,7 +51,7 @@ export function fetchKnowledgeBasePageList(data: API.SearchPageListParams) { */ export function createKnowledgeBase(data: API.KnowledgeBaseType) { return request({ - url: 'question/create', + url: 'knowledge/create', method: 'post', data, }); @@ -64,7 +64,7 @@ export function createKnowledgeBase(data: API.KnowledgeBaseType) { */ export function updateKnowledgeBase(data: API.KnowledgeBaseType) { return request({ - url: 'question/update', + url: 'knowledge/update', method: 'post', data, }); @@ -75,7 +75,7 @@ export function updateKnowledgeBase(data: API.KnowledgeBaseType) { */ export function findOneById(params: { id: string }) { return request({ - url: `question/getById`, + url: `knowledge/getById`, method: 'get', params, }); @@ -86,7 +86,7 @@ export function findOneById(params: { id: string }) { */ export function deleteKnowledgeBaseById(params: API.DeleteKnowledgeBaseParams) { return request({ - url: `question/delById`, + url: `knowledge/delById`, method: 'post', params, }); @@ -97,7 +97,7 @@ export function deleteKnowledgeBaseById(params: API.DeleteKnowledgeBaseParams) { */ export function deleteBatchKnowledgeBaseById(data: API.DeleteBatchKnowledgeBaseParams) { return request({ - url: `question/delete`, + url: `knowledge/delete`, method: 'delete', data, }); diff --git a/src/api/knowledgeBase/model.d.ts b/src/api/knowledgeBase/model.d.ts index ba3bf41..b46c531 100644 --- a/src/api/knowledgeBase/model.d.ts +++ b/src/api/knowledgeBase/model.d.ts @@ -24,6 +24,9 @@ declare namespace API { updateUserid?: number; // 更新人ID version?: string; // 版本 fileList?: any[]; // 附件列表 + tags?: string[]; // 标签 + istop?: number; // 是否置顶 + orderNO?: number; // 排序 }; type CreateKnowledgeBaseParams = { @@ -47,6 +50,9 @@ declare namespace API { updateUserid?: number; // 更新人ID version?: string; // 版本 fileList?: any[]; // 附件列表 + tags?: string[]; // 标签 + istop?: number; // 是否置顶 + orderNO?: number; // 排序 }; type DeleteKnowledgeBaseParams = { diff --git a/src/locales/lang/en-US/routes/question.ts b/src/locales/lang/en-US/routes/question.ts index 5902622..b9a54f8 100644 --- a/src/locales/lang/en-US/routes/question.ts +++ b/src/locales/lang/en-US/routes/question.ts @@ -10,4 +10,5 @@ export default { question: 'question', issue: 'Issue', issueDetail: 'Issue Detail', + knowledge: 'Knowledge Base', }; diff --git a/src/locales/lang/zh-CN/routes/question.ts b/src/locales/lang/zh-CN/routes/question.ts index 7f4b0f5..a97634b 100644 --- a/src/locales/lang/zh-CN/routes/question.ts +++ b/src/locales/lang/zh-CN/routes/question.ts @@ -10,4 +10,5 @@ export default { question: '问题管理', issue: '工单管理', issueDetail: '工单详情', + knowledge: '知识库', }; diff --git a/src/router/constant.ts b/src/router/constant.ts index 916c788..7a24a0b 100644 --- a/src/router/constant.ts +++ b/src/router/constant.ts @@ -1,5 +1,7 @@ export const LOGIN_NAME = 'Login'; +export const KNOWLEDGE_NAME = 'Knowledge'; + export const REDIRECT_NAME = 'Redirect'; export const PARENT_LAYOUT_NAME = 'ParentLayout'; diff --git a/src/router/outsideLayout.ts b/src/router/outsideLayout.ts index fb733e4..a380e04 100644 --- a/src/router/outsideLayout.ts +++ b/src/router/outsideLayout.ts @@ -1,5 +1,5 @@ import type { RouteRecordRaw } from 'vue-router'; -import { LOGIN_NAME } from '@/router/constant'; +import { LOGIN_NAME, KNOWLEDGE_NAME } from '@/router/constant'; /** * layout布局之外的路由 @@ -13,4 +13,13 @@ export const LoginRoute: RouteRecordRaw = { }, }; -export default [LoginRoute]; +export const KnowledgeRoute: RouteRecordRaw = { + path: '/knowledge', + name: KNOWLEDGE_NAME, + component: () => import(/* webpackChunkName: "login" */ '@/views/knowledgeBase/index.vue'), + meta: { + title: '知识库', + }, +}; + +export default [LoginRoute, KnowledgeRoute]; diff --git a/src/router/staticModules/question.ts b/src/router/staticModules/question.ts index 550a35c..ed6bf28 100644 --- a/src/router/staticModules/question.ts +++ b/src/router/staticModules/question.ts @@ -37,6 +37,17 @@ const routes: Array = [ component: () => import(/* webpackChunkName: "question-issue" */ '@/views/question/issue/detail.vue'), }, + { + path: 'knowledge', + name: `${moduleName}-knowledge`, + meta: { + title: t('routes.question.knowledge'), + icon: 'icon-fenxiang', + keepAlive: true, + }, + component: () => + import(/* webpackChunkName: "question-knowledge" */ '@/views/question/knowledge/index.vue'), + }, ], }, ]; diff --git a/src/views/knowledgeBase/index.vue b/src/views/knowledgeBase/index.vue new file mode 100644 index 0000000..3b2d8e9 --- /dev/null +++ b/src/views/knowledgeBase/index.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/question/issue/columns.tsx b/src/views/question/issue/columns.tsx index ab26c88..5148df8 100644 --- a/src/views/question/issue/columns.tsx +++ b/src/views/question/issue/columns.tsx @@ -128,6 +128,9 @@ export const baseColumns: TableColumnItem[] = [ defaultValue: '', required: false, component: 'RangePicker', + componentProps: { + valueFormat: 'YYYY-MM-DD', + }, }, }, // state 问题状态 diff --git a/src/views/question/issue/detail.vue b/src/views/question/issue/detail.vue index a8c763f..3525665 100644 --- a/src/views/question/issue/detail.vue +++ b/src/views/question/issue/detail.vue @@ -44,7 +44,19 @@ - + + + @@ -52,7 +64,7 @@ v-for="(item, index) in historyList" :key="index" :title="item.title" - :description="item.message" + :description="item.remark" /> @@ -62,6 +74,8 @@ - diff --git a/src/views/question/knowledge/formSchemas.tsx b/src/views/question/knowledge/formSchemas.tsx new file mode 100644 index 0000000..ed80240 --- /dev/null +++ b/src/views/question/knowledge/formSchemas.tsx @@ -0,0 +1,83 @@ +import type { FormSchema } from '@/components/core/schema-form/'; +import { TableListItem } from './columns'; +import { commonUpload } from '@/api/upload'; +import { message, Button } from 'ant-design-vue'; +import { getFileExtension } from '@/utils/fileUtils'; +import { UploadOutlined } from '@ant-design/icons-vue'; +import { stateTypeList } from './data'; +import { DictEnum } from '@/enums/dictEnum'; +import { getDictionaryByTypeName } from '@/utils/dict'; +import { fetchProdList, fetchVersionPageList } from '@/api/prodVersion'; +const questionTypeList = await getDictionaryByTypeName(DictEnum.QUESTION_TYPE); +// 编辑页字段 +export const getEditFormSchema: ( + row?: Partial, + isDetail?: boolean, +) => FormSchema[] = (record = {}, isDetail = false) => { + console.log('questionTypeList: ', questionTypeList); + + return [ + { + field: 'title', + component: 'Input', + componentProps: { + showCount: true, + maxlength: 150, + }, + label: '问题标题', + colProps: { + span: 12, + }, + rules: [{ required: true }], + }, + { + field: 'versionId', + component: 'Select', + componentProps: { + options: [], + }, + label: '版本', + colProps: { + span: 12, + }, + }, + { + field: 'description', + component: 'InputTextArea', + componentProps: { + rows: 4, + placeholder: '请输入问题描述', + showCount: true, + maxlength: 150, + }, + label: '问题描述', + colProps: { + span: 24, + }, + rules: [{ required: true }], + }, + { + label: '解决方案', + field: 'solution', + colProps: { + span: 24, + }, + // vShow: !isDetail, + // rules: [{ required: true, type: 'array' }], + slot: 'solution', + }, + ] as any; +}; + +export const getFlowFormSchema: (row?: Partial) => FormSchema[] = (record = {}) => { + return [ + { + field: 'remark', + component: 'InputTextArea', + label: '文字补充内容', + colProps: { + span: 24, + }, + }, + ]; +}; diff --git a/src/views/question/knowledge/index.vue b/src/views/question/knowledge/index.vue new file mode 100644 index 0000000..53a47ba --- /dev/null +++ b/src/views/question/knowledge/index.vue @@ -0,0 +1,520 @@ + + + + + +