feat(knowledge): 更新知识库列表和详情页面

- 修改知识库列表 API 接口
- 新增知识库详情 API 接口
- 实现知识库详情页面功能
- 优化知识库列表页面样式
- 调整 API 前缀以适应新环境
This commit is contained in:
陈昱达
2025-04-10 18:08:59 +08:00
parent b69efda19c
commit 94779b0142
7 changed files with 166 additions and 130 deletions

View File

@@ -3,4 +3,5 @@ NODE_ENV = 'dev' // 如果是生产环境请记得切换为production
# flag # flag
VUE_APP_FLAG='dev' VUE_APP_FLAG='dev'
VUE_APP_ADMIN='http://39.104.123.254:7195' #VUE_APP_ADMIN='http://39.104.123.254:7195'
VUE_APP_ADMIN='http://192.168.2.62:7196'

View File

@@ -1,13 +1,19 @@
import request from '@/assets/js/utils/request' import request from '@/assets/js/utils/request'
import getUrl from '@/assets/js/utils/get-url' import getUrl from '@/assets/js/utils/get-url'
// 获取知识库列表
export function docManageDataset(data) {
export function docManageDataset(data){
return request({ return request({
url: getUrl('/docManage/dataset/page'), url: getUrl('/datasets/list'),
method: 'post', method: 'post',
data data
}) })
} }
//单一知识库详情
export function getDatasetById(params) {
return request({
url: getUrl('/datasets/query'),
method: 'get',
params: params
})
}

View File

@@ -235,23 +235,26 @@ body .el-collapse-item__wrap {
background: #ecf5ff; background: #ecf5ff;
} }
.el-card{ .el-card {
border-radius: 10px; border-radius: 10px;
} }
.danger {
.danger{ color: #f56c6c !important;
color: #F56C6C!important; & :disabled {
& :disabled{ color: rgba(0, 0, 0, 0.25);
color: rgba(0,0,0,.25);
} }
& :hover{ & :hover {
color: #dd6161; color: #dd6161;
} }
& :focus{ & :focus {
color: #dd6161; color: #dd6161;
} }
& :active{ & :active {
color: #dd6161; color: #dd6161;
} }
} }
.cursor-pointer {
cursor: pointer;
}

View File

@@ -1,6 +1,7 @@
let envInfo = process.env let envInfo = process.env
let [admin] = [envInfo.VUE_APP_ADMIN] // let [admin] = [envInfo.VUE_APP_ADMIN]
let [admin] = ['/api']
export default { export default {
admin, admin
} }

View File

