69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
function parseEditorImage (blocks = []) {
|
|
const images = []
|
|
|
|
if (!Array.isArray(blocks)) {
|
|
blocks = [blocks]
|
|
}
|
|
|
|
for (const block of blocks) {
|
|
const {insert = {}, attributes = {}} = block
|
|
const {'data-custom': custom = ""} = attributes
|
|
|
|
let parseCustom = custom.split('&').reduce((obj, item) => {
|
|
const [key, value] = item.split('=')
|
|
|
|
if (key && value) {
|
|
obj[key] = value
|
|
}
|
|
return obj
|
|
}, {})
|
|
|
|
images.push({
|
|
src: insert.image,
|
|
source: parseCustom.source ? parseCustom.source: insert.image
|
|
})
|
|
}
|
|
|
|
return images
|
|
}
|
|
|
|
/**
|
|
* 解析媒体库/编辑器中的图片
|
|
* @param images 图片地址
|
|
* @param type {string} 解析类型 media: 媒体库, editor: 编辑器
|
|
* @returns {Promise<{src: *, source: *}[]|{src, source: *}[]>}
|
|
*/
|
|
export async function parseImageUrl (images = [], type = "media") {
|
|
if (type === "editor") {
|
|
images = parseEditorImage(images).map(item => item.source)
|
|
} else {
|
|
if (!Array.isArray(images)) {
|
|
images = [images]
|
|
}
|
|
}
|
|
|
|
if (!images) return null
|
|
|
|
const tcbFiles = images.filter(item => item.startsWith("cloud://"))
|
|
|
|
if (tcbFiles.length) {
|
|
const res = await uniCloud.getTempFileURL({
|
|
fileList: tcbFiles
|
|
})
|
|
|
|
return images.map(image => {
|
|
const file = res.fileList.find(item => item.fileID === image)
|
|
|
|
return {
|
|
src: file ? file.tempFileURL : image,
|
|
source: image
|
|
}
|
|
})
|
|
} else {
|
|
return images.map(image => ({
|
|
src: image,
|
|
source: image
|
|
}))
|
|
}
|
|
}
|