feat: Tinymce 保存图片id 提供`contentWithOssIdTransform`来显示私有桶图片

master
dap 5 months ago
parent decc5d6e88
commit 491d36b7a8

@ -7,6 +7,7 @@
- useVbenForm 增加 TimeRangePicker(时间区间选择) 组件
- 字典(DictTag)支持fallback属性(未匹配到字典项时的回显)
- 微服务版本 logout接口在配置错误的情况返回401的提示(解决死循环调用logout接口)
- Tinymce 保存图片id 提供`contentWithOssIdTransform`来显示私有桶图片
**REFACTOR**

@ -147,9 +147,18 @@ const initOptions = computed((): InitOptions => {
};
uploadApi(file, { onUploadProgress: progressEvent })
.then((response) => {
const { url } = response as unknown as UploadResult;
const { url, ossId } = response as unknown as UploadResult;
console.log('tinymce上传图片:', url);
resolve(url);
//
setTimeout(() => {
const imgDom = editorRef.value?.dom.select(`img[src="${url}"]`);
if (imgDom) {
editorRef.value?.dom.setAttrib(imgDom, 'data-oss-id', ossId);
} else {
console.warn('无法获取图片dom, 存储数据可能会出现问题');
}
});
})
.catch((error) => {
console.error('tinymce上传图片失败:', error);

@ -0,0 +1,42 @@
import { ossInfo } from '#/api/system/oss';
/**
* ossId ()
*
* 使dom
* 使: contentWithOssIdTransform(content);
* @param content
* @returns string
*/
export async function contentWithOssIdTransform(content: string) {
if (!content) {
return null;
}
const parser = new DOMParser();
const doc = parser.parseFromString(content, 'text/html');
const imgDom = doc.querySelectorAll('img[data-oss-id]');
// 没有包含图片 不做处理
if (imgDom.length === 0) {
return content;
}
// 提取所有data-oss-id属性 作为string[]
const ossIds = [...imgDom].map(
(img) => (img as HTMLImageElement).dataset.ossId ?? '',
);
const ossFileList = await ossInfo(ossIds);
imgDom.forEach((item) => {
const img = item as HTMLImageElement;
// 找到对应的 替换
const src =
ossFileList.find((file) => file.ossId === img.dataset.ossId)?.url ??
// 未找到 取原先自己的src
img.src;
img.setAttribute('src', src);
});
// 获取dom string
return doc.body.innerHTML;
}
Loading…
Cancel
Save