liu.tao3 1 year ago
commit d21059992c

@ -64,7 +64,6 @@
"es6-promise": "4.2.8", "es6-promise": "4.2.8",
"gc-vue-draggable-resizable": "^1.0.1", "gc-vue-draggable-resizable": "^1.0.1",
"html-to-image": "1.11.11", "html-to-image": "1.11.11",
"image-conversion": "^2.1.1",
"insert-css": "^2.0.0", "insert-css": "^2.0.0",
"jquery": "^3.6.4", "jquery": "^3.6.4",
"lodash": "4.17.21", "lodash": "4.17.21",

@ -40,13 +40,16 @@ export default {
// //
getDataByExpression (config) { getDataByExpression (config) {
// //
if (this.config.expressionCodes && this.config.expressionCodes.length) { const len = this.config.expressionCodes ? this.config.expressionCodes.length : 0
// eslint-disable-next-line no-new-func const len1 = this.currentComputedDatas ? Object.keys(this.currentComputedDatas).length : 0
const len2 = this.currentDataset ? Object.keys(this.currentDataset).length : 0
if (len && len === len1 + len2) {
// eslint-disable-next-line no-new-func
const result = new Function('dataset', 'computedDatas', this.config.expression) const result = new Function('dataset', 'computedDatas', this.config.expression)
config.customize.title = result(this.dataset, this.computedDatas) config.customize.title = result(this.dataset, this.computedDatas)
// //
this.updateComputedDatas({ code: config.code, name: config.name, data: config.customize.title }) this.updateComputedDatas({ code: config.code, name: config.name, data: config.customize.title })
// this.changeChartConfig(config) // this.changeChartConfig(config)
} }
}, },
dataFormatting (config, data) { dataFormatting (config, data) {

@ -40,7 +40,10 @@ export default {
// //
getDataByExpression (config) { getDataByExpression (config) {
// //
if (this.config.expressionCodes && this.config.expressionCodes.length) { const len = this.config.expressionCodes ? this.config.expressionCodes.length : 0
const len1 = this.currentComputedDatas ? Object.keys(this.currentComputedDatas).length : 0
const len2 = this.currentDataset ? Object.keys(this.currentDataset).length : 0
if (len && len === len1 + len2) {
// eslint-disable-next-line no-new-func // eslint-disable-next-line no-new-func
const result = new Function('dataset', 'computedDatas', this.config.expression) const result = new Function('dataset', 'computedDatas', this.config.expression)
config.customize.title = result(this.dataset, this.computedDatas) config.customize.title = result(this.dataset, this.computedDatas)
@ -53,7 +56,7 @@ export default {
// //
if (config.dataSource.businessKey) { if (config.dataSource.businessKey) {
config.customize.title = data && data.data && data.data.length ? data.data[0][config.dataSource.metricField] : '暂无数据' config.customize.title = data && data.data && data.data.length ? data.data[0][config.dataSource.metricField] : '暂无数据'
config.option.data = data && data.data && data.data.length ? data.data :[] config.option.data = data && data.data && data.data.length ? data.data : []
} }
return config return config
} }

@ -131,10 +131,9 @@ import icons from 'data-room-ui/assets/images/alignIcon/export'
import IconSvg from 'data-room-ui/SvgIcon' import IconSvg from 'data-room-ui/SvgIcon'
import { import {
showSize, showSize,
dataURLtoBlob, compressImage
translateBlobToBase64
} from 'data-room-ui/js/utils/compressImg' } from 'data-room-ui/js/utils/compressImg'
import * as imageConversion from 'image-conversion' // import * as imageConversion from 'image-conversion'
export default { export default {
name: 'PageTopSetting', name: 'PageTopSetting',
components: { components: {
@ -449,15 +448,21 @@ export default {
} }
if (dataUrl) { if (dataUrl) {
if (showSize(dataUrl) > 200) { if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl) // const newData = compressImage(dataUrl, 800)
// 500KB,500, // console.log(111, newData)
const imgRes = await imageConversion.compressAccurately(url, { // const url = dataURLtoBlob(dataUrl)
size: 200, // 100kb // // 500KB,500,
width: 1280, // 1280 // const imgRes = await imageConversion.compressAccurately(url, {
height: 720 // 720 // size: 200, // 100kb
}) // width: 1280, // 1280
const base64 = await translateBlobToBase64(imgRes) // height: 720 // 720
pageInfo.coverPicture = base64.result // })
// const base64 = await translateBlobToBase64(imgRes)
// pageInfo.coverPicture = base64.result
this.$message.info('由于封面图片过大,进行压缩中')
const compressCoverPicture = await compressImage(dataUrl, { width: 1280, height: 720, size: 400, quality: 1 })
console.log(showSize(compressCoverPicture))
pageInfo.coverPicture = compressCoverPicture
} else { } else {
pageInfo.coverPicture = dataUrl pageInfo.coverPicture = dataUrl
} }

@ -156,10 +156,11 @@ import 'codemirror/mode/vue/vue.js'
import { import {
showSize, showSize,
dataURLtoBlob, compressImage
translateBlobToBase64 // dataURLtoBlob,
// translateBlobToBase64
} from 'data-room-ui/js/utils/compressImg' } from 'data-room-ui/js/utils/compressImg'
import * as imageConversion from 'image-conversion' // import * as imageConversion from 'image-conversion'
export default { export default {
name: 'BizComponentDesign', name: 'BizComponentDesign',
@ -354,20 +355,22 @@ export default {
} }
if (dataUrl) { if (dataUrl) {
if (showSize(dataUrl) > 200) { if (showSize(dataUrl) > 200) {
const url = dataURLtoBlob(dataUrl) // const url = dataURLtoBlob(dataUrl)
// 500KB,500, // 500KB,500,
imageConversion.compressAccurately( // imageConversion.compressAccurately(
url, // url,
{ // {
size: 200, // 100kb // size: 200, // 100kb
width: 1280, // 1280 // width: 1280, // 1280
height: 720 // 720 // height: 720 // 720
} // }
).then((res) => { // ).then((res) => {
translateBlobToBase64(res, (e) => { // translateBlobToBase64(res, (e) => {
this.form.coverPicture = e.result // this.form.coverPicture = e.result
}) // })
}) // })
this.$message.info('由于封面图片过大,进行压缩中')
this.form.coverPicture = await compressImage(dataUrl, { width: 1280, height: 720, size: 400, quality: 1 })
} else { } else {
this.form.coverPicture = dataUrl this.form.coverPicture = dataUrl
} }

@ -19,7 +19,7 @@ export function showSize (base64url) {
// 判断后两位是否为00如果是则删除00 // 判断后两位是否为00如果是则删除00
return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2) return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2)
} }
return size return Number(size)
} }
export function dataURLtoFile (dataurl, filename) { export function dataURLtoFile (dataurl, filename) {
@ -58,3 +58,43 @@ export function translateBlobToBase64 (blob, callback) {
reader.readAsDataURL(blob) reader.readAsDataURL(blob)
// 读取后result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件 // 读取后result属性中将包含一个data:URL格式的Base64字符串用来表示所读取的文件
} }
// 压缩方法
export function compressImage (base64, { width: w = 1280, height: h = 720, size = 200, quality = 1 }) {
return new Promise((resolve, reject) => {
const newImage = new Image()
newImage.src = base64
newImage.setAttribute('crossOrigin', 'Anonymous')
let imgWidth, imgHeight
newImage.onload = function () {
imgWidth = 1280
imgHeight = 720
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
if (Math.max(imgWidth, imgHeight) > w) {
if (imgWidth > imgHeight) {
canvas.width = w
canvas.height = w * imgHeight / imgWidth
} else {
canvas.height = w
canvas.width = w * imgWidth / imgHeight
}
} else {
canvas.width = imgWidth
canvas.height = imgHeight
quality = 1
}
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(this, 0, 0, canvas.width, canvas.height)
let compressedBase64 = canvas.toDataURL('image/jpeg', quality) // 压缩语句
if (showSize(compressedBase64) > Number(size)) {
compressedBase64 = canvas.toDataURL('image/jpeg', quality - 0.2 > 0.4 ? quality - 0.2 : 0.4)
}
resolve(compressedBase64)
}
newImage.onerror = function () {
reject(new Error('Failed to load image'))
}
})
}

Loading…
Cancel
Save