|  | @@ -202,15 +202,15 @@
 | 
	
		
			
				|  |  |                changeType == 'text' || changeType == 'luminance' ? 0 : '32px',
 | 
	
		
			
				|  |  |            }"
 | 
	
		
			
				|  |  |          >
 | 
	
		
			
				|  |  | -          <canvas
 | 
	
		
			
				|  |  | -            id="canvas"
 | 
	
		
			
				|  |  | +          <div
 | 
	
		
			
				|  |  | +            id="imgCanvas"
 | 
	
		
			
				|  |  |              ref="imgCanvas"
 | 
	
		
			
				|  |  |              :style="{
 | 
	
		
			
				|  |  |                width: form.width + 'px',
 | 
	
		
			
				|  |  |                height: form.height + 'px',
 | 
	
		
			
				|  |  |                background: form.bg_color,
 | 
	
		
			
				|  |  |              }"
 | 
	
		
			
				|  |  | -          ></canvas>
 | 
	
		
			
				|  |  | +          ></div>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |          <div class="bottom">
 | 
	
		
			
				|  |  |            <div>
 | 
	
	
		
			
				|  | @@ -257,6 +257,164 @@
 | 
	
		
			
				|  |  |  import Header from "@/components/Header";
 | 
	
		
			
				|  |  |  import DragLine from "@/components/DragLine";
 | 
	
		
			
				|  |  |  import { getToken, removeToken } from "@/utils/auth";
 | 
	
		
			
				|  |  | +import { WebFileDownload } from "@/api/api";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import "tui-image-editor/dist/tui-image-editor.css";
 | 
	
		
			
				|  |  | +import "tui-color-picker/dist/tui-color-picker.css";
 | 
	
		
			
				|  |  | +import ImageEditor from "tui-image-editor";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const locale_zh = {
 | 
	
		
			
				|  |  | +  ZoomIn: "放大",
 | 
	
		
			
				|  |  | +  ZoomOut: "缩小",
 | 
	
		
			
				|  |  | +  Hand: "手掌",
 | 
	
		
			
				|  |  | +  History: "历史",
 | 
	
		
			
				|  |  | +  Resize: "调整宽高",
 | 
	
		
			
				|  |  | +  Crop: "裁剪",
 | 
	
		
			
				|  |  | +  DeleteAll: "全部删除",
 | 
	
		
			
				|  |  | +  Delete: "删除",
 | 
	
		
			
				|  |  | +  Undo: "撤销",
 | 
	
		
			
				|  |  | +  Redo: "反撤销",
 | 
	
		
			
				|  |  | +  Reset: "重置",
 | 
	
		
			
				|  |  | +  Flip: "镜像",
 | 
	
		
			
				|  |  | +  Rotate: "旋转",
 | 
	
		
			
				|  |  | +  Draw: "画",
 | 
	
		
			
				|  |  | +  Shape: "形状标注",
 | 
	
		
			
				|  |  | +  Icon: "图标标注",
 | 
	
		
			
				|  |  | +  Text: "文字标注",
 | 
	
		
			
				|  |  | +  Mask: "遮罩",
 | 
	
		
			
				|  |  | +  Filter: "滤镜",
 | 
	
		
			
				|  |  | +  Bold: "加粗",
 | 
	
		
			
				|  |  | +  Italic: "斜体",
 | 
	
		
			
				|  |  | +  Underline: "下划线",
 | 
	
		
			
				|  |  | +  Left: "左对齐",
 | 
	
		
			
				|  |  | +  Center: "居中",
 | 
	
		
			
				|  |  | +  Right: "右对齐",
 | 
	
		
			
				|  |  | +  Color: "颜色",
 | 
	
		
			
				|  |  | +  "Text size": "字体大小",
 | 
	
		
			
				|  |  | +  Custom: "自定义",
 | 
	
		
			
				|  |  | +  Square: "正方形",
 | 
	
		
			
				|  |  | +  Apply: "应用",
 | 
	
		
			
				|  |  | +  Cancel: "取消",
 | 
	
		
			
				|  |  | +  "Flip X": "X 轴",
 | 
	
		
			
				|  |  | +  "Flip Y": "Y 轴",
 | 
	
		
			
				|  |  | +  Range: "区间",
 | 
	
		
			
				|  |  | +  Stroke: "描边",
 | 
	
		
			
				|  |  | +  Fill: "填充",
 | 
	
		
			
				|  |  | +  Circle: "圆",
 | 
	
		
			
				|  |  | +  Triangle: "三角",
 | 
	
		
			
				|  |  | +  Rectangle: "矩形",
 | 
	
		
			
				|  |  | +  Free: "曲线",
 | 
	
		
			
				|  |  | +  Straight: "直线",
 | 
	
		
			
				|  |  | +  Arrow: "箭头",
 | 
	
		
			
				|  |  | +  "Arrow-2": "箭头2",
 | 
	
		
			
				|  |  | +  "Arrow-3": "箭头3",
 | 
	
		
			
				|  |  | +  "Star-1": "星星1",
 | 
	
		
			
				|  |  | +  "Star-2": "星星2",
 | 
	
		
			
				|  |  | +  Polygon: "多边形",
 | 
	
		
			
				|  |  | +  Location: "定位",
 | 
	
		
			
				|  |  | +  Heart: "心形",
 | 
	
		
			
				|  |  | +  Bubble: "气泡",
 | 
	
		
			
				|  |  | +  "Custom icon": "自定义图标",
 | 
	
		
			
				|  |  | +  "Load Mask Image": "加载蒙层图片",
 | 
	
		
			
				|  |  | +  Grayscale: "灰度",
 | 
	
		
			
				|  |  | +  Blur: "模糊",
 | 
	
		
			
				|  |  | +  Sharpen: "锐化",
 | 
	
		
			
				|  |  | +  Emboss: "浮雕",
 | 
	
		
			
				|  |  | +  "Remove White": "除去白色",
 | 
	
		
			
				|  |  | +  Distance: "距离",
 | 
	
		
			
				|  |  | +  Brightness: "亮度",
 | 
	
		
			
				|  |  | +  Noise: "噪音",
 | 
	
		
			
				|  |  | +  "Color Filter": "彩色滤镜",
 | 
	
		
			
				|  |  | +  Sepia: "棕色",
 | 
	
		
			
				|  |  | +  Sepia2: "棕色2",
 | 
	
		
			
				|  |  | +  Invert: "负片",
 | 
	
		
			
				|  |  | +  Pixelate: "像素化",
 | 
	
		
			
				|  |  | +  Threshold: "阈值",
 | 
	
		
			
				|  |  | +  Tint: "色调",
 | 
	
		
			
				|  |  | +  Multiply: "正片叠底",
 | 
	
		
			
				|  |  | +  Blend: "混合色",
 | 
	
		
			
				|  |  | +  Width: "宽度",
 | 
	
		
			
				|  |  | +  Height: "高度",
 | 
	
		
			
				|  |  | +  "Lock Aspect Ratio": "锁定宽高比例",
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const customTheme = {
 | 
	
		
			
				|  |  | +  "common.bi.image": "", // 左上角logo图片
 | 
	
		
			
				|  |  | +  "common.bisize.width": "0px",
 | 
	
		
			
				|  |  | +  "common.bisize.height": "0px",
 | 
	
		
			
				|  |  | +  "common.backgroundImage": "none",
 | 
	
		
			
				|  |  | +  "common.backgroundColor": "#f3f4f6",
 | 
	
		
			
				|  |  | +  "common.border": "1px solid #333",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // header
 | 
	
		
			
				|  |  | +  "header.backgroundImage": "none",
 | 
	
		
			
				|  |  | +  "header.backgroundColor": "#f3f4f6",
 | 
	
		
			
				|  |  | +  "header.border": "0px",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // load button
 | 
	
		
			
				|  |  | +  "loadButton.backgroundColor": "#fff",
 | 
	
		
			
				|  |  | +  "loadButton.border": "1px solid #ddd",
 | 
	
		
			
				|  |  | +  "loadButton.color": "#222",
 | 
	
		
			
				|  |  | +  "loadButton.fontFamily": "NotoSans, sans-serif",
 | 
	
		
			
				|  |  | +  "loadButton.fontSize": "12px",
 | 
	
		
			
				|  |  | +  "loadButton.display": "none", // 隐藏
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // download button
 | 
	
		
			
				|  |  | +  "downloadButton.backgroundColor": "#fdba3b",
 | 
	
		
			
				|  |  | +  "downloadButton.border": "1px solid #fdba3b",
 | 
	
		
			
				|  |  | +  "downloadButton.color": "#fff",
 | 
	
		
			
				|  |  | +  "downloadButton.fontFamily": "NotoSans, sans-serif",
 | 
	
		
			
				|  |  | +  "downloadButton.fontSize": "12px",
 | 
	
		
			
				|  |  | +  "downloadButton.display": "none", // 隐藏
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // icons default
 | 
	
		
			
				|  |  | +  "menu.normalIcon.color": "#8a8a8a",
 | 
	
		
			
				|  |  | +  "menu.activeIcon.color": "#555555",
 | 
	
		
			
				|  |  | +  "menu.disabledIcon.color": "#ccc",
 | 
	
		
			
				|  |  | +  "menu.hoverIcon.color": "#e9e9e9",
 | 
	
		
			
				|  |  | +  "submenu.normalIcon.color": "#8a8a8a",
 | 
	
		
			
				|  |  | +  "submenu.activeIcon.color": "#e9e9e9",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  "menu.iconSize.width": "24px",
 | 
	
		
			
				|  |  | +  "menu.iconSize.height": "24px",
 | 
	
		
			
				|  |  | +  "submenu.iconSize.width": "32px",
 | 
	
		
			
				|  |  | +  "submenu.iconSize.height": "32px",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // submenu primary color
 | 
	
		
			
				|  |  | +  "submenu.backgroundColor": "#1e1e1e",
 | 
	
		
			
				|  |  | +  "submenu.partition.color": "#858585",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // submenu labels
 | 
	
		
			
				|  |  | +  "submenu.normalLabel.color": "#858585",
 | 
	
		
			
				|  |  | +  "submenu.normalLabel.fontWeight": "lighter",
 | 
	
		
			
				|  |  | +  "submenu.activeLabel.color": "#fff",
 | 
	
		
			
				|  |  | +  "submenu.activeLabel.fontWeight": "lighter",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // checkbox style
 | 
	
		
			
				|  |  | +  "checkbox.border": "1px solid #ccc",
 | 
	
		
			
				|  |  | +  "checkbox.backgroundColor": "#fff",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // rango style
 | 
	
		
			
				|  |  | +  "range.pointer.color": "#fff",
 | 
	
		
			
				|  |  | +  "range.bar.color": "#666",
 | 
	
		
			
				|  |  | +  "range.subbar.color": "#d1d1d1",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  "range.disabledPointer.color": "#414141",
 | 
	
		
			
				|  |  | +  "range.disabledBar.color": "#282828",
 | 
	
		
			
				|  |  | +  "range.disabledSubbar.color": "#414141",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  "range.value.color": "#fff",
 | 
	
		
			
				|  |  | +  "range.value.fontWeight": "lighter",
 | 
	
		
			
				|  |  | +  "range.value.fontSize": "11px",
 | 
	
		
			
				|  |  | +  "range.value.border": "1px solid #353535",
 | 
	
		
			
				|  |  | +  "range.value.backgroundColor": "#151515",
 | 
	
		
			
				|  |  | +  "range.title.color": "#fff",
 | 
	
		
			
				|  |  | +  "range.title.fontWeight": "lighter",
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // colorpicker style
 | 
	
		
			
				|  |  | +  "colorpicker.button.border": "1px solid #1e1e1e",
 | 
	
		
			
				|  |  | +  "colorpicker.title.color": "#fff",
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default {
 | 
	
		
			
				|  |  |    //import引入的组件需要注入到对象中才能使用
 | 
	
	
		
			
				|  | @@ -441,21 +599,47 @@ export default {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      initCanvasImage() {
 | 
	
		
			
				|  |  | -      let imgCanvas = this.$refs.imgCanvas; //绘制图片的canvas
 | 
	
		
			
				|  |  | -      this.imgCtx = imgCanvas.getContext("2d");
 | 
	
		
			
				|  |  | -      let img = new Image();
 | 
	
		
			
				|  |  | -      img.src = this.fileList[0].file_url;
 | 
	
		
			
				|  |  | -      img.onload = () => {
 | 
	
		
			
				|  |  | -        //图片加载完成后开始绘制图片
 | 
	
		
			
				|  |  | -        this.imgCtx.drawImage(img, 0, 0, this.form.width, this.form.height);
 | 
	
		
			
				|  |  | -      };
 | 
	
		
			
				|  |  | +      this.loading = this.$loading({
 | 
	
		
			
				|  |  | +        lock: true,
 | 
	
		
			
				|  |  | +        text: "Loading",
 | 
	
		
			
				|  |  | +        spinner: "el-icon-loading",
 | 
	
		
			
				|  |  | +        background: "rgba(0, 0, 0, 0.7)",
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      // 直接使用跨域  请求文件流转url 再使用
 | 
	
		
			
				|  |  | +      WebFileDownload({
 | 
	
		
			
				|  |  | +        FileID: this.fileList[0].file_id,
 | 
	
		
			
				|  |  | +      }).then((res) => {
 | 
	
		
			
				|  |  | +        const objectUrl = window.URL.createObjectURL(res);
 | 
	
		
			
				|  |  | +        this.instance = new ImageEditor(document.querySelector("#imgCanvas"), {
 | 
	
		
			
				|  |  | +          includeUI: {
 | 
	
		
			
				|  |  | +            loadImage: {
 | 
	
		
			
				|  |  | +              path: objectUrl,
 | 
	
		
			
				|  |  | +              name: "image",
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            menu: [
 | 
	
		
			
				|  |  | +              "resize",
 | 
	
		
			
				|  |  | +              "crop",
 | 
	
		
			
				|  |  | +              "rotate",
 | 
	
		
			
				|  |  | +              "draw",
 | 
	
		
			
				|  |  | +              "shape",
 | 
	
		
			
				|  |  | +              "icon",
 | 
	
		
			
				|  |  | +              "text",
 | 
	
		
			
				|  |  | +              "filter",
 | 
	
		
			
				|  |  | +            ], // 底部菜单按钮列表 隐藏镜像flip和遮罩mask
 | 
	
		
			
				|  |  | +            initMenu: "draw", // 默认打开的菜单项
 | 
	
		
			
				|  |  | +            menuBarPosition: "bottom", // 菜单所在的位置
 | 
	
		
			
				|  |  | +            locale: locale_zh, // 本地化语言为中文
 | 
	
		
			
				|  |  | +            theme: customTheme, // 自定义样式
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          cssMaxWidth: this.form.width, // canvas 最大宽度
 | 
	
		
			
				|  |  | +          cssMaxHeight: this.form.heigt, // canvas 最大高度
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        this.loading.close();
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      // 删除上传的图片
 | 
	
		
			
				|  |  |      deleteImage() {
 | 
	
		
			
				|  |  |        this.fileList = [];
 | 
	
		
			
				|  |  | -      let imgCanvas = this.$refs.imgCanvas; //绘制图片的canvas
 | 
	
		
			
				|  |  | -      this.imgCtx = imgCanvas.getContext("2d");
 | 
	
		
			
				|  |  | -      this.imgCtx.clearRect(0, 0, this.form.width, this.form.height);
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      handlebeforeUplaod(file) {
 | 
	
		
			
				|  |  |        if (file.size > 20 * 1024 * 1024) {
 |