mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-07 01:46:48 +08:00
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
@@ -5,4 +5,4 @@
|
||||
"printWidth": 80,
|
||||
"endOfLine": "auto",
|
||||
"singleAttributePerLine": true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +49,18 @@ export function changeUserStatus(params) {
|
||||
params: params
|
||||
})
|
||||
}
|
||||
// 重置密码
|
||||
// 修改密码
|
||||
export function updatePassword(data) {
|
||||
return request({
|
||||
url: getUrl(`/sysUser/updatePassword`),
|
||||
url: getUrl(`/sysUserEx/updatePassword`),
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
// 重置密码
|
||||
export function resetPassword(data) {
|
||||
return request({
|
||||
url: getUrl(`/sysUserEx/resetPassword`),
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
|
||||
@@ -16,28 +16,33 @@
|
||||
首页
|
||||
</el-dropdown-item>
|
||||
</router-link>
|
||||
<a target="_blank" href="http://www.ebiz-interactive.com/">
|
||||
<el-dropdown-item>关于</el-dropdown-item>
|
||||
</a>
|
||||
<el-dropdown-item divided>
|
||||
<span style="display:block;" @click="resetPassword">修改密码</span>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided>
|
||||
<span style="display:block;" @click="logout">退出</span>
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
<reset-password-dialog
|
||||
:visible.sync="resetPasswordVisible"
|
||||
></reset-password-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import url from '@/assets/images/active.png'
|
||||
import ResetPasswordDialog from '@/views/system/user/components/ResetPasswordDialog.vue'
|
||||
|
||||
export default {
|
||||
components: {},
|
||||
components: { ResetPasswordDialog },
|
||||
data() {
|
||||
return {
|
||||
circleUrl: url,
|
||||
size: 40
|
||||
size: 40,
|
||||
resetPasswordVisible: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -56,6 +61,9 @@ export default {
|
||||
await this.$store.dispatch('user/logout')
|
||||
this.$router.push(`/login?redirect=${this.$route.fullPath}`)
|
||||
})
|
||||
},
|
||||
resetPassword() {
|
||||
this.resetPasswordVisible = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<template>
|
||||
<div class="app-wrapper">
|
||||
<div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
|
||||
<div
|
||||
v-if="device === 'mobile' && sidebar.opened"
|
||||
class="drawer-bg"
|
||||
@click="handleClickOutside"
|
||||
/>
|
||||
<sidebar class="sidebar-container" />
|
||||
<div class="main-container">
|
||||
<app-main />
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<script>
|
||||
import { agentList, agentDelete, agentDetail } from '@/api/intelligent-agent/list'
|
||||
import {
|
||||
agentList,
|
||||
agentDelete,
|
||||
agentDetail
|
||||
} from '@/api/intelligent-agent/list'
|
||||
import Info from '@/views/intelligent-agent/components/info'
|
||||
|
||||
export default {
|
||||
@@ -83,14 +87,25 @@ export default {
|
||||
<!-- header 头部 -->
|
||||
<nav v-if="true">
|
||||
<div class="flex align-items-c justify-content-b">
|
||||
<el-input placeholder="输入智能体名称" clearable v-model="searchOption.nameLike" size="medium" class="underBorder"
|
||||
@keydown.enter.native="searchOption.handleSearch">
|
||||
<el-input
|
||||
placeholder="输入智能体名称"
|
||||
clearable
|
||||
v-model="searchOption.nameLike"
|
||||
size="medium"
|
||||
class="underBorder"
|
||||
@keydown.enter.native="searchOption.handleSearch"
|
||||
>
|
||||
<template slot="prepend">
|
||||
<el-button slot="append" icon="el-icon-search"></el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
<el-button size="medium" class="line-button pv8 ph10" icon="el-icon-plus"
|
||||
@click="createdIntelligentAgent()">创建智能体</el-button>
|
||||
<el-button
|
||||
size="medium"
|
||||
class="line-button pv8 ph10"
|
||||
icon="el-icon-plus"
|
||||
@click="createdIntelligentAgent()"
|
||||
>创建智能体</el-button
|
||||
>
|
||||
</div>
|
||||
<h3>智能体</h3>
|
||||
</nav>
|
||||
@@ -98,10 +113,20 @@ export default {
|
||||
<!-- 智能体的列表 -->
|
||||
<article>
|
||||
<el-row class="agent-item" :gutter="10">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" v-for="listItem in list" :key="listItem.id">
|
||||
<el-col
|
||||
:xs="24"
|
||||
:sm="12"
|
||||
:md="8"
|
||||
:lg="6"
|
||||
:xl="4"
|
||||
v-for="listItem in list"
|
||||
:key="listItem.id"
|
||||
>
|
||||
<el-card>
|
||||
<section class="agent-item__info">
|
||||
<el-avatar shape="square" :src="listItem.url">{{ listItem.name[0] }}</el-avatar>
|
||||
<el-avatar shape="square" :src="listItem.url">{{
|
||||
listItem.name[0]
|
||||
}}</el-avatar>
|
||||
<span>
|
||||
<h4>{{ listItem.name }}</h4>
|
||||
<p class="dataset-desc">{{ listItem.description }}</p>
|
||||
@@ -109,10 +134,21 @@ export default {
|
||||
</section>
|
||||
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button class="default render-button" size="small" icon="el-icon-delete"
|
||||
@click.stop="handleDeleteAgent(listItem.id)">删除</el-button>
|
||||
<el-button class="render-button line-button" size="small" icon="el-icon-edit"
|
||||
@click.stop="handleEditAgent(listItem.id)" type="primary">修改</el-button>
|
||||
<el-button
|
||||
class="default render-button"
|
||||
size="small"
|
||||
icon="el-icon-delete"
|
||||
@click.stop="handleDeleteAgent(listItem.id)"
|
||||
>删除</el-button
|
||||
>
|
||||
<el-button
|
||||
class="render-button line-button"
|
||||
size="small"
|
||||
icon="el-icon-edit"
|
||||
@click.stop="handleEditAgent(listItem.id)"
|
||||
type="primary"
|
||||
>修改</el-button
|
||||
>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-col>
|
||||
@@ -120,7 +156,11 @@ export default {
|
||||
</article>
|
||||
|
||||
<!-- dialog 内容。 现在主要是编辑 -->
|
||||
<el-dialog :visible.sync="dialog.visible" :title="dialog.title" :close-on-click-modal="false">
|
||||
<el-dialog
|
||||
:visible.sync="dialog.visible"
|
||||
:title="dialog.title"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<component :is="dialog.component" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
@@ -136,17 +176,17 @@ export default {
|
||||
}
|
||||
|
||||
.agent-item {
|
||||
&>.el-col {
|
||||
& > .el-col {
|
||||
margin: 7px auto;
|
||||
}
|
||||
|
||||
&__info {
|
||||
display: flex;
|
||||
|
||||
&>span:nth-child(2) {
|
||||
& > span:nth-child(2) {
|
||||
margin-left: 15px;
|
||||
|
||||
&>p {
|
||||
& > p {
|
||||
margin-top: 10px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ export default {
|
||||
paramsConfig: {
|
||||
visible: false,
|
||||
searchMode: 'vector', // 默认选择向量检索
|
||||
similarity: 0.600, // 默认相似度
|
||||
similarity: 0.6, // 默认相似度
|
||||
topK: 5 // 默认引用分段数
|
||||
},
|
||||
inputMessage: '',
|
||||
@@ -26,7 +26,8 @@ export default {
|
||||
{
|
||||
id: 1,
|
||||
title: '-',
|
||||
content: '黄金可以作为投资者的资产配置:(1)把黄金作为储备资产的投资者;(2)被保险人投资在黄金的抵押品或非标资产债券的担保;(3)或者是投资者的避险资产。',
|
||||
content:
|
||||
'黄金可以作为投资者的资产配置:(1)把黄金作为储备资产的投资者;(2)被保险人投资在黄金的抵押品或非标资产债券的担保;(3)或者是投资者的避险资产。',
|
||||
score: 0.709,
|
||||
file: '北京人寿的准备金(样表版)_有关项.pdf'
|
||||
},
|
||||
@@ -40,7 +41,8 @@ export default {
|
||||
{
|
||||
id: 3,
|
||||
title: '北京人寿承诺服务各项指标',
|
||||
content: '第二代保人寿保险营业执照人及行政管理人天津后勤保障处;5.第三代保人寿保险公司承诺为公司客户方案服力及运营提供客户服务力;6...',
|
||||
content:
|
||||
'第二代保人寿保险营业执照人及行政管理人天津后勤保障处;5.第三代保人寿保险公司承诺为公司客户方案服力及运营提供客户服务力;6...',
|
||||
score: 0.703,
|
||||
file: '北京人寿承诺服务各项指标(有效版)102026.pdf'
|
||||
},
|
||||
@@ -48,7 +50,7 @@ export default {
|
||||
id: 4,
|
||||
title: '-',
|
||||
content: '# 黄金的分:年金',
|
||||
score: 0.700,
|
||||
score: 0.7,
|
||||
file: 'loma.md'
|
||||
},
|
||||
{
|
||||
@@ -75,13 +77,13 @@ export default {
|
||||
content: this.inputMessage,
|
||||
time: new Date()
|
||||
})
|
||||
|
||||
|
||||
// 清空输入框
|
||||
this.inputMessage = ''
|
||||
|
||||
|
||||
// 模拟加载状态
|
||||
this.loading = true
|
||||
|
||||
|
||||
// 模拟API请求延迟
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
@@ -90,12 +92,15 @@ export default {
|
||||
},
|
||||
getTableData() {
|
||||
// 根据之前的记忆,修复getTableData函数,确保正确返回Promise
|
||||
return this.$api.getDocByPage(this.queryParams).then(res => {
|
||||
return res.data
|
||||
}).catch(err => {
|
||||
console.error('获取数据失败:', err)
|
||||
return []
|
||||
})
|
||||
return this.$api
|
||||
.getDocByPage(this.queryParams)
|
||||
.then(res => {
|
||||
return res.data
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('获取数据失败:', err)
|
||||
return []
|
||||
})
|
||||
},
|
||||
formatScore(score) {
|
||||
return score.toFixed(3)
|
||||
@@ -106,7 +111,6 @@ export default {
|
||||
|
||||
<template>
|
||||
<div class="hit-test-container">
|
||||
|
||||
<!-- 中间内容区域 -->
|
||||
<div class="content-area">
|
||||
<div class="empty-state" v-if="messages.length === 0">
|
||||
@@ -114,7 +118,12 @@ export default {
|
||||
<p>这里会显示命中测试的记录</p>
|
||||
</div>
|
||||
<div class="messages" v-else>
|
||||
<div v-for="message in messages" :key="message.id" class="message-item" :class="message.type">
|
||||
<div
|
||||
v-for="message in messages"
|
||||
:key="message.id"
|
||||
class="message-item"
|
||||
:class="message.type"
|
||||
>
|
||||
<!-- 问题消息 -->
|
||||
<div v-if="message.type === 'question'" class="question-message">
|
||||
<div class="message-header">
|
||||
@@ -125,7 +134,7 @@ export default {
|
||||
</div>
|
||||
<div class="message-content">{{ message.content }}</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 回答消息 -->
|
||||
<div v-else-if="message.type === 'answer'" class="answer-message">
|
||||
<div class="message-header">
|
||||
@@ -135,14 +144,23 @@ export default {
|
||||
</div>
|
||||
</div>
|
||||
<div class="message-content">{{ message.content }}</div>
|
||||
|
||||
|
||||
<!-- 引用内容 -->
|
||||
<div class="references" v-if="message.references && message.references.length">
|
||||
<div v-for="(ref, index) in message.references" :key="index" class="reference-item">
|
||||
<div
|
||||
class="references"
|
||||
v-if="message.references && message.references.length"
|
||||
>
|
||||
<div
|
||||
v-for="(ref, index) in message.references"
|
||||
:key="index"
|
||||
class="reference-item"
|
||||
>
|
||||
<div class="reference-header">
|
||||
<div class="reference-index">{{ index + 1 }}</div>
|
||||
<div class="reference-title">{{ ref.title }}</div>
|
||||
<div class="reference-score">{{ formatScore(ref.score) }}</div>
|
||||
<div class="reference-score">
|
||||
{{ formatScore(ref.score) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="reference-content">{{ ref.content }}</div>
|
||||
<div class="reference-footer">
|
||||
@@ -154,12 +172,15 @@ export default {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 加载状态 -->
|
||||
<div v-if="loading" class="loading-message">
|
||||
<el-skeleton style="width: 100%" animated>
|
||||
<template slot="template">
|
||||
<el-skeleton-item variant="p" style="width: 100%; height: 60px;" />
|
||||
<el-skeleton-item
|
||||
variant="p"
|
||||
style="width: 100%; height: 60px;"
|
||||
/>
|
||||
<el-skeleton-item variant="p" style="width: 90%; height: 20px;" />
|
||||
<el-skeleton-item variant="p" style="width: 80%; height: 20px;" />
|
||||
</template>
|
||||
@@ -175,48 +196,102 @@ export default {
|
||||
<div class="search-params-container">
|
||||
<h3>检索模式</h3>
|
||||
|
||||
<el-radio-group v-model="paramsConfig.searchMode" class="search-mode-options">
|
||||
<div class="search-mode-option" :class="{ active: paramsConfig.searchMode === 'vector' }">
|
||||
<el-radio v-model="paramsConfig.searchMode" label="vector">向量检索</el-radio>
|
||||
<p class="option-desc">向量检索是一种基于向量相似度的检索方式,适用于知识库中的大数据量场景。</p>
|
||||
<el-radio-group
|
||||
v-model="paramsConfig.searchMode"
|
||||
class="search-mode-options"
|
||||
>
|
||||
<div
|
||||
class="search-mode-option"
|
||||
:class="{ active: paramsConfig.searchMode === 'vector' }"
|
||||
>
|
||||
<el-radio v-model="paramsConfig.searchMode" label="vector"
|
||||
>向量检索</el-radio
|
||||
>
|
||||
<p class="option-desc">
|
||||
向量检索是一种基于向量相似度的检索方式,适用于知识库中的大数据量场景。
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="search-mode-option" :class="{ active: paramsConfig.searchMode === 'fulltext' }">
|
||||
<el-radio v-model="paramsConfig.searchMode" label="fulltext">全文检索</el-radio>
|
||||
<p class="option-desc">全文检索是一种基于文本相似度的检索方式,适用于知识库中的小数据量场景。</p>
|
||||
<div
|
||||
class="search-mode-option"
|
||||
:class="{ active: paramsConfig.searchMode === 'fulltext' }"
|
||||
>
|
||||
<el-radio v-model="paramsConfig.searchMode" label="fulltext"
|
||||
>全文检索</el-radio
|
||||
>
|
||||
<p class="option-desc">
|
||||
全文检索是一种基于文本相似度的检索方式,适用于知识库中的小数据量场景。
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="search-mode-option" :class="{ active: paramsConfig.searchMode === 'hybrid' }">
|
||||
<el-radio v-model="paramsConfig.searchMode" label="hybrid">混合检索</el-radio>
|
||||
<p class="option-desc">混合检索是一种基于向量和文本相似度的检索方式,适用于知识库中的中等数据量场景。</p>
|
||||
<div
|
||||
class="search-mode-option"
|
||||
:class="{ active: paramsConfig.searchMode === 'hybrid' }"
|
||||
>
|
||||
<el-radio v-model="paramsConfig.searchMode" label="hybrid"
|
||||
>混合检索</el-radio
|
||||
>
|
||||
<p class="option-desc">
|
||||
混合检索是一种基于向量和文本相似度的检索方式,适用于知识库中的中等数据量场景。
|
||||
</p>
|
||||
</div>
|
||||
</el-radio-group>
|
||||
|
||||
<div class="params-settings">
|
||||
<div class="param-item">
|
||||
<span class="param-label">相似度高于</span>
|
||||
<el-input-number v-model="paramsConfig.similarity" :precision="3" :step="0.001" :min="0" :max="1"
|
||||
size="small" controls-position="right"></el-input-number>
|
||||
<el-input-number
|
||||
v-model="paramsConfig.similarity"
|
||||
:precision="3"
|
||||
:step="0.001"
|
||||
:min="0"
|
||||
:max="1"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
|
||||
<div class="param-item">
|
||||
<span class="param-label">引用分段数 TOP</span>
|
||||
<el-input-number v-model="paramsConfig.topK" :min="1" :max="20" size="small"
|
||||
controls-position="right"></el-input-number>
|
||||
<el-input-number
|
||||
v-model="paramsConfig.topK"
|
||||
:min="1"
|
||||
:max="20"
|
||||
size="small"
|
||||
controls-position="right"
|
||||
></el-input-number>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="action-buttons">
|
||||
<el-button size="small" @click="paramsConfig.visible = false">取消</el-button>
|
||||
<el-button type="primary" size="small" @click="paramsConfig.visible = false">确定</el-button>
|
||||
<el-button size="small" @click="paramsConfig.visible = false"
|
||||
>取消</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="paramsConfig.visible = false"
|
||||
>确定</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<el-button icon="el-icon-setting" size="small" slot="reference">参数设置</el-button>
|
||||
<el-button icon="el-icon-setting" size="small" slot="reference"
|
||||
>参数设置</el-button
|
||||
>
|
||||
</el-popover>
|
||||
|
||||
<el-input v-model="inputMessage" placeholder="请输入" class="message-input" @keyup.enter.native="sendMessage">
|
||||
<el-input
|
||||
v-model="inputMessage"
|
||||
placeholder="请输入"
|
||||
class="message-input"
|
||||
@keyup.enter.native="sendMessage"
|
||||
>
|
||||
<template slot="append">
|
||||
<el-button icon="el-icon-s-promotion" @click="sendMessage" size="small"></el-button>
|
||||
<el-button
|
||||
icon="el-icon-s-promotion"
|
||||
@click="sendMessage"
|
||||
size="small"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
@@ -259,99 +334,99 @@ export default {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.messages {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
|
||||
|
||||
.message-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
||||
&.question {
|
||||
align-items: flex-end;
|
||||
|
||||
|
||||
.question-message {
|
||||
background-color: #ecf5ff;
|
||||
border-radius: 8px 0 8px 8px;
|
||||
padding: 12px;
|
||||
max-width: 80%;
|
||||
|
||||
|
||||
.message-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
|
||||
|
||||
.message-info {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
|
||||
.message-title {
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: #409EFF;
|
||||
color: #409eff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.message-content {
|
||||
word-break: break-word;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.answer {
|
||||
align-items: flex-start;
|
||||
|
||||
|
||||
.answer-message {
|
||||
background-color: #fff;
|
||||
border-radius: 0 8px 8px 8px;
|
||||
padding: 12px;
|
||||
max-width: 90%;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
|
||||
|
||||
|
||||
.message-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
|
||||
|
||||
.message-info {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
|
||||
.message-title {
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: #67c23a;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.message-content {
|
||||
margin-bottom: 16px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
|
||||
.references {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
|
||||
|
||||
.reference-item {
|
||||
border: 1px solid #ebeef5;
|
||||
border-radius: 4px;
|
||||
padding: 12px;
|
||||
background-color: #fafafa;
|
||||
|
||||
|
||||
.reference-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
|
||||
|
||||
.reference-index {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
background-color: #409EFF;
|
||||
background-color: #409eff;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -359,25 +434,25 @@ export default {
|
||||
font-size: 12px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
|
||||
.reference-title {
|
||||
flex: 1;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
|
||||
.reference-score {
|
||||
color: #409EFF;
|
||||
color: #409eff;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.reference-content {
|
||||
margin-bottom: 8px;
|
||||
font-size: 13px;
|
||||
color: #606266;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
.reference-footer {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
@@ -387,7 +462,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.loading-message {
|
||||
padding: 12px;
|
||||
background-color: #fff;
|
||||
@@ -436,7 +511,7 @@ export default {
|
||||
margin-bottom: 10px;
|
||||
|
||||
&.active {
|
||||
border-color: #409EFF;
|
||||
border-color: #409eff;
|
||||
background-color: #ecf5ff;
|
||||
}
|
||||
|
||||
@@ -474,4 +549,4 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -7,14 +7,36 @@
|
||||
<div class="mr20 header" v-if="!editKnowledge">
|
||||
{{ knowledgeName }}
|
||||
</div>
|
||||
<el-input class="mr20 w400" size="small" v-else v-model="copyKnowledgeName">{{ knowledgeName }}</el-input>
|
||||
<el-icon class="fs16 el-icon-edit-outline cursor-pointer" @click.native="editKnowledgeName"
|
||||
v-if="!editKnowledge" />
|
||||
<el-input
|
||||
class="mr20 w400"
|
||||
size="small"
|
||||
v-else
|
||||
v-model="copyKnowledgeName"
|
||||
>{{ knowledgeName }}</el-input
|
||||
>
|
||||
<el-icon
|
||||
class="fs16 el-icon-edit-outline cursor-pointer"
|
||||
@click.native="editKnowledgeName"
|
||||
v-if="!editKnowledge"
|
||||
/>
|
||||
<div v-else>
|
||||
<el-button type="primary" size="medium" class="render-button" @click="saveKnowledgeName">保存</el-button>
|
||||
<el-button size="medium" class="render-button" @click="cancelKnowledgeName">取消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="medium"
|
||||
class="render-button"
|
||||
@click="saveKnowledgeName"
|
||||
>保存</el-button
|
||||
>
|
||||
<el-button
|
||||
size="medium"
|
||||
class="render-button"
|
||||
@click="cancelKnowledgeName"
|
||||
>取消</el-button
|
||||
>
|
||||
</div>
|
||||
<span class="segment-content">{{ segmentedMode | filterSegmentedMode }}</span>
|
||||
<span class="segment-content">{{
|
||||
segmentedMode | filterSegmentedMode
|
||||
}}</span>
|
||||
</div>
|
||||
<p class="mt10 fs14" style="line-height: 20px">
|
||||
描述:{{ knowledgeDesc }}
|
||||
@@ -24,33 +46,70 @@
|
||||
|
||||
<div>
|
||||
<!-- <el-button type="primary" size="medium" class="normal-button" @click="jumpEditKnowledge">修改知识库</el-button>-->
|
||||
<el-button type="primary" size="medium" icon="el-icon-edit-outline" class="primary-button"
|
||||
@click="jumpEditKnowledge">修改知识库</el-button>
|
||||
<el-button type="primary" size="medium" icon="el-icon-plus" class="primary-button"
|
||||
@click="jumpAddKnowledge">上传知识</el-button>
|
||||
<el-button type="primary" icon="el-icon-s-promotion" size="medium" class="line-button"
|
||||
@click="handleHitTestClick">命中测试</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="medium"
|
||||
icon="el-icon-edit-outline"
|
||||
class="primary-button"
|
||||
@click="jumpEditKnowledge"
|
||||
>修改知识库</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="medium"
|
||||
icon="el-icon-plus"
|
||||
class="primary-button"
|
||||
@click="jumpAddKnowledge"
|
||||
>上传知识</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-s-promotion"
|
||||
size="medium"
|
||||
class="line-button"
|
||||
@click="handleHitTestClick"
|
||||
>命中测试</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt20 card-body">
|
||||
<el-empty v-if="!hasList">
|
||||
<div class="mt20">
|
||||
<el-button type="primary" size="medium" class="fs14" @click="jumpAddKnowledge">立即添加</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="medium"
|
||||
class="fs14"
|
||||
@click="jumpAddKnowledge"
|
||||
>立即添加</el-button
|
||||
>
|
||||
</div>
|
||||
</el-empty>
|
||||
|
||||
<div class="table-container" v-else>
|
||||
<div class="flex align-items-c justify-content-b">
|
||||
<el-form :model="form" label-width="100px" label-position="top" inline>
|
||||
<el-form
|
||||
:model="form"
|
||||
label-width="100px"
|
||||
label-position="top"
|
||||
inline
|
||||
>
|
||||
<el-form-item label="知识文件名称" prop="fileName">
|
||||
<el-input v-model="form.knowledgeNameLike" size="medium" placeholder="请输入知识文件名称"
|
||||
@keydown.enter.native="search"></el-input>
|
||||
<el-input
|
||||
v-model="form.knowledgeNameLike"
|
||||
size="medium"
|
||||
placeholder="请输入知识文件名称"
|
||||
@keydown.enter.native="search"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="知识文件来源" prop="documentSource">
|
||||
<el-select v-model="form.documentSource" size="medium">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option v-for="item in documentSourceOptions" :label="item.label" :value="item.value"
|
||||
:key="item.value"></el-option>
|
||||
<el-option
|
||||
v-for="item in documentSourceOptions"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:key="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传用户" prop="createdUserLike">
|
||||
@@ -59,30 +118,65 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关键字">
|
||||
<el-input v-model="form.name" placeholder="请输入关键字/敏感词" disabled size="medium"></el-input>
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
placeholder="请输入关键字/敏感词"
|
||||
disabled
|
||||
size="medium"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传时间" prop="times">
|
||||
<el-date-picker size="medium" style="width:100%" v-model="form.times" value-format="yyyy-MM-dd"
|
||||
start-placeholder="开始时间" end-placeholder="结束时间" type="daterange"></el-date-picker>
|
||||
<el-date-picker
|
||||
size="medium"
|
||||
style="width:100%"
|
||||
v-model="form.times"
|
||||
value-format="yyyy-MM-dd"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
type="daterange"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mt15 flex align-items-c justify-content-b">
|
||||
<el-button size="medium" type="primary" @click="search">查询</el-button>
|
||||
<el-button size="medium" type="primary" @click="search"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button size="medium" @click="reset">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<r-table :columns="columns" :data="list" :deletion="false" :total="total" @page-change="pageChange"
|
||||
@current-change="currentChange" :current-page="page" :page-size="pageSize"></r-table>
|
||||
<r-table
|
||||
:columns="columns"
|
||||
:data="list"
|
||||
:deletion="false"
|
||||
:total="total"
|
||||
@page-change="pageChange"
|
||||
@current-change="currentChange"
|
||||
:current-page="page"
|
||||
:page-size="pageSize"
|
||||
></r-table>
|
||||
</div>
|
||||
</div>
|
||||
<document-drawer :visible.sync="drawer" :descriptions="descriptions" :document-detail="documentDetail"
|
||||
:active-segment="activeSegment" @update:visible="val => (drawer = val)" />
|
||||
<document-drawer
|
||||
:visible.sync="drawer"
|
||||
:descriptions="descriptions"
|
||||
:document-detail="documentDetail"
|
||||
:active-segment="activeSegment"
|
||||
@update:visible="val => (drawer = val)"
|
||||
/>
|
||||
|
||||
<knowledgeForm :visible.sync="drawerForm" :datasetId="$route.query.datasetId" @update:visible="getKnowledgeDetail">
|
||||
<knowledgeForm
|
||||
:visible.sync="drawerForm"
|
||||
:datasetId="$route.query.datasetId"
|
||||
@update:visible="getKnowledgeDetail"
|
||||
>
|
||||
</knowledgeForm>
|
||||
|
||||
<!-- 命中测试抽屉弹窗 -->
|
||||
<el-drawer :title="hitTestConfig.title" :visible.sync="hitTestConfig.visible" size="60%">
|
||||
<el-drawer
|
||||
:title="hitTestConfig.title"
|
||||
:visible.sync="hitTestConfig.visible"
|
||||
size="60%"
|
||||
>
|
||||
<hitTest></hitTest>
|
||||
</el-drawer>
|
||||
</div>
|
||||
@@ -103,7 +197,7 @@ import {
|
||||
import DocumentDrawer from './components/documentDetail/DocumentDrawer.vue'
|
||||
import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue'
|
||||
import knowledgePng_1 from '@/assets/images/konwledge/konwledge-1.png'
|
||||
import hitTest from "@/views/knowledge/detail/components/HitTest/Index.vue"
|
||||
import hitTest from '@/views/knowledge/detail/components/HitTest/Index.vue'
|
||||
|
||||
export default {
|
||||
name: 'index',
|
||||
@@ -363,7 +457,7 @@ export default {
|
||||
return item ? item.label : '否'
|
||||
}
|
||||
},
|
||||
created() { },
|
||||
created() {},
|
||||
async mounted() {
|
||||
this.getKnowledgeDetail()
|
||||
// 获取知识库文件列表
|
||||
|
||||
@@ -2,12 +2,26 @@
|
||||
<div class="department-manage render-container">
|
||||
<div class="filter-container">
|
||||
<div class="flex align-items-c justify-content-b">
|
||||
<el-form :model="queryParams" label-width="100px" label-position="top" ref="queryParams" inline>
|
||||
<el-form
|
||||
:model="queryParams"
|
||||
label-width="100px"
|
||||
label-position="top"
|
||||
ref="queryParams"
|
||||
inline
|
||||
>
|
||||
<el-form-item label="菜单编码" prop="menuCodeLike">
|
||||
<el-input v-model="queryParams.menuCodeLike" size="medium" placeholder="请输入菜单编码"></el-input>
|
||||
<el-input
|
||||
v-model="queryParams.menuCodeLike"
|
||||
size="medium"
|
||||
placeholder="请输入菜单编码"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单名称" prop="menuNameLike">
|
||||
<el-input v-model="queryParams.menuNameLike" size="medium" placeholder="请输入菜单名称"></el-input>
|
||||
<el-input
|
||||
v-model="queryParams.menuNameLike"
|
||||
size="medium"
|
||||
placeholder="请输入菜单名称"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单类型" prop="type">
|
||||
<el-select v-model="queryParams.type" size="medium">
|
||||
@@ -18,19 +32,36 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mt15 flex align-items-c justify-content-b">
|
||||
<el-button size="medium" type="primary" @click="handleQuery">查询</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleQuery"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button size="medium" @click="resetQuery">重置</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleAdd">新增</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleAdd"
|
||||
>新增</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<r-table :columns="tableConfig.columns" :data="tableData" :deletion="false" :total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" :currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize" />
|
||||
<r-table
|
||||
:columns="tableConfig.columns"
|
||||
:data="tableData"
|
||||
:deletion="false"
|
||||
:total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange"
|
||||
@sizeChange="handleSizeChange"
|
||||
:currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize"
|
||||
/>
|
||||
|
||||
<!-- 菜单新增 编辑 弹窗 -->
|
||||
<menu-dialog :visible.sync="dialogVisible" :title="dialogTitle" :is-edit="isEdit" :is-view="isView"
|
||||
:menu-data="currentMenuData" @submit="handleSubmit" />
|
||||
<menu-dialog
|
||||
:visible.sync="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
:is-edit="isEdit"
|
||||
:is-view="isView"
|
||||
:menu-data="currentMenuData"
|
||||
@submit="handleSubmit"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -3,40 +3,90 @@
|
||||
<section>
|
||||
<div class="filter-container">
|
||||
<div class="flex align-items-c justify-content-b">
|
||||
<el-form :model="queryParams" label-width="100px" label-position="top" ref="queryParams" inline>
|
||||
<el-form
|
||||
:model="queryParams"
|
||||
label-width="100px"
|
||||
label-position="top"
|
||||
ref="queryParams"
|
||||
inline
|
||||
>
|
||||
<el-form-item label="角色名称">
|
||||
<el-input v-model="queryParams.roleNameLike" placeholder="请输入角色名称" clearable size="small" />
|
||||
<el-input
|
||||
v-model="queryParams.roleNameLike"
|
||||
placeholder="请输入角色名称"
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="角色编码">
|
||||
<el-input v-model="queryParams.roleCodeLike" placeholder="请输入角色编码" clearable size="small" />
|
||||
<el-input
|
||||
v-model="queryParams.roleCodeLike"
|
||||
placeholder="请输入角色编码"
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mt15 flex align-items-c justify-content-b">
|
||||
<el-button type="primary" size="medium" @click="handleQuery">查询</el-button>
|
||||
<el-button type="primary" plain size="medium" @click="resetQuery">重置</el-button>
|
||||
<el-button type="primary" plain size="medium" @click="handleAdd">新增</el-button>
|
||||
<el-button type="primary" size="medium" @click="handleQuery"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button type="primary" plain size="medium" @click="resetQuery"
|
||||
>重置</el-button
|
||||
>
|
||||
<el-button type="primary" plain size="medium" @click="handleAdd"
|
||||
>新增</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<r-table :columns="tableConfig.columns" :data="tableData" :deletion="false" :total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" :currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize" />
|
||||
<r-table
|
||||
:columns="tableConfig.columns"
|
||||
:data="tableData"
|
||||
:deletion="false"
|
||||
:total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange"
|
||||
@sizeChange="handleSizeChange"
|
||||
:currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize"
|
||||
/>
|
||||
</section>
|
||||
|
||||
<!-- 角色新增弹窗 -->
|
||||
<role-dialog :visible.sync="dialogVisible" :title="dialogTitle" :is-edit="isEdit" :is-view="isView"
|
||||
:role-data="currentRoleData" @submit="handleSubmit" />
|
||||
<role-dialog
|
||||
:visible.sync="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
:is-edit="isEdit"
|
||||
:is-view="isView"
|
||||
:role-data="currentRoleData"
|
||||
@submit="handleSubmit"
|
||||
/>
|
||||
|
||||
<!-- 角色权限 抽屉 -->
|
||||
<el-drawer :visible.sync="permissionDrawer.visible" :title="permissionDrawer.title" size="60%">
|
||||
<el-tree ref="menuTreeRef" :data="menuTree" show-checkbox node-key="id" default-expand-all :props="defaultProps"
|
||||
@check="handleCheckChange">
|
||||
<el-drawer
|
||||
:visible.sync="permissionDrawer.visible"
|
||||
:title="permissionDrawer.title"
|
||||
size="60%"
|
||||
>
|
||||
<el-tree
|
||||
ref="menuTreeRef"
|
||||
:data="menuTree"
|
||||
show-checkbox
|
||||
node-key="id"
|
||||
default-expand-all
|
||||
:props="defaultProps"
|
||||
@check="handleCheckChange"
|
||||
>
|
||||
</el-tree>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-button type="primary" size="medium" @click="handleOnSave">确定</el-button>
|
||||
<el-button type="primary" plain size="medium" @click="handleOnClose">取消</el-button>
|
||||
<el-button type="primary" size="medium" @click="handleOnSave"
|
||||
>确定</el-button
|
||||
>
|
||||
<el-button type="primary" plain size="medium" @click="handleOnClose"
|
||||
>取消</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-drawer>
|
||||
|
||||
@@ -1,18 +1,57 @@
|
||||
<template>
|
||||
<el-dialog title="重置密码" :visible.sync="visible" width="500px" append-to-body @close="handleClose">
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" status-icon>
|
||||
<el-dialog
|
||||
title="修改密码"
|
||||
:visible.sync="visible"
|
||||
width="500px"
|
||||
append-to-body
|
||||
@close="handleClose"
|
||||
>
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="120px"
|
||||
status-icon
|
||||
>
|
||||
<el-form-item label="旧密码" prop="userPassword">
|
||||
<el-input v-model="form.userPassword" placeholder="请输入旧密码" type="password" show-password clearable size="small" />
|
||||
<el-input
|
||||
v-model="form.userPassword"
|
||||
placeholder="请输入旧密码"
|
||||
type="password"
|
||||
show-password
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码" prop="newPassword">
|
||||
<el-input v-model="form.newPassword" placeholder="请输入新密码" type="password" show-password clearable size="small" />
|
||||
<el-input
|
||||
v-model="form.newPassword"
|
||||
placeholder="请输入新密码"
|
||||
type="password"
|
||||
show-password
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="确认新密码" prop="confirmPassword">
|
||||
<el-input v-model="form.confirmPassword" placeholder="请再次输入新密码" type="password" show-password clearable size="small" />
|
||||
<el-input
|
||||
v-model="form.confirmPassword"
|
||||
placeholder="请再次输入新密码"
|
||||
type="password"
|
||||
show-password
|
||||
clearable
|
||||
size="small"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" size="small" :loading="loading" @click="submitForm">确 定</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:loading="loading"
|
||||
@click="submitForm"
|
||||
>确 定</el-button
|
||||
>
|
||||
<el-button size="small" @click="handleClose">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
@@ -49,9 +88,17 @@ export default {
|
||||
confirmPassword: ''
|
||||
},
|
||||
rules: {
|
||||
userPassword: [{ required: true, message: '请输入旧密码', trigger: 'blur' }],
|
||||
newPassword: [{ required: true, message: '请输入新密码', trigger: 'blur' }, { min: 6, message: '密码长度不能少于6个字符', trigger: 'blur' }],
|
||||
confirmPassword: [{ required: true, message: '请再次输入新密码', trigger: 'blur' }, { validator: validateConfirmPassword, trigger: 'blur' }]
|
||||
userPassword: [
|
||||
{ required: true, message: '请输入旧密码', trigger: 'blur' }
|
||||
],
|
||||
newPassword: [
|
||||
{ required: true, message: '请输入新密码', trigger: 'blur' },
|
||||
{ min: 6, message: '密码长度不能少于6个字符', trigger: 'blur' }
|
||||
],
|
||||
confirmPassword: [
|
||||
{ required: true, message: '请再次输入新密码', trigger: 'blur' },
|
||||
{ validator: validateConfirmPassword, trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
loading: false
|
||||
}
|
||||
@@ -66,24 +113,23 @@ export default {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const data = {
|
||||
userId: this.userId,
|
||||
userPassword: this.form.userPassword,
|
||||
newPassword: this.form.newPassword
|
||||
}
|
||||
|
||||
updatePassword(data)
|
||||
.then(response => {
|
||||
.then(async response => {
|
||||
if (response.code === '0') {
|
||||
this.$message.success('密码重置成功')
|
||||
this.handleClose()
|
||||
this.$emit('success')
|
||||
this.$message.success('密码修改成功')
|
||||
await this.$store.dispatch('user/logout')
|
||||
this.$router.push(`/login?redirect=${this.$route.fullPath}`)
|
||||
} else {
|
||||
this.$message.error(response.msg || '密码重置失败')
|
||||
this.$message.error(response.msg || '密码修改失败')
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('密码重置出错:', error)
|
||||
this.$message.error('密码重置出错')
|
||||
console.error('密码修改出错:', error)
|
||||
this.$message.error('密码修改出错')
|
||||
})
|
||||
.finally(() => {
|
||||
this.loading = false
|
||||
|
||||
@@ -2,15 +2,29 @@
|
||||
<div class=" render-container user-manage ">
|
||||
<div class="filter-container">
|
||||
<div class="flex align-items-c justify-content-b">
|
||||
<el-form :model="queryParams" label-width="100px" label-position="top" ref="queryParams" inline>
|
||||
<el-form
|
||||
:model="queryParams"
|
||||
label-width="100px"
|
||||
label-position="top"
|
||||
ref="queryParams"
|
||||
inline
|
||||
>
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" size="medium" placeholder="请输入用户名称"></el-input>
|
||||
<el-input
|
||||
v-model="queryParams.userName"
|
||||
size="medium"
|
||||
placeholder="请输入用户名称"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" size="medium">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option v-for="item in statusList" :label="item.label" :value="item.value"
|
||||
:key="item.value"></el-option>
|
||||
<el-option
|
||||
v-for="item in statusList"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:key="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="上传时间" prop="times">-->
|
||||
@@ -26,22 +40,43 @@
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<div class="mt15 flex align-items-c justify-content-b">
|
||||
<el-button size="medium" type="primary" @click="handleQuery">查询</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleQuery"
|
||||
>查询</el-button
|
||||
>
|
||||
<el-button size="medium" @click="resetQuery">重置</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleAdd">新增</el-button>
|
||||
<el-button size="medium" type="primary" @click="handleAdd"
|
||||
>新增</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<r-table :columns="tableConfig.columns" :data="tableData" :deletion="false" :total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" :currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize" />
|
||||
<r-table
|
||||
:columns="tableConfig.columns"
|
||||
:data="tableData"
|
||||
:deletion="false"
|
||||
:total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange"
|
||||
@sizeChange="handleSizeChange"
|
||||
:currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize"
|
||||
/>
|
||||
|
||||
<!-- 用户新增弹窗 -->
|
||||
<user-dialog :visible.sync="dialogVisible" :title="dialogTitle" :is-edit="isEdit" :is-view="isView"
|
||||
:user-data="currentUserData" @submit="handleSubmit" />
|
||||
<user-dialog
|
||||
:visible.sync="dialogVisible"
|
||||
:title="dialogTitle"
|
||||
:is-edit="isEdit"
|
||||
:is-view="isView"
|
||||
:user-data="currentUserData"
|
||||
@submit="handleSubmit"
|
||||
/>
|
||||
|
||||
<!-- 重置密码弹窗 -->
|
||||
<reset-password-dialog :visible.sync="resetPasswordVisible" :user-id="currentUserId" @success="getUserList" />
|
||||
<reset-password-dialog
|
||||
:visible.sync="resetPasswordVisible"
|
||||
:user-id="currentUserId"
|
||||
@success="getUserList"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -53,7 +88,7 @@ import {
|
||||
queryUserDetail,
|
||||
deleteUser,
|
||||
changeUserStatus,
|
||||
updatePassword
|
||||
resetPassword
|
||||
} from '@/api/generatedApi/system'
|
||||
|
||||
export default {
|
||||
@@ -347,7 +382,21 @@ export default {
|
||||
},
|
||||
handleResetPassword(row) {
|
||||
this.currentUserId = row.id
|
||||
this.resetPasswordVisible = true
|
||||
this.$confirm('确认重置该用户的密码吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
// 调用resetPassword接口
|
||||
resetPassword({
|
||||
userId: row.id
|
||||
}).then(response => {
|
||||
if (response.code === '0') {
|
||||
this.$message.success('重置密码成功')
|
||||
this.handleQuery() // 刷新列表
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
<script>
|
||||
import { datasetsExTaskPages as datasetsExPages, docManageDataset } from '@/api/generatedApi'
|
||||
import {
|
||||
datasetsExTaskPages as datasetsExPages,
|
||||
docManageDataset
|
||||
} from '@/api/generatedApi'
|
||||
import KnowledgeInfo from '@/views/track/views/knowledge-info/Index.vue'
|
||||
|
||||
export default {
|
||||
@@ -39,7 +42,10 @@ export default {
|
||||
key: '上传状态',
|
||||
width: '100',
|
||||
render: (h, params) => {
|
||||
return h('span', this.tableConfig.uploadStatusType[params.row.documentStatus])
|
||||
return h(
|
||||
'span',
|
||||
this.tableConfig.uploadStatusType[params.row.documentStatus]
|
||||
)
|
||||
}
|
||||
},
|
||||
// 上传用户 现在只有 admin . 后面需要自己添加
|
||||
@@ -78,7 +84,9 @@ export default {
|
||||
if (!this.form.taskTime || this.form.taskTime.length !== 2) return ''
|
||||
|
||||
return this.form.taskTime.map((date, index) => {
|
||||
return `${new Date(date).getFullYear()}-${String(new Date(date).getMonth() + 1).padStart(2, '0')}-${String(new Date(date).getDate()).padStart(
|
||||
return `${new Date(date).getFullYear()}-${String(
|
||||
new Date(date).getMonth() + 1
|
||||
).padStart(2, '0')}-${String(new Date(date).getDate()).padStart(
|
||||
2,
|
||||
'0'
|
||||
)} ${index === 0 ? '00:00:00' : '23:59:59'}`
|
||||
@@ -124,14 +132,18 @@ export default {
|
||||
// // 上传状态
|
||||
// documentStatus: this.form.documentStatus,
|
||||
// // 任务时间
|
||||
startCreatedDate: this.formattedDate.length > 1 ? this.formattedDate[0] : '',
|
||||
endCreatedDate: this.formattedDate.length > 1 ? this.formattedDate[1] : '',
|
||||
startCreatedDate:
|
||||
this.formattedDate.length > 1 ? this.formattedDate[0] : '',
|
||||
endCreatedDate:
|
||||
this.formattedDate.length > 1 ? this.formattedDate[1] : '',
|
||||
knowledgeNameLike: this.form.knowledgeName,
|
||||
documentStatus: this.form.documentStatus
|
||||
}
|
||||
|
||||
datasetsExPages(payload).then(res => {
|
||||
this.tableData = res.content.content.list ? res.content.content.list : []
|
||||
this.tableData = res.content.content.list
|
||||
? res.content.content.list
|
||||
: []
|
||||
this.tableConfig.total = res.content.content.total
|
||||
})
|
||||
},
|
||||
@@ -187,17 +199,29 @@ export default {
|
||||
<el-col :span="8">
|
||||
<el-form-item label="知识库">
|
||||
<!-- 启用远程加载 -->
|
||||
<el-select filterable v-model="form.datasetId" placeholder="输入搜索知识库">
|
||||
<el-select
|
||||
filterable
|
||||
v-model="form.datasetId"
|
||||
placeholder="输入搜索知识库"
|
||||
>
|
||||
<!-- 后续需要添加懒加载 -->
|
||||
<el-option v-for="item in datasetList" :key="item.id" :label="item.name" :value="item.id" />
|
||||
<el-option
|
||||
v-for="item in datasetList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="知识文件名称">
|
||||
<el-input @keydown.enter.native="handleSearch" v-model="form.knowledgeName"
|
||||
placeholder="请输入知识文件名称"></el-input>
|
||||
<el-input
|
||||
@keydown.enter.native="handleSearch"
|
||||
v-model="form.knowledgeName"
|
||||
placeholder="请输入知识文件名称"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
@@ -205,45 +229,82 @@ export default {
|
||||
<el-form-item label="上传用户">
|
||||
<el-select v-model="form.uploadUser" placeholder="请选择上传用户">
|
||||
<el-option label="全部上传用户" value="">全部上传用户</el-option>
|
||||
<el-option v-for="item in getUploadUserList" :key="item" :label="item" :value="item"></el-option>
|
||||
<el-option
|
||||
v-for="item in getUploadUserList"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="上传状态">
|
||||
<el-select v-model="form.documentStatus" placeholder="请选择上传状态">
|
||||
<el-select
|
||||
v-model="form.documentStatus"
|
||||
placeholder="请选择上传状态"
|
||||
>
|
||||
<el-option label="全部上传状态" value="" />
|
||||
<el-option v-for="item in Object.keys(this.tableConfig.uploadStatusType)" :key="item"
|
||||
:label="tableConfig.uploadStatusType[item]" :value="Number(item)" />
|
||||
<el-option
|
||||
v-for="item in Object.keys(this.tableConfig.uploadStatusType)"
|
||||
:key="item"
|
||||
:label="tableConfig.uploadStatusType[item]"
|
||||
:value="Number(item)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="任务时间">
|
||||
<el-date-picker v-model="form.taskTime" type="daterange" unlink-panels range-separator="-"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期" style="width: 100%" />
|
||||
<el-date-picker
|
||||
v-model="form.taskTime"
|
||||
type="daterange"
|
||||
unlink-panels
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="9" :offset="11" class="mb20">
|
||||
<!-- 搜索按钮 -->
|
||||
<el-button type="primary" size="small" @click="handleSearch">搜索</el-button>
|
||||
<el-button type="primary" size="small" @click="handleSearch"
|
||||
>搜索</el-button
|
||||
>
|
||||
<!-- 重置按钮 -->
|
||||
<el-button type="primary" size="small" @click="handleReset">重置筛选</el-button>
|
||||
<el-button type="primary" size="small" @click="handleReset"
|
||||
>重置筛选</el-button
|
||||
>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<!-- 任务列表 -->
|
||||
<div>
|
||||
<r-table :columns="tableConfig.columns" :data="tableData" :deletion="false" :total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" :currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize" />
|
||||
<r-table
|
||||
:columns="tableConfig.columns"
|
||||
:data="tableData"
|
||||
:deletion="false"
|
||||
:total="tableConfig.total"
|
||||
@currentChange="handleCurrentChange"
|
||||
@sizeChange="handleSizeChange"
|
||||
:currentPage="tableConfig.currentPage"
|
||||
:pageSize="tableConfig.pageSize"
|
||||
/>
|
||||
|
||||
<!-- 弹出提示框, 里面是各种详情内容 -->
|
||||
<el-drawer title="上传任务详情" :visible.sync="infoDialogVisible" size="95%"
|
||||
:before-close="() => (infoDialogVisible = false)">
|
||||
<knowledge-info :form="activeForm" v-if="infoDialogVisible"></knowledge-info>
|
||||
<el-drawer
|
||||
title="上传任务详情"
|
||||
:visible.sync="infoDialogVisible"
|
||||
size="95%"
|
||||
:before-close="() => (infoDialogVisible = false)"
|
||||
>
|
||||
<knowledge-info
|
||||
:form="activeForm"
|
||||
v-if="infoDialogVisible"
|
||||
></knowledge-info>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -104,22 +104,38 @@ export default {
|
||||
</div>
|
||||
<el-form ref="form" :model="newForm" label-width="120px">
|
||||
<el-form-item label="知识库">
|
||||
<el-input v-model="newForm.datasetName" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.datasetName"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="知识文件名称">
|
||||
<el-input v-model="newForm.fileName" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.fileName"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="上传用户">
|
||||
<el-input v-model="newForm.userName" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.userName"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="上传时间">
|
||||
<el-input v-model="newForm.createdDate" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.createdDate"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -127,12 +143,20 @@ export default {
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="任务号">
|
||||
<el-input v-model="newForm.id" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.id"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分段模式">
|
||||
<el-input v-model="newForm.segmentedMode" placeholder="null" disabled></el-input>
|
||||
<el-input
|
||||
v-model="newForm.segmentedMode"
|
||||
placeholder="null"
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -140,18 +164,32 @@ export default {
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="高级模式">
|
||||
<el-input v-model="useMineru" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="useMineru"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="任务状态">
|
||||
<el-input v-model="documentStatus" placeholder="" disabled></el-input>
|
||||
<el-input
|
||||
v-model="documentStatus"
|
||||
placeholder=""
|
||||
disabled
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="失败原因" v-if="newForm.documentStatus === -1">
|
||||
<el-input v-model="newForm.errMessage" placeholder=""></el-input>
|
||||
<el-form-item
|
||||
label="失败原因"
|
||||
v-if="newForm.documentStatus === -1"
|
||||
>
|
||||
<el-input
|
||||
v-model="newForm.errMessage"
|
||||
placeholder=""
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
@@ -162,8 +200,14 @@ export default {
|
||||
<span>知识内容</span>
|
||||
</div>
|
||||
<div class="knowledge-content" v-if="descriptions">
|
||||
<text-model v-if="descriptions.doc_form === 'text_model'" :descriptions="descriptions" />
|
||||
<q-a-model v-else-if="descriptions.doc_form === 'qa_model'" :descriptions="descriptions" />
|
||||
<text-model
|
||||
v-if="descriptions.doc_form === 'text_model'"
|
||||
:descriptions="descriptions"
|
||||
/>
|
||||
<q-a-model
|
||||
v-else-if="descriptions.doc_form === 'qa_model'"
|
||||
:descriptions="descriptions"
|
||||
/>
|
||||
</div>
|
||||
<span v-else>暂无知识内容</span>
|
||||
</el-card>
|
||||
|
||||
Reference in New Issue
Block a user