feat:新增图片导出功能

This commit is contained in:
奔跑的面条
2022-04-05 19:01:52 +08:00
parent eee2611c4e
commit 0d482ad9c4
14 changed files with 140 additions and 53 deletions
@@ -1,7 +1,7 @@
import { ref, toRef, nextTick } from 'vue'
import { UploadCustomRequestOptions } from 'naive-ui'
import { FileTypeEnum } from '@/enums/fileTypeEnum'
import { readFile, downloadFile } from '@/utils'
import { readFile, downloadTextFile } from '@/utils'
export const useFile = (targetData: any) => {
const uploadFileListRef = ref()
@@ -35,7 +35,7 @@ export const useFile = (targetData: any) => {
const download = () => {
try {
window['$message'].success('下载中,请耐心等待...')
downloadFile(JSON.stringify(targetData.value.option.dataset), undefined, 'json')
downloadTextFile(JSON.stringify(targetData.value.option.dataset), undefined, 'json')
} catch (error) {
window['$message'].error('下载失败,数据错误!')
}
@@ -54,12 +54,8 @@ const rangeStyle = computed(() => {
<style lang="scss" scoped>
@include go(edit-range) {
position: relative;
border: 1px solid;
border-radius: 15px;
transform-origin: left top;
@include fetch-theme('box-shadow');
@include filter-border-color('hover-border-color');
@include fetch-theme-custom('border-color', 'background-color4');
@include filter-bg-color('background-color2');
}
</style>
+7 -9
View File
@@ -87,20 +87,18 @@ onMounted(() => {
</script>
<style lang="scss" scoped>
@include goId(chart-edit-layout) {
@include goId('chart-edit-layout') {
position: relative;
width: 100%;
overflow: hidden;
@include background-image('background-point');
@extend .go-point-bg;
@include goId(chart-edit-content) {
padding: 20px;
border: 1px solid rgba(0, 0, 0, 0);
@include background-image('background-point');
@include goId('chart-edit-content') {
border-radius: 5px;
margin: 15px;
overflow: hidden;
@extend .go-transition;
&.content-resize {
border-radius: 15px;
@include hover-border-color('hover-border-color');
}
@include fetch-theme('box-shadow');
.edit-content-chart {
position: absolute;
}
+38 -3
View File
@@ -11,14 +11,16 @@
<script setup lang="ts">
import { shallowReactive } from 'vue'
import { renderIcon, fetchPathByName, routerTurnByPath,setSessionStorage, getLocalStorage } from '@/utils'
import { renderIcon, fetchPathByName, routerTurnByPath, setSessionStorage, getLocalStorage } from '@/utils'
import { PreviewEnum } from '@/enums/pageEnum'
import { StorageEnum } from '@/enums/storageEnum'
import { icon } from '@/plugins'
import { canvasCut } from '@/utils'
import { useRoute } from 'vue-router'
import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
const { BrowsersOutlineIcon, SendIcon } = icon.ionicons5
const { BrowsersOutlineIcon, SendIcon, DownloadIcon } = icon.ionicons5
const chartEditStore = useChartEditStore()
// TODO 我也不知道为什么不能实时获取,必须初始化获取
@@ -53,6 +55,34 @@ const previewHandle = () => {
routerTurnByPath(path, [previewId], undefined, true)
}
// 导出
const exportHandle = () => {
const ruler = document.getElementById('mb-ruler')
const range = document.querySelector('.go-edit-range') as HTMLElement
// 隐藏边距线
if (!ruler || !range) {
window['$message'].error('导出失败!')
return
}
// 记录缩放比例
const scaleTemp = chartEditStore.getEditCanvas.scale
// 去除标尺Dom
ruler.style.display = 'none'
// 百分百展示页面
chartEditStore.setScale(1, true)
window['$message'].warning('生成截图和数据中, 请耐心等待...')
setTimeout(() => {
canvasCut(range, () => {
// 放开边距线
if (ruler) ruler.style.display = 'block'
// 还原页面大小
chartEditStore.setScale(scaleTemp, true)
})
}, 600)
}
// 发布
const sendHandle = () => {
window['$message'].warning('该功能暂未实现(因为压根没有后台)')
@@ -60,12 +90,17 @@ const sendHandle = () => {
const btnList = shallowReactive([
{
key: '',
select: true,
title: '预览',
icon: renderIcon(BrowsersOutlineIcon),
event: previewHandle
},
{
select: true,
title: '下载',
icon: renderIcon(DownloadIcon),
event: exportHandle
},
{
select: true,
title: '发布',