From 67e79eac7d0043876118078ebf771b79ed76501e Mon Sep 17 00:00:00 2001 From: zzs Date: Wed, 5 Mar 2025 17:13:23 +0800 Subject: [PATCH] wip: bookmark replace --- src/api/infra/bookmark/index.ts | 70 +++++++++++++++++++ src/components/FileSelect/index.ts | 3 + .../FileSelect/src/FileSelectModal.vue | 49 +++++++++++++ src/components/IFrame/src/IFrame.vue | 10 ++- src/utils/file/preview.ts | 11 +++ src/views/infra/bookmark/index.vue | 56 +++++++++++++++ src/views/infra/file/index.vue | 7 +- 7 files changed, 201 insertions(+), 5 deletions(-) create mode 100644 src/api/infra/bookmark/index.ts create mode 100644 src/components/FileSelect/index.ts create mode 100644 src/components/FileSelect/src/FileSelectModal.vue create mode 100644 src/utils/file/preview.ts create mode 100644 src/views/infra/bookmark/index.vue diff --git a/src/api/infra/bookmark/index.ts b/src/api/infra/bookmark/index.ts new file mode 100644 index 0000000..bc3dda2 --- /dev/null +++ b/src/api/infra/bookmark/index.ts @@ -0,0 +1,70 @@ +import { defHttp } from '@/utils/http/axios' + +/** + * 查询书签 + */ +export interface BookmarkQueryRespVo { + + /** 标识 */ + name: string + + /** 类型 */ + type?: BookmarkType +} + +export interface BookmarkGenData { + /** 书签名称(标识) */ + name: string + + /** 扩展类型 */ + extData: PictureExData | TextExData +} + +/** 书签需要替换的数据类型(文本,图片,图片(描述)) */ +export type BookmarkType = 'TEXT' | 'PICTURE' | 'PICTURE_DESC' + +/** 图片提供的data类型,下载地址,base64文本,服务器绝对路径 */ +export type PictureProvideDataType = 'DOWNLOAD_URL' | 'BASE64' | 'ABSOLUTE_PATH' + +/** + * 书签数据类型 + */ +interface AbstractExData { + type: BookmarkType + value: string +} + +/** + * 图片数据 + */ +export interface PictureExData extends AbstractExData { + width: number + height: number + pictureName: string + dataType: PictureProvideDataType +} + +/** + * 文本数据 + */ +export interface TextExData extends AbstractExData { + bold: boolean + italic: boolean +} + +/** + * 查询文件中所有书签 + * @param fileId 文件id + */ +export function getAllBookmarks(fileId: string | number) { + return defHttp.get({ url: `/infra/word/bookmark/file/${fileId}` }) +} + +/** + * 执行书签替换 + * @param fileId 文件id + * @param data 数据 + */ +export function getDoBookmarkReplace(fileId: string | number, data: BookmarkGenData) { + return defHttp.get({ url: `/infra/word/bookmark/file/${fileId}/generate`, data }) +} diff --git a/src/components/FileSelect/index.ts b/src/components/FileSelect/index.ts new file mode 100644 index 0000000..5ec2a59 --- /dev/null +++ b/src/components/FileSelect/index.ts @@ -0,0 +1,3 @@ +import FileSelectModal from './src/FileSelectModal.vue' + +export { FileSelectModal } diff --git a/src/components/FileSelect/src/FileSelectModal.vue b/src/components/FileSelect/src/FileSelectModal.vue new file mode 100644 index 0000000..1e17965 --- /dev/null +++ b/src/components/FileSelect/src/FileSelectModal.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/IFrame/src/IFrame.vue b/src/components/IFrame/src/IFrame.vue index 2ae6923..d0bcb6c 100644 --- a/src/components/IFrame/src/IFrame.vue +++ b/src/components/IFrame/src/IFrame.vue @@ -4,12 +4,20 @@ import { propTypes } from '@/utils/propTypes' const props = defineProps({ src: propTypes.string.def(''), + height: { + type: [String, Number], + }, }) const loading = ref(true) const height = ref('') const frameRef = ref(null) function init() { - height.value = `${document.documentElement.clientHeight - 94.5}px` + console.warn(height.value) + if (!props.height) + height.value = `${document.documentElement.clientHeight - 94.5}px` + else + height.value = props.height + loading.value = false } onMounted(() => { diff --git a/src/utils/file/preview.ts b/src/utils/file/preview.ts new file mode 100644 index 0000000..b278543 --- /dev/null +++ b/src/utils/file/preview.ts @@ -0,0 +1,11 @@ +import { getConfigKey } from '@/api/infra/config' + +/** + * 获取文件预览地址 + * @param fileId + */ +export async function initFilePreviewUrl(fileId: string | number): Promise { + const wopi_client = await getConfigKey('wopi_client_addr') + const wopi_server = await getConfigKey('wopi_server_ip_addr') + return `${wopi_client}?lang=zh-cn&WOPISrc=${wopi_server}/admin-api/infra/file/preview/wopi/files/${fileId}` +} diff --git a/src/views/infra/bookmark/index.vue b/src/views/infra/bookmark/index.vue new file mode 100644 index 0000000..4959b3c --- /dev/null +++ b/src/views/infra/bookmark/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/views/infra/file/index.vue b/src/views/infra/file/index.vue index f62cc62..38d9838 100644 --- a/src/views/infra/file/index.vue +++ b/src/views/infra/file/index.vue @@ -12,7 +12,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth' import { copyText } from '@/utils/copyTextToClipboard' import { uploadApi } from '@/api/base/upload' import { DocAlert } from '@/components/DocAlert' -import { getConfigKey } from '@/api/infra/config' +import { initFilePreviewUrl } from '@/utils/file/preview' defineOptions({ name: 'InfraFile' }) @@ -64,9 +64,8 @@ async function handleOnlineView(record: Recordable, type: 'openNewTab' | 'iframe createMessage.success(`暂不支持预览 ${fileType} 格式文件!`) return } - const wopi_client = await getConfigKey('wopi_client_addr') - const wopi_server = await getConfigKey('wopi_server_ip_addr') - const previewUlr = `${wopi_client}?lang=zh-cn&WOPISrc=${wopi_server}/admin-api/infra/file/preview/wopi/files/${record.id}` + + const previewUlr = await initFilePreviewUrl(record.id) if (type === 'openNewTab') window.open(previewUlr)