feat: 完善知识库、策略预览与OnlyOffice集成
## 配置与环境 - .env.example: 更新环境变量配置 - docker-compose.yml: 完善Docker编排配置 - docker/README.md: 更新Docker文档 ## 后端知识库模块 - endpoints/knowledge.py: 增强知识库API端点 - schemas/knowledge.py: 扩展知识库数据模型 - services/knowledge.py: 完善知识库业务逻辑 - config.py: 优化配置管理 - storage/knowledge/.index.json: 更新知识库索引 ## 前端功能 - api.js: 完善API服务层 - knowledge.js: 优化知识库服务 - onlyoffice.js: 新增OnlyOffice文档服务集成 - TopBar.vue: 优化顶部导航栏 - PoliciesView.vue: 完善策略视图 - AppShellRouteView.vue: 新增应用外壳路由视图 - views/scripts/PoliciesView.js: 优化策略脚本 - policiesPreviewFormatters.js: 新增策略预览格式化工具 ## 样式 - policies-view.css: 完善策略页样式 ## 测试 - api-request.test.mjs: API请求测试 - onlyoffice-service.test.mjs: OnlyOffice服务测试 - policies-preview-formatters.test.mjs: 策略预览格式化测试
This commit is contained in:
43
web/src/services/onlyoffice.js
Normal file
43
web/src/services/onlyoffice.js
Normal file
@@ -0,0 +1,43 @@
|
||||
const scriptPromises = new Map()
|
||||
|
||||
function normalizeBaseUrl(value) {
|
||||
return String(value || '').replace(/\/$/, '')
|
||||
}
|
||||
|
||||
export function buildOnlyOfficeScriptUrl(documentServerUrl) {
|
||||
return `${normalizeBaseUrl(documentServerUrl)}/web-apps/apps/api/documents/api.js`
|
||||
}
|
||||
|
||||
export function loadOnlyOfficeApi(documentServerUrl) {
|
||||
const scriptUrl = buildOnlyOfficeScriptUrl(documentServerUrl)
|
||||
if (typeof window === 'undefined') {
|
||||
return Promise.reject(new Error('ONLYOFFICE 只能在浏览器环境中加载。'))
|
||||
}
|
||||
|
||||
if (window.DocsAPI?.DocEditor) {
|
||||
return Promise.resolve(window.DocsAPI)
|
||||
}
|
||||
|
||||
if (scriptPromises.has(scriptUrl)) {
|
||||
return scriptPromises.get(scriptUrl)
|
||||
}
|
||||
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
const existing = document.querySelector(`script[src="${scriptUrl}"]`)
|
||||
if (existing) {
|
||||
existing.addEventListener('load', () => resolve(window.DocsAPI), { once: true })
|
||||
existing.addEventListener('error', () => reject(new Error('ONLYOFFICE 脚本加载失败。')), { once: true })
|
||||
return
|
||||
}
|
||||
|
||||
const script = document.createElement('script')
|
||||
script.src = scriptUrl
|
||||
script.async = true
|
||||
script.onload = () => resolve(window.DocsAPI)
|
||||
script.onerror = () => reject(new Error('ONLYOFFICE 脚本加载失败。'))
|
||||
document.head.appendChild(script)
|
||||
})
|
||||
|
||||
scriptPromises.set(scriptUrl, promise)
|
||||
return promise
|
||||
}
|
||||
Reference in New Issue
Block a user