Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
陈昱达
2025-04-22 17:52:39 +08:00
6 changed files with 249 additions and 75 deletions

View File

@@ -135,6 +135,28 @@ export default [
}
}
]
},
]
},
{
path: '/dify',
name: 'dify',
component: layout,
redirect: '/dify/workflow',
meta: {
title: 'Dify',
icon: 'el-icon-home',
affix: true
},
children: [
{
path: '/dify/workflow',
name: 'dify-workflow',
component: () => import('@/views/dify/views/workflow/index.vue'),
meta: {
title: 'Dify',
icon: 'el-icon-home'
}
}
]
}

21
src/views/dify/index.vue Normal file
View File

@@ -0,0 +1,21 @@
<script>
export default {
name: 'dify',
data() {
return {
dify: {
src: '/dify'
}
}
}
}
</script>
<template>
<div class="container">
</div>
</template>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,77 @@
<script>
import { computed } from 'vue'
export default {
name: 'workflow',
data() {
return {
dify: {
// 默认不展示 header 和 sidebar
params: {
sidebar: '0',
header: '0',
publish: '0'
},
isVisible: false,
// dify 的 workflow 地址格式 http://localhost:3000/dify/app/235427ea-803b-482b-bdff-dd717801ca76/workflow
// app 是展示所有的内容
src: `/`
}
}
},
computed: {
params() {
const _params = []
Object.keys(this.dify.params).forEach(key => {
_params.push(`${key}=${this.dify.params[key]}`)
})
return _params.join('&')
}
},
// http://192.168.3.229:3000/apps
created() {
// 检测是否存在 workflow id 如果不存在则不展示内容
const { id, header, sidebar, publish } = this.$route.query
if (id) {
this.dify.src = `/app/${id}/workflow?${this.params}`
this.dify.isVisible = true
}
// 获取 header 和 sidebar 的内容, 重置参数状态
this.dify.params.header = header || '0'
this.dify.params.sidebar = sidebar || '0'
this.dify.params.publish = publish || '0'
},
watch: {
'$route.query': {
handler() {
// 获取 header 和 sidebar 的内容, 重置参数状态
const { id, header, sidebar, publish } = this.$route.query
this.dify.params.header = header || '0'
this.dify.params.sidebar = sidebar || '0'
this.dify.params.publish = publish || '0'
// 当路由参数 id 变化时,更新 dify 的 src
if (id) {
console.log(`current params:`, this.dify.params)
this.dify.src = `/app/${id}/workflow?${this.params}`
this.dify.isVisible = true
} else {
this.dify.isVisible = false
}
},
deep: true
}
}
}
</script>
<template>
<div class="container">
<el-card :body-style="{ padding: 0 }" shadow="hover">
<iframe v-if="dify.isVisible" ref="dify" :src="dify.src" frameborder="0" style="width: 100%; height: 85vh;" />
<el-empty v-else />
</el-card>
</div>
</template>

View File

@@ -261,7 +261,7 @@ export default {
/>
<!-- 弹出提示框 里面是各种详情内容 -->
<el-drawer title="上传任务详情" :visible.sync="infoDialogVisible" size="60%" :before-close="() => (infoDialogVisible = false)">
<el-drawer title="上传任务详情" :visible.sync="infoDialogVisible" size="95%" :before-close="() => (infoDialogVisible = false)">
<knowledge-info :form="activeForm" v-if="infoDialogVisible"></knowledge-info>
</el-drawer>
</div>

View File

@@ -84,91 +84,123 @@ export default {
<template>
<div class="container upload-info-container">
<div class="card-body">
<el-form ref="form" :model="newForm" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="知识库">
<el-input v-model="newForm.datasetName" placeholder="" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="知识文件名称">
<el-input v-model="newForm.fileName" placeholder="" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<!-- 左侧表单内容和知识内容 -->
<el-col :span="12">
<!-- 表单内容 -->
<el-card class="content-card">
<div slot="header" class="clearfix">
<span>基本信息</span>
</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-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="上传用户">
<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-form-item>
</el-col>
</el-row>
<el-form-item label="知识文件名称">
<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.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-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="上传用户">
<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-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="高级模式">
<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-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="任务号">
<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-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24" v-if="newForm.documentStatus === -1">
<el-form-item label="失败原因">
<el-input v-model="newForm.errMessage" placeholder=""></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="高级模式">
<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-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="知识内容">
<div class="is-always-shadow" 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" />
</div>
<span v-else>-</span>
</el-form-item>
</el-col>
<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>
<el-col :span="24">
<el-form-item label="原文内容" />
<!-- 知识内容 -->
<el-card class="content-card mt20">
<div slot="header" class="clearfix">
<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" />
</div>
<span v-else>暂无知识内容</span>
</el-card>
</el-col>
<!-- 右侧原文内容 -->
<el-col :span="12">
<el-card class="content-card full-height">
<div slot="header" class="clearfix">
<span>原文内容</span>
</div>
<iframe
id="iframe"
:src="`${iframeSrc}/pdfjs-dist/web/viewer.html?file=${encodeURIComponent(getPdfUrl({ documentId: newForm.id }))}`"
class="miner-u el-card is-always-shadow ml20"
style="width: 98%; height: 800px;"
class="miner-u"
style="width: 100%; height: 800px;"
></iframe>
</el-col>
</el-row>
</el-form>
</el-card>
</el-col>
</el-row>
</div>
</div>
</template>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.content-card {
margin-bottom: 20px;
.knowledge-content {
min-height: 300px;
}
}
.full-height {
height: calc(100% - 20px);
}
.mt20 {
margin-top: 20px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: '';
}
.clearfix:after {
clear: both;
}
</style>

View File

@@ -34,6 +34,28 @@ module.exports = {
errors: true
},
proxy: {
'/app': {
target: 'http://localhost:3000',
changeOrigin: true,
onProxyRes: (proxyRes, req, res) => {
delete proxyRes.headers['x-frame-options'];
},
pathRewrite: {
// '^/app': '/'
},
logLevel: 'debug'
},
'/_next': {
target: 'http://localhost:3000',
changeOrigin: true,
onProxyRes: (proxyRes, req, res) => {
delete proxyRes.headers['x-frame-options'];
},
pathRewrite: {
// '^/_next': '/'
},
logLevel: 'debug'
},
'/api': {
target: process.env.VUE_APP_ADMIN,
changeOrigin: true,