소스 검색

Merge branch 'dev_v2' of http://106.15.120.127:3000/GoldenTech/koyo_crm into dev_v2

jubs 2 달 전
부모
커밋
88f7c6ddfc

+ 16 - 18
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/common/utils/WordUtil.java

@@ -1,5 +1,6 @@
 package com.ruoyi.common.utils;
 
+import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.ZipUtil;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
@@ -9,6 +10,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.Date;
 import java.util.List;
@@ -20,23 +22,19 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 public class WordUtil {
 
-    private static Configuration configuration = null;
+    private static final Configuration configuration;
 
-    public static final String DIRECTORY = "wordTemp";
+    public static final String GEN_DIRECTORY = "wordTemp";
 
-    private static final String templateFolder = WordUtil.class.getResource("/wordTemplate").getPath();
+    private static final String TEMPLATE_FOLDER = "/wordTemplate";
 
     private WordUtil() {
     }
 
     static {
-        configuration = new Configuration();
-        configuration.setDefaultEncoding("utf-8");
-        try {
-            configuration.setDirectoryForTemplateLoading(new File(templateFolder));
-        } catch (IOException e) {
-            log.error("word导出初始化异常", e);
-        }
+        configuration = new Configuration(Configuration.VERSION_2_3_29);
+        configuration.setClassForTemplateLoading(WordUtil.class, TEMPLATE_FOLDER);
+        configuration.setDefaultEncoding(CharsetUtil.UTF_8);
     }
 
     /**
@@ -77,11 +75,11 @@ public class WordUtil {
     private static File createDoc(Map<?, ?> dataMap, Template template) {
         createWordDirectory();
         String filePath =
-            getDirectory() + File.separator + "报价_" + dataMap.get("quotationNo") + "_" + DateUtils.parseDateToStr(
+            getGenDirectory() + File.separator + "报价_" + dataMap.get("quotationNo") + "_" + DateUtils.parseDateToStr(
                 "yyyyMMddHHmmssSSS", new Date())
                 + ".docx";
-        log.info("filePath: [{}]", filePath);
         File f = new File(filePath);
+        log.info("[报价导出]临时文件路径: [{}]", f.getAbsolutePath());
         Template t = template;
         try (Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8")) {
             // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开
@@ -93,14 +91,14 @@ public class WordUtil {
     }
 
     private static void createWordDirectory() {
-        File file = new File(getDirectory());
+        File file = new File(getGenDirectory());
         if (!file.exists()) {
             file.mkdirs();
         }
     }
 
-    private static String getDirectory() {
-        return DIRECTORY + File.separator + DateUtils.dateTime();
+    private static String getGenDirectory() {
+        return GEN_DIRECTORY + File.separator + DateUtils.dateTime();
     }
 
 
@@ -110,12 +108,12 @@ public class WordUtil {
 
     public static void exportZip(HttpServletResponse response, List<File> fileList)
         throws IOException {
-        String path = getDirectory() + File.separator + "zip_" + DateUtils.dateTimeNow() + ".zip";
+        String path = getGenDirectory() + File.separator + "zip_" + DateUtils.dateTimeNow() + ".zip";
         File zipFile = new File(path);
         ZipUtil.zip(zipFile, false, fileList.toArray(new File[0]));
-        response.setCharacterEncoding("utf-8");
+        response.setCharacterEncoding(CharsetUtil.UTF_8);
         response.setContentType("application/x-download");
-        String fileName = new String(getFileName().getBytes(), "ISO-8859-1");
+        String fileName = new String(getFileName().getBytes(), StandardCharsets.ISO_8859_1);
         response.setHeader("Content-Disposition", "attachment;filename=".concat(fileName));
         try (InputStream fin = Files.newInputStream(zipFile.toPath());
             ServletOutputStream out = response.getOutputStream();) {

+ 4 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/IQuotationConstantService.java

@@ -39,6 +39,10 @@ public interface IQuotationConstantService {
 
     String MM_DD_YYYY = "MM.dd.yyyy";
 
+    String COMMA = ",";
+
+    String TILDE = "~";
+
     DecimalFormat format = new DecimalFormat("#,###");
 
 }

+ 27 - 4
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/business/service/quotation/impl/QuotationExportServiceImpl.java

@@ -1,9 +1,12 @@
 package com.ruoyi.project.business.service.quotation.impl;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.FileUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.WordUtil;
+import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.project.business.domain.TqQuotation;
 import com.ruoyi.project.business.domain.bo.quotation.QuotationExportBO;
 import com.ruoyi.project.business.domain.vo.quotation.ElevatorExportVO;
@@ -36,10 +39,6 @@ import org.springframework.stereotype.Service;
 public class QuotationExportServiceImpl
     extends ServiceImpl<TqQuotationMapper, TqQuotation> implements IQuotationExportService, IQuotationConstantService {
 
-    public static final String COMMA = ",";
-
-    public static final String TILDE = "~";
-
     public final ITcProjectService tcProjectService;
 
     public final ITbCurrencyService tbCurrencyService;
@@ -107,11 +106,35 @@ public class QuotationExportServiceImpl
             map.put(PRICE_TOTAL, quotation.getFinalPrice());
             // 电梯参数
             map.put(DATA_LIST, elevatorList);
+            // 测试图片
+            String path = "/profile/upload/2024/07/02/狮子_20240702165437A001.jpg";
+            map.put("testPic", getPicBase64(path));
             fileList.add(WordUtil.genFile(map, QUOTATION_FTL));
         }
         WordUtil.exportZip(response, fileList);
     }
 
+    private static String getPicBase64(String path) {
+        String encode = "";
+        if (StringUtils.isBlank(path)) {
+            log.info("[报价导出]图片文件地址为空");
+            return encode;
+        }
+        String pathSuffix = path.substring(Math.min(8, path.length() - 1));
+        String absolutePath = new File(RuoYiConfig.getProfile()).getAbsolutePath() + pathSuffix;
+        File file = FileUtil.file(absolutePath);
+        if (file.exists()) {
+            try {
+                encode = Base64.encode(FileUtil.readBytes(file));
+            } catch (Exception e) {
+                log.error("[报价导出]读取/转码异常:", e);
+            }
+        } else {
+            log.info("[报价导出]图片文件不存在:[{}]", absolutePath);
+        }
+        return encode;
+    }
+
     private static Map<String, Object> getMap(ElevatorExportVO elevator) {
         Map<String, Object> firstElevator = new HashMap<>();
         List<WParam> baseParamList = new ArrayList<>();

+ 1 - 241
RuoYi-Vue-fast-master/src/main/resources/wordTemplate/报价模板.ftl

@@ -67342,247 +67342,7 @@
                 <w:r>
                     <w:pict>
                         <w:binData w:name="wordml://82.png">
-                            iVBORw0KGgoAAAANSUhEUgAAAOMAAADjCAYAAAB3jqNMAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
-                            WXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nO19XagkyZXeyay8f317unt6uj0Sg7Vg8OpFmFmM8YOf
-                            bIwQxiCBwHq0zcrLPu6usDHLrjF+WpDXfvNig73IGBb8aCMs/8DKb34YvwlGyEhCYCGNemZ21HP7
-                            3lu3KjP2oSqqTp06fxEZWT+387tcKjMj4pwTESfinIiTP1UXAgAAvHjxETx//hYAAIQA8J3v/Pe3
-                            7u7ufuvi4uI327Z9FkKAuq4BAKBtWwAAmEwm0LYtVFUFdV1DVVXL8gG6roMQAkwmE+i6DqqqgqZp
-                            AABgPp9DpFfXNYQQICzliMfxPNKUEPPhvLgMla+qqg0eXdet5ACAldyRzmQy2ZCN4xN5TCaT1Xms
-                            O61P5BOvNU2zwRPLEkJYtbVWf8wXyxHbPcoxn89X/RbzR/5d1634436s63pVH67/LeA2wPRjna3+
-                            bdsWTk5OoKoqmM/nq/6K8p2cnKjyd10Hk8lk1e9U92IbAcBGOdq2sT1xPSaTCcxmsy2ekX5VVTCb
-                            zeDRo0fh9vb2/3388cf/8tmzZ//x3XffnT5+/AbM5x2cNPWqPevr61sAAHj+/C2YTmfQtgH+9E+/
-                            +/eurq6+d3Z29nsA8Aw3Dm7YEsC0StHOpVGyXqm0uXbwyEPzccc5bSzl4/jl/HvLSvlovSQ5uXpo
-                            bSa1ncTTkv/09BRevnxZTafTX3306NG/m8/n/+f999//qx988AKaZjGpTCYTmEwm0Dx4cA4AANfX
-                            t/Dtb3978s477/zBzc3Nb7/99tuTly9fwunpqUs5NIXgKlR6UEe6eIbiZl2Jp3Wd1inOtFx5rQOp
-                            jJzSWdZCkhPLRWl4BhGtE5eXS7PkwlZQGyQ58MhP89JzahFxuvUb60c9POxx3d3dQVVVcHFxAXd3
-                            d+/+/Oc//99VVf3m5eXlf3pwcbayvvXLl1cAAHB3d1c9fvz4j370ox99o2mayc3NjasRvI2lXddm
-                            vJSZlisrHVPennqlKKRUFyk9p85cG+Tml8pKwIpo/dO8OWVL1V3rc4smlzfKSOuF63d2thhw0+kU
-                            qqqCy8vLy08//fSP33vvvV+/vb1dyVE/evQQXr26ge9///v/5NmzZ19/9OhRVdc1fPzxx3BycsLO
-                            FiUUJ6XjPfAOPKmMVc5Dk8tnHeNyOW2SMrA4xdJk52RI7f9UuXJ1Zmi91M61tm3bFiaTCdR1DbPZ
-                            DEIIcHZ2Bl3XNS9evPg377///t/6xS9+AQAAze3tHbz//vt/7Yc//OE/r+u6evr0KVxcXMDz58/h
-                            1atXcH5+LlY+BZoSaDQtPiHwrimnRJwbIzWyREeSzRpskrwpA0SSAZfFdbQGk8ZfU0SujkMhZUBY
-                            8nNlcD1ov2B62nUNeHOpaRpo2xaurq5gMpnAW2+9dfrjH//4PzRN82tvvPHGn03+8q9+fjKdTv/k
-                            nXfe+Utx12w6ncLZ2Rm8evVqwzpSBY27YvEYr1M4wemOZc7aSAKmhY/jbhmWj1Ngrm5RZloPuvuG
-                            eWD6uCyWDQ8YOkHQdrQQ+VD58NoxHuMdR1x3TbFwHaQ2wu1L/2n5yJvWV/qP9aM7sDjNmjBjedwG
-                            URbad1Lb4nrHdokyafWKYwrza9sW6rqG09NTqCA8fvDgQXN+fv4/67fffvtvVlX1Nz755BM4OzuD
-                            +XwO8/kcptMpvPHGG6yAhwiPBdMsVgq9vvDQ9vLXrLPHMnLXS8iFkTrBcPw0i4bTJRpW/lQvh+PF
-                            GYT5fA5N00Bd1zCfz6Gua3j48CFUVQUvXryAuq6rDz/88De+973v/YWmbduvn5ycVLHgyckJAKzN
-                            KzczYsFiOp4h6OzfB5h+PI/yhbCIM9G4Fz6fzWarOBPezaOzNmf9cH6cRiG5SLgsnpk5S8gpQGxf
-                            rX4Y2BpRWjQPvYbjqRF4h1Czhhq0ZQO1bBwPbL04D4CzSBTUImK5aXmOP+YXdSnSpfRo+5ydna3o
-                            xv6aTqcAAPDw4UMIoYUQwqPpdPq1BgD+jtiSTCN6rpd0PykvSp8bLF6/fl91SMlfun54MtoVtP4r
-                            zYfqhidfSf6psqDJ4Cs1AGz7og5mKUJpSpEDrzJqvCRXTUqX0qx0jYdH7px8khWS+kGSUbL4KbJp
-                            8nraz2sMPBNWTj/k9L8mK+d9LP//emMJxbkZWqfSTQzPDpUHubOZd2KQ6snNbpy7zl3j6HHpuK1K
-                            KDk9lvJKCi25evjYs9uM0z39p7Uvlhm3lWdS1/rXgqf/JX5UNv54ReuysYTRBpF0fSgXDzeGNjtZ
-                            sxWn+NYg5PJqNDiaUj6OL1a0VEulDWw6SZaqnwat/yz+KaD19vavh64mHzf4pImcHse1LADAIJaR
-                            UyJutkudmSivFGXgFAlv/1N6HkvlGWzWANVmTy8sWTU+Vv20Qd1HXiyXlo+zgh5d43QvtX+t+lH5
-                            POW3+3+dtr2VZKDP7MgphZdfTqdz5TTFko49lkhLt/hI+VMg0fNMJpr8Vn29cnnlsKwaV84rg5du
-                            qnxafo8cEaabqjHuO1BSwc1yXgWS6OBru0KqXFr9UuXeZT053t61Zl8+nmsl+aXUC+fB/d3M53Mx
-                            ZhTCZlxsNpttEIjpuFy844AKiYWI5agwHLjnHeMv56JIv/ROHFo3rqEwHwptYwrLhdcE0qyvWQSa
-                            RgPL3F0gMQ7JDW4rDofjbvRpBGuy465rMVQax9baGbeHRBvn5/p2H7Dq1AV0t5JUcNczlze/NFik
-                            f5xnKPmGoJnjpnnLpM7eHhyC4u8LdILMRQ2gd5A0Y0u/2gwv0U5FX/dYUlqtjhKdlPZJldnbZtYA
-                            o5NTKn9P/2ryHTvoXTX4mpXfSxtguZvq2YLF5zS/xJRTAOpyWZ0nuWg50BTI2jXGdaftwMnmVVo8
-                            ULy7clRerf+svinBX6vfsUNrEzo4LZdU4+F2U+mgyjnnfr3QZmbLTdWsgleRUtJSrK4lD5VdOtZ4
-                            cHlS+Zeq37GC7qdw5/R6juFoAPhZP8Jyf6y80kDMcZskmn3KarM8F0D2eBGpgzdnoEp3hkh9oE2Q
-                            Fn9Pv0py3id4Bxg3OD00a89gsywT/pWucece9Bl4klzePFp+S7FTLLHGy8pj9Z93MrXaJrV/78tA
-                            5CxdKUuI6W25qYcObQBYrmnq4MjJ54VnUsjJ24d3H5pD0Tk29N1VVW+Ho+6QJACmQZ/Kjs9F4jiY
-                            5HJxAX0cH8TvI62qavWwJo4b1nUNTdOwVgrT8lpvb/25J8bpGw24mJkU64z/nKySxyLxwX2B2zy2
-                            KW17yZXWPCWpzfCLmgBgSwekeCDdoMIvqQJYPxvokYGzYDRGS3nSuuPrGFbfpAzK4nHGY5gVLRlL
-                            1yHVVfamHUNbvw44qDijVEajbc200q/Ewyu7JWtqWc11Ti2nHWvXPJDc99cd1pqQ/g4ZZ9zawNHM
-                            sjVotUEoKYNnoGhKzrkU3kGtXeOOJTm8k5nVnlq75HotnslwxALc7qc16KyBF/NI/zhP7zhjyuCS
-                            YNGXZEvl5RnUHN2UtJTB7uEhtfU4mMrBE0c8qjgjpUEVh7tDhV63lMursDQPxx/nKRFnTKmbZRG5
-                            u2ukPF5Y/fG6wuNuevJy+VLbuFic0YLlpmrXLNfUK7vFRzvm6sKde91XiY7Gu4TX4ZXtdYJm2Y4u
-                            zngsnep1U6VyVr5SSHVrRxwGescZ2zZA00ygquqV+xJjQYs43gQAovJGZV6xhK4LMJk0MJ1O4eLi
-                            AgAAbm5uVu+L7LoAVTVZxnSiEtUQQgfzebf8ZmO1ordAWP0ueFUQAkAI1fJ4fb4+hlXaOv+6DP7H
-                            7meUbVGvsMwPUFU1VFV8Z+fme0hDAKjratVmWB4sX5RjXa9IAzbki8cLOeK3/tbtvUa9pBVW55vP
-                            ha7bcVMZ6mWZmtCBZV/wrniUZy1LLB+W5WsIYQ4aKE08icQ4Hz7H5eiEw22wDA3J68Hp3CDkljUc
-                            8POjW5Yx1f2k5XLK7hq5VtHK66HRt7x2/dDb3YuceqXUfeh2yqVfW4qSoqgWPOs7z1qPnnvXjSky
-                            aXSsdV6ftaIlW+7ALLFmt6xEX1hypZSLx541ear+DdUGq91UreM5IaVdPqm8Vkbb6eR+PXnwb3RL
-                            8S8nB62vd0BpeTFfi4ZWV6nNOHcI89T6lra95lpZ/CV40z07yFz/eOTSrkv15WSX2hq3Jad3nvoD
-                            CG6qNTi5Y63hOBqaMmtKKl3zwMtbKqOla7Q0+h6ZPXJL11J5cHy0fKWQolsp5T3pWv0955Rurn42
-                            dJaxFtF4dvAqsiSsVBkJng6TBoO1kLYUks56muJLbenlha97Znpq8Wl+qT5cPlpGyuNVOE+6ZRWp
-                            /Fx9JHqeNtRktdrHmgBT2ocNbZSaca3ynkEkyWPJJdFInWU98FoSrZxHBm9e7yzOtU1Ku/XRCU3e
-                            3Pw5xyn6J+XXyqQgKc7oqaAknHV9F0gZxN7rQ+NY5OwLr9ypgzWVfh9ok6IHGy8xxmY9hMXzb/Qb
-                            gBHRxHddjBWu39cZ0+k7VT0VwNdC4L//GM9xjCbK3Lat6+ZdOilQF4/7unK8zsmKXSH8DlKaP+ah
-                            Lg73rCddCnC/Ul25SU+6JVFLtxBlwPoQaWn0aLvlxg9pO9IJN+oJt/yKMmKdT5UJ86cbNjSOamGl
-                            zTmu2a6Q6sak0Oubnw4sbqB55Pe4UlY+D48+7ectz+XzelLcscWzRB6vyypd464nW0apYegMw1kS
-                            qdFyXCuOngTO3aRluW1mjbcmU+m7Pqz2lG7Y52TylPcOaI+8UvnUDT2a5q0/Pub44TaiVovmoXJw
-                            fLl6cWmcTnqA867ijNKOnDVLScxpw0ThqQDWQPEMKFoxKeYmKTLXyVxeaYKyZLLijKkDicrhLW/1
-                            pSS/Vp4qP84nDSp6bA1Ere5SO1AZPYOF0zH8qhJJnqKDEV/UflNn1JiP23KXOk/jlaKwmB6VJaex
-                            PFvu2q8WSpDkwUqe44mkrDklWOW1SUqSO7X+8Rjnpbqi9QvHQ9I9ms6t5THoN2MoX6t9t77PiBuN
-                            29yQKixZUW3m8aRb8M5CHqWjMzummeoleGSmZWnH0QlHU26u47nyHE/N/eLktuSgddMGoXfwaW3O
-                            tY1Wb649OVmornD15/QibjBiS4o3GD3Y+iScd4aRKkfLcbOblIdzH70DipNN+6XltHWj97okm8cN
-                            96yZcJlDWjNKrjxHR+KbsmbE59LAS8kjyYHTtfpzsqV6YAAJcUZrRtHKceepgtIyfcp7LIJHBkxL
-                            +s+h6z1OLWPVJTVPSntaMqXI7OGVmkeri2QcJJo5/Q/g+FgqZ9WwQHVdw3w+h6ZpVia6aZrVO02t
-                            imDB67reeA9qCGFFJ+aNsc+qWrzzczKZbL1LM8Y7rRgplY2TS6LhhdVp9PuHuK44Hcsd42M4jon7
-                            J2X3l3M3U+Js62cjad747GisH/4+Jn6nbK3KP5/P4eTkZNnfcwghPm9bQdvG/lnTx8/EhtDB4hnT
-                            GuJzm10Hy2dw4zO8/HtTQ8CuZljRXNdt8bt+pjbGLDuIz7Eu6FttuO6/rQ0c73kKNLcghTamE8+5
-                            QW5Z3xQZuMmIplv8rfpzdZP4aBtJOC1lQFJ6UvlUb0jatca041oLp3HlpZ147jcea94KV98U2tZS
-                            wrsmB1jX372BQxlK5x5IQlJZtLwpvCKs0AY9lmTOdUM4Whx/badQGpTWmlGqJ3dNW7trZSRZuXpx
-                            v1z/cG2uXaP11/Jz5aT6cn0tbbKl6cU6/9ZTG1olPUrLQVrMWjS0AZsCabKhPDzKmtro0izK0eAU
-                            lpOFymBtfnD0vBMSrTO9jvlzg0vjgeWgsuKy2ufMtQkLf1oAH6fo99BxRkCvVmloQ3FCSoK62QlK
-                            hvkByLE8nM/aKePq4pHZ6hQrziXxt+qP+VgD0eJDoU08Wp1pHqt9PedSv3PrUyl0gI/p4JToe/6l
-                            enO/FH3jjBgb703VBgoVUhMQQ1Iwa8B5GswDTE9Kl8619kiVS6s/PdY2mDhFjZAspNTWEh2OHq27
-                            N87I9aG03pKsJNcO+GM+8VfaT6D/eJ0qPcwQ89INtSg/zZcfZ1zXW1wzegdiyoCUKhyPLetBy3jA
-                            KYEVr+Rk4AaQRw6LnzUQuWMuzRqIHB+pf1PXjF4vgaOLBwOVi3N/qb5qdZT+JVm5tpBoc3ys9uWB
-                            1owSc7V4wmDwwMuT63hLASgNTyNZkwFAmpuaCmnSowNbGxQp7pGkjFZbpdZTmiy0CUUbBLg8N+lq
-                            ebmBbW0wUdloG0sDUwe6HS7GfriYVTS76/hQBfR5NSoANeuL+NAi7he/m4i/sxjzYHq4USlwg+B/
-                            KjeXh+NjNRamL9Hm6h7PU55ns2TAMVgsC5c/wjNpceViOvdNy1hP+kwpVmyq6NwgC0F25WL+qCOR
-                            L/7eJzcxxWv4udeoc7Senr6hbix+VlXaTeV+JeDqZz3PqJn1PkibUdb5tH+Lj4eflWbx99Qrh38O
-                            raHglX9Xsln9b8nEWe4U3jlgv7XhUaTUYw3egZPbQFZeTeYhlEdTBq+SSHS1Y6lf+yK1z1NksPSC
-                            m/ioPJ406Vyj4/E6rMka/5vPM0r+tCS8ZxOGNqq2DuL4pIDWgcpoKbC0NvTKhPlyad72s/Jx60Wt
-                            bqn95IHUd5SnVMaii9tdcxFxOZoX59PagKOpDUiurh4dwcnm84w0HTOj6X07mKNhDR5rVuLoa40v
-                            HWuDxOLvaRtrwuM2JbQBZg1Imq8vLD7417/TmM7f2uDTBi9HL0Ka/Gj+VMOR/Dyj1LEp1zWkdlJq
-                            hTWlS7FA2mDwyCCVzRlUUh7PIMTXhhoUGu1UxaVWkOqLNCFq1o3TNamvaVl8LA14qw0Q1dWR+OEb
-                            6VqKUnngmZ20hvXS95T30s4dhFxaSvtZys3l0eq9i4FYgpdWb2uSlNL6lKXlJf2U8kn/5iNUVoP0
-                            zdsX0qzIySHNiBxNb1oKfy9SrAs+L+Vy9oUm8xBrVUyvz7rUI5uHT27dGi52SN8Zyplteo2rCLdw
-                            pv80XpRaqaoKUFVhdbz9u3i+DITvM24/hyeDyrOIoc4git918+V1fB4YHmH1T9si0tVkiHLEfhoS
-                            9sTVouPtfqvrKHNH8kTZ9e9D0jgn1k1pQHAelbc+tB4hrN/FG2OiMU5On7Ol/cfJuv1eWeX7jENi
-                            CMWxTL9XDq9sOXXwWDqtbIn6DQ2vNzGkbN6B58lnGR/PuSYnl+5aM/aBp5O4mYybZbUZL1cGiYeH
-                            Rh83NJenRVc75tq3BFIHmyWPp5+lAeXRHy3dqkvKoKSTppQ3/m+ENqSYWh9IsT1M39rpTB18lIYe
-                            Z9zmJx1bHWzx59I8SmTRB9hnnNHfZtaaltaFoxX/uZ1Uja7WJtpEi/lZcmu8ub6metHQBCkA3xdc
-                            o1FFlSaDfccZabgnNU7WR/m99aM8jinOKFmkVNm4vpLk88R96bmmexFcnJybTDgeW5ZRashceGaW
-                            VF6pltJjfblzbVCnymEpX47VjXn2G2e020/jbVkVzgrSQc1N3tJkjmlTfbfijFQmi750LI01897U
-                            0rCsGXetr7JafLhzy3p64VG21HJaXssqSddKwOpDq1xqP+dOhPjYc+7pQ80ScvTp5BKC497UUhhq
-                            gGsDm1PM1DgjbRMuz5Dw1k+Scx/QBs9QcUaLv6fPc1xXjwzeuppBf++i24PcexLxM2T0e40hBPY5
-                            Qk22kvdGarcPluCDY1TxNz5LN5lMYD6f96Lv4a/Bql6M0Wn3jFr8uTbAsUeJFmeV6POI3POUXJwT
-                            AFbPUkZ4vl9K24/yw3HUo4szDkUjx+XJ4Zcrf4pnsSur7eVZov45MpTitav2PPg4YyrNnPy56xNr
-                            jaPR6svTYwk4eTztm4rUwaa53pK8Gk+OzjENxI01Y7yQE2e00vvGGakfv03HruiQcUbKC8tI+XP5
-                            rfWgZRG5dtllnNFqsyibxxvh2g9fx7qTEmf0ym/l4+Qo0X6r5Yc28ErPntpsRjtSS+sjgyWLdGzN
-                            5NZ5X/lzZPbIWQoaXYun1X6pMpS0jkO2GUXvOKMnXbN+Xlp41tycmUyypvWVzq1Jymu1uGNt8qFy
-                            W2X3GWe02k+Sx8NfsoKSLmCeKRbPm4+rQ6kBD3AEccZSyqLx4c41BdZ4pMzOWv285S25rfYtiVQe
-                            XFt56mRdHxpDeRQ1vpBqFVOZ5tIrJUdfizaETCnwyrxv7FuWIfkP6qZKM5F38HjikBLtxfX4vCGs
-                            fqnLUdfxWbYWQqigaRqoa1h+n/F063uM+Dx+3xG/6zPKvZC9E+u7drEA5e0QncX3/9bF1vXAcTD6
-                            PGMI+L9FvKuN33U7tKhdKsDfAIxpC/k2+S/kbJf5AqIDy/ItVJUeau6rfNxNJNjNTC2P5YlxQHot
-                            RW7sSlM+IYSt98LSCd3io9U/psd/95P+WmVShSkJHIjFwVnKe8SIEih1IwdHY2swpjKy3sqsffxj
-                            MSvJGxXrPJsbFNwMRcvk1GXE6wdtwpbScid5+oQS1c/ecUbvLmmfOGOJjZwRIzRYO9JcvBvfpueh
-                            G88lN/0o4owSjdhw2v+IERawnlCdoXrUxypaNHrHGa1v0MUB1DfOyNEcMaIv6A3dnDWk6SkTvuSa
-                            cvwabTfJA2vNqO1UxXPuNjWa5tn1HdeMI0qAc1n70tPWihGub21o8K4ph7Jm427qiL6gFlAKcfXl
-                            Yem/GdqIzw8CbMeHuIHGfZ9xdSPsktZm+e1n1TDiM2NUjkgHxxCxzBFUhgjsZmALyzUYTstZi3I0
-                            vXRwPm5NjOvKtSMtz9FJlR+Xbdtu4zrlT/uC0vO6erS/JPm3NkWQ3gAsYs9YzviNyUVd1vHpEMLW
-                            s5i0jrT9Jdm1+uO6FHue0WP19uk2psg3rkmPG0N6RKWsJAdzMEqj2UqLx5pSH4LCe+sy4jAh7VKm
-                            DBpq7azyJXdU8bWkO3C4+Ahncq3rJS2PRUfb4OFkHXF8kGJ3OQOS0qPpNM7opSvtqCa7qVocEF/j
-                            jr1lhobH8o1u6vGi1CDkznNpp8pnWkbLzaSziGQFh/LjPZbRkz66qccJzSp6+4/TTWljSNs88sjH
-                            yRrhtozxN2W9KNHateXhZB4H3f1Bn3WjtAMdf0tv2EgDv+huKobXTd0HvBPGiOPCse6gYjQ1VIu/
-                            AIun4UKIXzFcflmwWr3APf5Wy+fmKli+VxJdg25phuO1LkBTTzYINPUijhO6AAA1QBQ0/iKGVagh
-                            tAABAtTVgk43X/IINdTAv7cyYsFhnS9AlG/xt/jWHqz+YwqE5YwV6piw+sX1XxTc5Fnhf2Ncr+iH
-                            sOyHGtFdtFEVlrHbZTtU1SJPaGGVtiXXiv6aRxXW7bbgFVb9BcBbiWDUD7c/5y0BfpaTKhIAVBP9
-                            vbP4l07oMU6IQc8lI4CtXowvxrhhCGHjOUn8fca6rlffZ5xMJjCbzbZoUz5WOmsZ77Prdt/qo6Fv
-                            XXPK9127a+V2uaxIoV067+q1G5bLpsUZ7zOs+peIo1rra285a/3Orfmt8h7+np10S2YPbyq/p31z
-                            +qe0XnsjDVs3iks7ozhtSP88FZ4ZWdp0Sq2HVk7aMcvdzZWU1tqdo7vZtLyUx1teq581oLyDVtJH
-                            Kn+OZZJ2NLl2oFaZmwBSPALpOPJ0uamcm3BsVtE7i0tlrfZIpZkCD32PPF65vRY3JY9FX5KTDgo6
-                            QDxI5e2hV1KGiAYncrNNjpnfJVJmptL0OatLZ9uUzqX8vPRTrCK9ZpVPrZ81aadM6tIgTRkMlvz0
-                            OI4B7yBN1T9KE4859r2pUkUkpTl0aPVILe+pfwr9nE5OscyaR5DrLUj1y7WO3vblLGYOUvRYstK5
-                            fOkxvrbTr1AdAlIVb180U+kP7QGk8CntrZSsmzVJ7EIm0U2l5lsy0zhPikDY9clxoTwuluSKcC6J
-                            5J5pvIb0BihvbhZOtbKaa0fzaW1EjzkX1ZrtrfQY4+PqgflK/Ky2wfS5utLnLWOcMj60juOAMT3S
-                            mc1mG3FNTu+4+kmoJSLc+YgRAHnWZQhLUhI5y5bSqLV75UbY8Lp3+4R3Teal4z32pnt4Dr0UsPjv
-                            QobVUxvUTR2RBuwiU3d5F3xT8lEX3VNO2nFNcUnZ40SLVGozhdKNv5xLLLVX6XFSYys4uql52Nes
-                            7YG2xsp1zXKsXx++feT20Od+pXyl+WNsWUZ8fGiKdYiQNo/wtV3wT83jdVepVZDikBwvznJtKXXP
-                            teRQbYwnAckqljZWW6GN0Rr2x5BKkgrNXcx1cXPz9bUufde8Gl3ul6ZrxyXw2sUZh8Ahu6mlUHK3
-                            MXcTZwhoA29XMkSY32f0vPfSC1qhXVjh+M1Gaaa2ZNDqmusicsCxLHxNi2N5aHN7AimvjbDAyUCX
-                            PNJmy+IZPmf7hwBVAJhUy/egBoDQdgCO95ZKehvbl2vX+C5VXD6+czXGDpumgdlsJrZn6gDOijOO
-                            ruyIfSJV/7j9kENEI8UZAXhLhjcq7qtLNuIwUUr/JG+B8sGWUTJU2uD2DvzIx4wzcs+9cTuHI0YM
-                            AUv/PDooLUcsXafXNU9RWkKkjBF3nPFYTP2I+4k++meVpYPaYzk5Wjky4vWmGWeUXIMxFjliF7D0
-                            z7sBZw02ibd0bg1I7OZaiPlcccbRKo7YJ0pZRSmN7jJbPLVyHA/PP0BCnHEchCP2iWPQv76TRtM0
-                            zdaCuKqqjY+QpggBsBmnjHG+eB3/Yp5aBfqkcwt0nE+7jc0Th9TWIB43JbpekWeMb3nv4vG6aVae
-                            WNdU/lgGunSx2s+zQ2k9DyjFCTn+Uj4NuA9j/qZpNnhzfe29XQ6Xzbodru8sdQyz3Ij7hV3rbA4/
-                            dgNHusYtplNnvjFOOaIkpDUe1s2U9V9Oec67827g4PINJxDHXNrR4nZXpWOpzIgRElJ0hHM/pYGk
-                            5U0pT/lLg92SGQA96a8NSEsQz8K1z+J2xAgNdBBYg0KybjnlpTWjxyrS8huWkTKLmTxWTZpVPJZ0
-                            xAgJKZaFS/pIsgEAABUFSURBVMsxHCnlsTtK86Zu4jT0opQ5Za3ndW1HjCgBab2mPSXEHeeU5ywi
-                            ppEy4NkXUlHG3LklpEVvxIh9oa8uetaLqTwWlrGu1t/zqyqA5YwQKlj9AyytXDzGRJbfs9sQCioI
-                            XQehC6vyuNzGfLP8MOSiMutXMXRdt/iWYrWUC9a/8RuLi3T7+4xrXuSXpLPy1ZuxI/wLsHzvZthM
-                            X3zecfGdyw42Z8gYu1258Mt6VYDP19cA0NPtq29Lbi8BtPqHav0L8bda/655LeQFVA/ASkX6IWZa
-                            txsqt8zX4T4k7RQgwAQF19b9iqgb7X9Sbzh3S7Zrq4XbW8qjldcsKJWFpklLMezWdt0clg0kv6pR
-                            u+bdzJHgKT9a0hES+uhGbtkUvdaspLbRU+MLOEG7xh1zv1qFNAG569YMNeL+I9cNzDEYXr6a7kvj
-                            BZ/H/7qu1w8XcwtO7ArRfJ4KYHryjuqmiystnnFFxw2g+wPPBgdAfpxamri9A9LyCHNumdywhsvX
-                            hlRVxccZLStZ2ipy+TyzyojXB7lWkdIo4aZaOp5iEfF/wzGR3EPJQlLrSZnosxpvkT2z3yKfmDzi
-                            COCxKn3u3pKWP14amkW1lk7c4N8ugzYDcSFtFFPiKbOMd1ZLnXFGvB4oZRW18z5yeHRa8jQ3dual
-                            mcM7I3gE8qSPGKGhhP6U0sGcNaIHWzeKY5eTuqjcMc5HnyPDzzJqgtPyWCZrs6ZGcU7ulQzeu4Uk
-                            cM/LRZTYSEp5ZlFaOvTlT+ly8bxcxD7gno/09o/Vv5b8nLcnpdFrVBYunVv/RWjP04aw+X7W3nFG
-                            Tejc9H3gmHZoj0nWEQt4dL5InJFj2HdA7xKS1T80HIucIzah6T0+LxZntHa8PHHGfUBS8EN55tJ6
-                            XnTEYcPe9FmPu95xRoupN33fOHSrc+jyjdDh0f8iccZ8q7i+J3lfoIpNlX7fE4fV5iMOG5bRwslF
-                            4ozHbhUjDtX6HKpcI9KguazqbmofN9QS5NBxiAp/iDKNyIPipgaoqs0F5SL+AVBV9NuMOFbk2+CI
-                            N8LiOBM+ruuT1TneMGrbFrquhaqql/8LPov3uUZ3rdqiS2E+78fEqbCMUszIU3dKy7rGQdss88hQ
-                            VdXWu0e3nqkMm9/jxMuJEsB8qPyesrTM5vOkC71cXKdl15uEi2NY5q2grqM+2bLENuGu0bbE6VRW
-                            vn6IZiTkAWcxpXwjjgspAyRnoB6CZc+VIWeSz8HGbqp39zR3R/U+gpvtS97BsgtY4R1PWg791LIp
-                            aVZeb9lcjyYFkWaDByAVQIotbrp222UOJUZXAim30x1jvaXdY+mWMprHswzQjj16zS1FUpYINH+s
-                            wyLNT4fyLDEoMd1as3ol44z3GVQph5g9h4Zlvfru6JbYES4hQx/Zrf2JvmDfm4qFsKxjVd1fqwjQ
-                            r9GPZUBa1lGLc6ZYRo6X1URSee8mE7aC/GacrqeSRSyp36vNTG7NiM+98Uec9rphVzPnEPCsF0tY
-                            tT50+noauetFS4ZSbmrE1m6qtmNqpY24Hxh693BfbmpuuV3tpjacCcb/WpwNQI6neIWNzwtiOjh2
-                            E5+JxDOT5aLg70rue5JYu/PrOCmAPrH12SWk6LoOJpPJRrtOJpNV/BE/T4cRr1nf6OzbvnVdr+Kg
-                            sa/xedd16uaN9/uMkn7G52FjXhoXpy465sWNEbq5xXmPnBwAaAPHKmSl7QpDzEil3LAcfseIUtYl
-                            Xtf+h0Afq+pdp1prZa7MxsdSud1TmiadD4khfHWLn5cHt0bk1pBSnl2g1Jq2z5ovpxzOL7Uv/dXq
-                            l9oX0sSgTRxSPk4+mr7lpmJCkouKd6eG1impcTmXRSuvpUtur2dQeuKMkrvknWVLgPKV3DepnLaj
-                            mitDKrj2pXoq8bPipNov1Q96jvNoaVxZzEscjFyD53ZCKQzluvRRsFiGUzRpMtMUqDS0AZAiB22j
-                            VPk1q+QZEFr7cudaXVPll3QCDyxPHittI87IjXBpxK8rM7zLKF3zNKp3cFkKkoNIR7KKnlhZicnH
-                            akOrbAmryMnS1zOQLAy9ZsmvuZkRknX09iOlwW0AbTxCJa0Z97lejPA0fAm6OTy4GVyzBKn0+0CT
-                            J3ei6itLKh2tfT31s7wDD09u8NJ/ib4kP/3feLjYg33uqO5CeYfCMcsOUFZ+j2JzrmYpnn1oeCZv
-                            aQBbsjTU1KY2Rl3XG7EggLUJ7rpuFbexKkkrQXnjeJCn8lGOvrBocOmeMJEXVh/sO9zUV76uA6iW
-                            39iMIU16DuTDmpFlCJG+nB6PY7646cjFfeO55C1iUN2TvEmrfRbjYyGbPVIOBENaln25jseKHPl3
-                            1X/WNcst9dDTaOS2TQgBtj/7eiQYunNz1ov4GrdA5/LsAp61k5dOzo7kkJOd1L7cuWatrPCDlE49
-                            Qom+R/6DH4xcY0uL5T70U2fSiNc9zugtLx2X6kPpGte/2nnKQPTSt2SPNA5+MAIM70amKKdUnpNx
-                            jDP65OiDXLcTwLZkpdI14LJHMRg5DOHu4OMSM7fHTU2xLH3kkK55+GtxulT5pXbOheQmataNO6fX
-                            vOlSfq91HN1UgT6X5qWBf/GNEpTH0Fbekg3L47Vwfa0ilYUe98GxrxkxjmI3tZSl2ieOVe6IXbiW
-                            pWhqrmuuW9uXvgcry0ifG+OsEH/ME44xF6u8Ben5sshDW5/hMlxcqaq2n19Llc+CNVvvCtIdVbhN
-                            U11QDzglTrGQOE7tLYf5xPJSnBDrEI050jbTLKdWRwsrXZSISbBmDS+dEbtBnFik/1yauygjle/L
-                            P8fyWd5ZH+8tlm24wqnn+Jo06444XOA1JL4m5aPHHvoa3Zyy3Ppcs8Iey0Z1WFs3ckgJadByAMvb
-                            4TjGnJvKp28TH63i7lDC4mgbWJyCpsQZJVn7WBEqn7UBlzIQNZmsCSjX+MRyDb1o+eJaRfq6EiPK
-                            g3Of8C+37ub6Odcq4vLccYmylvwSP2lXVKMt0bTSJeByjTW47MEnb+eOburwKDnppbimJS1bTjkr
-                            D3eNs5A0XojBWdHS1hHnb/BFqRLauWc9OeJwgRVSi+fuK85orRk98gPkrxl3tW4EIHFGi0jujDRi
-                            f4gKJf2n0CkpU58ypct79DfFW8xtq2bxPFl81mtFGmD1LcawcY0eV9WiPBejkYTcFDg+tCY9T7k9
-                            S+Hjqup3E1HK/YN05qQujuTqcGWl/BJvCVQGLi7LPbPHydZXySX5SpSXLI713lSLFicfLh+fyaXv
-                            B6YWmVszpqwbV3HGlFlnnxZvXH8eBoYYtEOXL0lLsoy5bvjiA8Adf2+qRXgfAzL3RtySvOndP68b
-                            cteOQ7qYWBZvPqmMxBt7GZxlBOBjk566YsveaEJpLphm5kuCqyQ3OIbkLzXqLieEfYFTtpQboiXl
-                            LDkorTgjzpMjPx0D3MD0yGzlWd2B4xGwz+K0BFIacUi+3BrhviPXKuLy3HGJ8tyEweUpIb/lNebo
-                            aNQnNrRhbUrQGWJISLc77WMwvG4DEEBW4pQ1kXReYlBaG2Il5KfjQZKhb90abUAdyrrxUNaLdAZ+
-                            HdxUgP5WBdPhjvuUx32TEyfNXTNy5T3rVonHajfVi0NQvNfROh0CSvZ9X1p9B3JfvtRa9uEXH10M
-                            IUBD3xNJmVnKH7+lh+NdnrXleqbafn7MQ2ddZvt9qphe27YbdaHrPYt+X2C+ANvPU6Ys8DnLTL+f
-                            aH1PkcLK73nv7ZCI+onbj/alFCv0tC23EUP1EcuB6eNrkmW22g/LeFRxxhHHiyH1JtU1PEQdDkF4
-                            b6q1Y3SIlRlxuOizVpS8M2uvw7uZw21UcmnaelBL9xq3qqrsOCN37GEy4n5gqLViCl1urYaXMx79
-                            ldxJbslCr1kbnJ4NUE/9ktxUrx8+YgRF353UvrQtw0LTS55bsq82cCRhNTNLzfeI+4t9DByaX9rU
-                            kzbiqP6WuHvIU8ayzlKZKFNtWcJcwUaMoOjrpnLXPfpr8aVuMFdWWg960r3/RxdnHHH82IceHYPu
-                            iq/doC5BvE6Bg5Y0XXJhN3eqFs9SbvJf/2/SCOSXj5NJbjSOH1FZUuQvCet5vL4y5LhWXJ4oS13X
-                            G222C0i6KLUPzs+5stzGDi2P6VjpWv9NJpMtvjg/jkOyGziW75vTCV6XV3NJSmHfs+S++e8DQ9a5
-                            r24eCmppFuCsI3ds+exWea0cPueOU5FDp8SaoQ//Q0DfCXLX9S5ttXP6W/qVrgGA/BJjqYBXCGnX
-                            SnI1LGss8bbAyZP7KBal5U2XeO5KMUuU9yhZiiyl6p6iP33oS2kA/jgjlx/naThlzZ3RaT6vAnoG
-                            SAk3OffJA6k9pOfnrEZP5X8fMOQk1GeC9dIH8Pe35GVK+SO2NnA8g9AzIOki3zMgOeEt+SyllgZh
-                            jovFpXnSpUlpFwPSqqdHhpR+TJHHU97bRl796QOLVqp1pvrDrhmxdeSua8caQ4mHt3K5ilBKgSyl
-                            9CjtkBZiCHg8lRxaJd3UnLRU+jn9zf1qk8TWbqollJZfy1OyI/oqwj6wb/6HhLEteDTxecQYPwJY
-                            NJYWv8PHnPUEWLupmI7Hb+ZoWuW5/Fp8CT8Hx3kAGNw6QJM9FZpro7UtrgfOQ9+bGt1h6XlKD3Be
-                            rZ05cHqUul7XyqfUQ+MhtZ/0ZAfHn5PDioNj1DFoH9/dGP+lgWS5pFwFuTRvOU95S5ZDwxCy5brt
-                            9wHH5vpLaPCT1NyOqmdHVLIs1jNgUj5Mk16jx5ZlttYUfdYcWt3oIz5SHpqfq59GnytH+3GfG0j7
-                            gNWvQ/DTdN2LrdAGJsYpuTRApMFjDShrIKZYUY/Vxvy8LqjXRdXaUhoQ2qCQ6u4JmXiv98W+LZGk
-                            QzhtF/yltBSYH6qgPq82SLDSagrD0ZPinNaMI00GltXiYOWzLJBUJ4u2Njmk0NfCNvfZKlp13wV/
-                            AP29rR6IzzOmHkuD1CrrzScdWzd6ey0epW3d1SGl07wpbqI1iLi0vm5qX+Xdt2WM8HpIu5JBuybB
-                            vWakxCXGOQONUyhtoFA5JKthTQzemcxbL8rbutkAtzGXR/r1rhc9148dlqezKzdV6z8varp7So8x
-                            U4kJN3g8A0k652Apkca/r1VOpWPRHhp9Z+gR+0EjPU+H308ZoVkgafb2upqUf/zNVSLP5gwXa8Tl
-                            pckHl/e4qtp5X3Dtj70c+t7OXb8H1apviRghjaNib8/iT9uDk0fTTyvOSPNTeli8GheQ3ENK0HL/
-                            uHyplrGv0pYuX9Jq7sJKjZYwDYfQXu4n/a3BxA3SlDijRNeCJKdkseMxtXxSeU4e7y5qTB8yzmi1
-                            zQgbnn6xdDk/zrjOlzwYJQXlBqPHgli7likKZ7m1dLCklLcmFWuyGjLOiOkM7RZbMu66fF9oA5Fe
-                            k8qW2kAyB6MVZ9Tig/E31UXVrkv5NCtlpWnlvXKmThql44yUrjUxjdiENGHi81SPKBXZL6SSlCXV
-                            smDkVMYbZ9Rk0spr8njSNatYIs6YO4mUgkXfsgyHMGFo1lHyoiw6OUgajJihVs4jLD4usWakZThf
-                            X0qzrCaXZvHG59qAxHLkxBkxrft0V82uoA1EfE3rHy3d7pO151lLA0hzlTglTZmhLQuQM8NY/PuU
-                            z5F31xZqVzxeB+ypHW/q6XR6PZ1O4eLiAl69egXT6RTOzs7g5uYGzs/PN24ESHUfAbYHsWZ1OUTe
-                            +Bxfo+mYD71xIeaP32ykcsZzHKPCcSRKf1cDbMj/vsDtxf0Pzf/QMZlMoG1bmM/n0DQNnJycQNu2
-                            0HUdnJ6ewt3dXXyW+L16Mpn8j89+9rPw0UcfwePHj6GqKri5uYEnT57AJ598ki1EimXwWJbS+T35
-                            hlKW10EJRyxwdXUFZ2dncHl5ufHg8nQ6hZubG7i6uoI333wTXrx48V/qm5ubf//RRx+FrutgNptB
-                            Xddwe3sLJycnWbMs586muK/Wecoxdy5Bktka5FodU+XXlgIjjhNN06ws4MuXL6FtWzg9PYWzszO4
-                            uLiAz3zmM3A3u3316PHDP6nffvvt7/zsZz/7v8+ePYOXL1/CyckJ1HUNv/zlL+H8/DzJ1fGk07w5
-                            5TganjSNnwZpstHy0eseGbVyI44TcQxdX1/DbDaDpmmgrmuYz+fQtjO4urqCn/70p9/6xje+8dP6
-                            i1/84vwLX/jCP27bdhat4eXlJVxfX7uUwRqY+Fw69g507thLXytL0yTrlDPwPfJ7yo84Ttzd3a32
-                            YZ48eQJN08DNzQ3c3t7CbDaD8/PzD54/f/4vzs/Oof6VX3kHvvSlL333gw8++OaDBw/Czc0NnJ6e
-                            wvn5+WqjwxosnrQIbSB6rtPjPlZUkpf75eh4LFvqhDIOwvuHtm3h7OwMmqaBq6srCCHAW2+9BU+f
-                            Pp1fXFz8o6985SsfACxvFH/27Al8/vOf/2d3d3f/OYTF4rKu69UXdDz/EZxi4zR67LFiXoVOtYBe
-                            eN1Jqe6eCcKq94jjxOnp6WpXP27aXF5ewsnJSfeDH/zgn375y1/+r5/7i5+DV9evoL6+vgMAgK9+
-                            9avt9fXV37+4uPjjq6ur8Omnn0LTmG/lWCHHHZSuWekeWXLSrDze+uXyHXH/EEKA2WwGXddBXS/W
-                            kA8enM9+8pOf/Pa3vvWtf/XOO58FgMVGTxVCWGZc7KJeXr5RffOb3/yNm5ubP3j48OGT+Xy+iLOF
-                            eoNBCIvfaiK/2sLzZIEHVbX4jl2UNV6rqgratt16ng2nh7B5Z0RMr+sa6roWX0cZQb0DKpd0h0/8
-                            teSj+Tk5NPqxDrhetL4a/b7PN/alj589jOeRlueOosiDe54Ry2TRiDJz702N4GiuVYLq+aIeMb54
-                            cXEBt9NrgFD/sJ7A1//hP/j177755uONL5PW8/l8JcD5+TnMZtPwO7/zW//27Ozsr9ze3v4RALzs
-                            YxH6QnIBS7qhuWUOGfetPqkYsv4ptKuqgidPnoRfvPj5/7+6uvrd84vTX/va17723TfffAzXN9eb
-                            eUMIqzsCPv30U3j69CkAAHz44cfw7NlT+MM//NfPAODvVjD52wDwbgjhcyGEyxA/QV7zApa6TzLO
-                            cpJljFad3u2By1iWUZts6ExJId1Xi2dqz8wv3TQurR9j/slkwlpGas0l+vfBMlL9wHUuaRlxHeOx
-                            YBlbgO4TAPjR6enpezc3N/9tNp/+r9//vd+/WdU7dFBX9YZl/HOarJuqP1byWgAAAABJRU5ErkJg
-                            gg==
+                            ${testPic}
                         </w:binData>
                         <v:shape id="image82.png" o:spid="_x0000_s1384" o:spt="75" alt="" type="#_x0000_t75"
                                  style="position:absolute;left:0pt;margin-left:374.65pt;margin-top:10.3pt;height:148.1pt;width:148.5pt;mso-position-horizontal-relative:page;mso-wrap-distance-bottom:0pt;mso-wrap-distance-top:0pt;z-index:1024;mso-width-relative:page;mso-height-relative:page;"

+ 2 - 2
ruoyi-ui-vue2/src/components/element/Dialog.vue

@@ -10,8 +10,8 @@
     </div>
     <slot name="footer">
       <div slot="footer" >
-        <el-button v-show="this.action" :disabled="loading" v-if="showConfirm" :loading="submiting" type="primary" @click="handleConfirm">确认</el-button>
-        <el-button @click="close">取消</el-button>
+        <el-button v-show="this.action" :disabled="loading" icon="el-icon-circle-check"  v-if="showConfirm" :loading="submiting" type="primary" @click="handleConfirm">确认</el-button>
+        <el-button @click="close" icon="el-icon-remove-outline">取消</el-button>
       </div>
     </slot>
   </el-dialog>