@@ -2,9 +2,13 @@
<div class="container index-container"> <div class="container index-container">
<el-card shadow="hover"> <el-card shadow="hover">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<h3>{{ knowledgeName }}</h3> <div class="flex align-items-c">
<h3 class="mr20" v-if="!editKnowledge">{{ knowledgeName }}</h3>
<el-input class="mr20" v-else v-model="knowledgeName">{{ knowledgeName }}</el-input>
<el-icon class="el-icon-edit cursor-pointer" @click.native="editKnowledge = true" v-if="!editKnowledge"></el-icon>
</div>
<p class="mt10 fs14" style="line-height: 20px">描述{{ knowledgeDesc }}</p> <p class="mt10 fs14" style="line-height: 20px">描述{{ knowledgeDesc }}</p>
<p class="mt10 fs14" style="line-height: 20px">分段模式{{ segmentedMode }}</p> <p class="mt10 fs14" style="line-height: 20px">分段模式{{ segmentedMode | filterSegmentedMode }}</p>
<el-button type="text" class="mt10">修改知识库</el-button> <el-button type="text" class="mt10">修改知识库</el-button>
<el-button type="text" class="mt10">上传知识</el-button> <el-button type="text" class="mt10">上传知识</el-button>
</div> </div>
@@ -15,7 +19,7 @@
</div> </div>
</el-empty> </el-empty>
<div class="table-container"> <div class="table-container" v-else>
<div class=""> <div class="">
<el-form :model="form" label-width="100px"> <el-form :model="form" label-width="100px">
<el-row :gutter="20"> <el-row :gutter="20">
@@ -55,27 +59,27 @@
<r-table :columns="columns" :data="list" :deletion="false"></r-table> <r-table :columns="columns" :data="list" :deletion="false"></r-table>
</div> </div>
</div> </div>
11.
</el-card> </el-card>
</div> </div>
</template> </template>
<script> <script>
import { getDatasetById } from '@/api/generatedApi/index'
export default { export default {
name: 'index', name: 'index',
data() { data() {
return { return {
editKnowledge: false,
form: {}, form: {},
//知识库名称 //知识库名称
knowledgeName: '监管', knowledgeName: '监管',
knowledgeDesc: '监管', knowledgeDesc: '监管',
segmentedMode: '分段模式', segmentedMode: '分段模式',
list: [{}] list: []
} }
}, },
props: {}, props: {},
watch: {}, watch: {},
components: {}, components: {},
filters: {},
methods: { methods: {
// 跳转 // 跳转
handleAddKnowledge() { handleAddKnowledge() {
@@ -90,10 +94,34 @@ export default {
* @created_date 2025/4/9 * @created_date 2025/4/9
* @description * @description
**/ **/
getKnowledgeDetail() {} getKnowledgeDetail() {
let { datasetId } = this.$route.query
getDatasetById({ id: datasetId }).then(res => {
this.knowledgeName = res.content.content.name
this.knowledgeDesc = res.content.content.description
this.segmentedMode = res.content.content.segmentedMode
console.log(res)
})
}
},
filters: {
filterSegmentedMode(val) {
switch (val) {
case 0:
return '传统分段模式'
case 1:
return ' Q&A分段模式'
default:
return ''
}
}
}, },
created() {}, created() {},
mounted() {}, mounted() {
this.getKnowledgeDetail()
},
computed: { computed: {
columns() { columns() {
return [ return [

View File

@@ -1,73 +1,72 @@
<template> <template>
<div id='index-container' class='container index-container'> <div id="index-container" class="container index-container">
<el-card shadow="hover"> <el-card shadow="hover">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<h3>知识库列表</h3> <h3>知识库列表</h3>
<p class='mt10 fs14' style='line-height: 20px'>易商数智知识库平台旨在为用户提供更便捷更灵敏更全面的知识存储和操作平台用户可以通过创建不同的知识库完成对系统内知识的细分和储备</p> <p class="mt10 fs14" style="line-height: 20px">
<p class='mt10 fs14' style='line-height: 20px'>同时也可以通过修改和删除操作对系统内知识体系进行修正和优化</p> 易商数智知识库平台旨在为用户提供更便捷更灵敏更全面的知识存储和操作平台用户可以通过创建不同的知识库完成对系统内知识的细分和储备
<el-button type='text' disabled class='mt10'>操作文档</el-button> </p>
<p class="mt10 fs14" style="line-height: 20px">同时也可以通过修改和删除操作对系统内知识体系进行修正和优化</p>
<el-button type="text" disabled class="mt10">操作文档</el-button>
</div> </div>
<div class="card-body">
<div class='card-body'>
<el-row> <el-row>
<el-col :span='8'> <el-col :span="8">
<el-input placeholder='输入知识库名称' v-model='nameLike'> <el-input placeholder="输入知识库名称" v-model="nameLike">
<el-button slot="append" icon="el-icon-search" @click='getList'></el-button> <el-button slot="append" icon="el-icon-search" @click="getList"></el-button>
</el-input> </el-input>
</el-col> </el-col>
</el-row> </el-row>
<div class='ledge-list mt20'> <div class="ledge-list mt20">
<el-card shadow="hover" class='item dashed' > <el-card shadow="hover" class="item dashed">
<div @click='createdKnowLedge()'> <div @click="createdKnowLedge()">
新增知识库 新增知识库
</div> </div>
</el-card> </el-card>
<el-card v-for='(item,index) in datasetList' class='item' shadow="hover" :key='index'> <el-card v-for="(item, index) in datasetList" class="item" shadow="hover" :key="index">
<div class='item-body flex '> <div class="item-body flex ">
<div > <div>
<div class='folder-content mr20 '> <div class="folder-content mr20 ">
<svg-icon iconClass='folder' className='folder' ></svg-icon> <svg-icon iconClass="folder" className="folder"></svg-icon>
</div> </div>
</div> </div>
<div> <div>
<h4>{{item.name}}</h4> <h4>{{ item.name }}</h4>
<p class='fs13 mt20 gray'>{{item.description}}</p> <p class="fs13 mt20 gray">{{ item.description }}</p>
</div> </div>
</div> </div>
<div class='item-bottom mt20'> <div class="item-bottom mt20">
<el-button type='text' class='fs14' @click='knowLedgeDetail(item)'>查看详情</el-button> <el-button type="text" class="fs14" @click="knowLedgeDetail(item)">查看详情</el-button>
<el-button type='text' class='fs14'>修改</el-button> <el-button type="text" class="fs14">修改</el-button>
<el-button type='text' class='fs14 danger'>删除</el-button> <el-button type="text" class="fs14 danger">删除</el-button>
</div> </div>
</el-card> </el-card>
</div> </div>
</div> </div>
</el-card> </el-card>
</div> </div>
</template> </template>
<script> <script>
import {docManageDataset} from '@/api/generatedApi/index' import { docManageDataset } from '@/api/generatedApi/index'
import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue' import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue'
export default { export default {
name: 'index', name: 'index',
data() { data() {
return { return {
datasetList:[], datasetList: [],
nameLike:'', nameLike: '',
drawer:false, drawer: false,
direction:'ltr', direction: 'ltr',
size:'50%', size: '50%',
withHeader:false, withHeader: false,
drawerTitle:'创建知识库', drawerTitle: '创建知识库',
knowledgeId:'', knowledgeId: '',
knowledgeForm:{ knowledgeForm: {
name:'knowledgeForm', name: 'knowledgeForm',
component:knowledgeForm component: knowledgeForm
} }
} }
}, },
@@ -78,44 +77,37 @@ export default {
}, },
filters: {}, filters: {},
methods: { methods: {
getList() {
getList (){ docManageDataset({ nameLike: this.nameLike }).then(res => {
docManageDataset({nameLike:this.nameLike}).then(res=>{ this.datasetList = res.content.content
console.log(res)
this.datasetList = res.content.content.list
}) })
}, },
createdKnowLedge() { createdKnowLedge() {
this.$router.push({ this.$router.push({
path:'/knowledge/knowledge-create', path: '/knowledge/knowledge-create',
query:{ query: {
datasetId:'' datasetId: ''
} }
}) })
}, },
knowLedgeDetail(item){ knowLedgeDetail(item) {
this.$router.push({ this.$router.push({
path:'/knowledge/detail', path: '/knowledge/detail',
query:{ query: {
datasetId:item.id datasetId: item.id
} }
}) })
}, }
},
created() {
}, },
created() {},
mounted() { mounted() {
this.getList() this.getList()
}, },
computed: { computed: {}
}
} }
</script> </script>
<style scoped lang='scss'> <style scoped lang="scss">
.ledge-list{ .ledge-list {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
//justify-content: space-between; //justify-content: space-between;
@@ -127,79 +119,75 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
margin-left: 0; // 移除左右内边距 margin-left: 0; // 移除左右内边距
margin-right: 25px; margin-right: 25px;
/deep/ .el-card__body { /deep/ .el-card__body {
padding:0; padding: 0;
& .item-body{ & .item-body {
padding:0 20px; padding: 0 20px;
display: flex; display: flex;
height: 119px; height: 119px;
margin-top:20px margin-top: 20px;
} }
& .item-bottom{ & .item-bottom {
//padding:0 20px; //padding:0 20px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
background: #F7F9FA; background: #f7f9fa;
border-top: 1px solid #EFF0F1; border-top: 1px solid #eff0f1;
& .el-button{ & .el-button {
color:#8D8F8F; color: #8d8f8f;
width:33%; width: 33%;
text-align: center; text-align: center;
&:nth-child(2){ &:nth-child(2) {
position: relative; position: relative;
&::before{ &::before {
position: absolute; position: absolute;
content: ''; content: '';
left:0; left: 0;
height:100%; height: 100%;
width:1px; width: 1px;
background: #EFF0F1; background: #eff0f1;
top:0 top: 0;
} }
&::after{ &::after {
position: absolute; position: absolute;
content: ''; content: '';
right:0; right: 0;
height:100%; height: 100%;
width:1px; width: 1px;
background: #EFF0F1; background: #eff0f1;
top:0 top: 0;
} }
} }
} }
} }
} }
} }
& .item:nth-child(4n) { & .item:nth-child(4n) {
margin-right:0; margin-right: 0;
} }
& .dashed{ & .dashed {
border: 1px dashed #dedede; border: 1px dashed #dedede;
cursor: pointer; cursor: pointer;
text-align: center; text-align: center;
line-height: 200px; line-height: 200px;
color: #6666; color: #6666;
&:hover{ &:hover {
color: #409EFF; color: #409eff;
border: 1px dashed #409EFF; border: 1px dashed #409eff;
} }
} }
& .folder-content {
& .folder-content{ background-color: rgba(245, 248, 255, 1);
background-color: rgba(245, 248, 255,1);
text-align: center; text-align: center;
border-radius: 8px; border-radius: 8px;
padding:10px; padding: 10px;
& .folder{ & .folder {
width: 40px; width: 40px;
height:40px; height: 40px;
} }
} }
} }
</style> </style>

View File

@@ -32,6 +32,15 @@ module.exports = {
overlay: { overlay: {
warnings: false, warnings: false,
errors: true errors: true
},
proxy: {
'/api': {
target: process.env.VUE_APP_ADMIN,
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
} }
}, },
configureWebpack: { configureWebpack: {