makeLadingBill.vue 9.72 KB
Newer Older
huhaiqing's avatar
huhaiqing committed
1 2 3
<template>
  <el-row class="shipping-makeLadingBill">
    <el-row>
4
      <div class="title-orderNo">{{$t('订单号')}}{{orderNo}}</div>
huhaiqing's avatar
huhaiqing committed
5
    </el-row>
huhaiqing's avatar
huhaiqing committed
6
    <el-row class="ueditor-row">
dragondean@qq.com's avatar
dragondean@qq.com committed
7
      <vue-ueditor-wrap v-model="billContent" :config="editorConfig" editor-id="billUeditor"  />
huhaiqing's avatar
huhaiqing committed
8
    </el-row>
huhaiqing's avatar
huhaiqing committed
9 10 11 12

    <!-- 审核流程 -->
    <el-row class="process-area">
      <div class="process">
13
        <div>{{$t('审批流程')}}</div>
huhaiqing's avatar
huhaiqing committed
14 15 16
        <work-flow xmlkey="bill_lading" v-model="selectedUsers"></work-flow>
      </div>
      <div v-if="currRow.status === 1">
17
        <el-button type="primary" @click="jumpReviewDetail">{{$t('审核中')}}</el-button>
18 19
        <el-button plain type="primary" @click="canclAudit">{{$t('取消审核')}}</el-button>
        <el-button plain type="primary" @click="showLoaingTemplate">{{$t('提单预览')}}</el-button>
huhaiqing's avatar
huhaiqing committed
20 21
      </div>
      <div v-if="currRow.status !== 1">
22
        <el-button type="primary" @click="createPdf">{{$t('提交审核')}}</el-button>
23
        <el-button type="primary" @click="showLoaingTemplate">{{$t('提单预览')}}</el-button>
huhaiqing's avatar
huhaiqing committed
24 25 26
      </div>
    </el-row>

27 28 29 30 31
    <!-- htm2canvas 容器 -->
    <div style="height:0; overflow: hidden;">
      <div id="html2canvas-container" v-html="billContent"></div>
    </div>

32
    <el-dialog :title="dialogCfg.title" :visible.sync="visible" width="1000px" append-to-body class="shippingSea-dialog">
huhaiqing's avatar
huhaiqing committed
33 34 35 36 37 38 39 40 41 42 43 44 45
      <previewBill v-if="visible" :contentHtml="billContent" :currRow="currRow" :type="dialogCfg.type" />
    </el-dialog>
  </el-row>
</template>

<script>
import VueUeditorWrap from "vue-ueditor-wrap";
import WorkFlow from "@/components/WorkFlow";
import {
  createBillService,
  updateBillService,
  cancelBillService,
} from "@/api/ecw/box";
46
import { serviceMsg, toReviewDetail } from "../shippingSea/utils";
huhaiqing's avatar
huhaiqing committed
47 48
import previewBill from "./previewBill.vue";
import { getToken } from "@/utils/auth";
49 50 51
import html2canvas from 'html2canvas';
import { jsPDF } from "jspdf";
import {uploadFile} from '@/api/infra/file'
52
import FileSaver from 'file-saver'
53
import {getOrder, getOrderDetail} from "@/api/ecw/order";
54
window.html2canvas = html2canvas
huhaiqing's avatar
huhaiqing committed
55 56 57 58 59 60 61 62 63 64 65
export default {
  name: "makeLadingBill",
  components: {
    VueUeditorWrap,
    WorkFlow,
    previewBill,
  },
  props: {
    currData: Object,
    currRow: Object,
    dialogCfg: Object,
66
    selfNo: String
huhaiqing's avatar
huhaiqing committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
  },
  data() {
    return {
      orderNo: "",
      billContent: "",
      editorConfig: {
        UEDITOR_HOME_URL: "/static/plugins/ueditor/",
        autoHeightEnabled: false,
        initialFrameHeight: 500,
        initialFrameWidth: "100%",
        zIndex: 9999,
        toolbars: [
          [
            "anchor", //锚点
            "undo", //撤销
            "redo", //重做
            "bold", //加粗
            "indent", //首行缩进
dragondean@qq.com's avatar
dragondean@qq.com committed
85
            //"snapscreen", //截图
huhaiqing's avatar
huhaiqing committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99
            "italic", //斜体
            "underline", //下划线
            "strikethrough", //删除线
            "subscript", //下标
            "fontborder", //字符边框
            "superscript", //上标
            "formatmatch", //格式刷
            "source", //源代码
            "blockquote", //引用
            "pasteplain", //纯文本粘贴模式
            "selectall", //全选
            "preview", //预览
            "horizontal", //分隔线
            "removeformat", //清除格式
dragondean@qq.com's avatar
dragondean@qq.com committed
100 101 102
            //"time", //时间
            //"date", //日期
            //"unlink", //取消链接
huhaiqing's avatar
huhaiqing committed
103 104 105 106 107 108 109 110 111 112 113 114 115 116
            "insertrow", //前插入行
            "insertcol", //前插入列
            "mergeright", //右合并单元格
            "mergedown", //下合并单元格
            "deleterow", //删除行
            "deletecol", //删除列
            "splittorows", //拆分成行
            "splittocols", //拆分成列
            "splittocells", //完全拆分单元格
            "deletecaption", //删除表格标题
            "inserttitle", //插入标题
            "mergecells", //合并多个单元格
            "deletetable", //删除表格
            "cleardoc", //清空文档
Marcus's avatar
Marcus committed
117
            "insertparagraphbeforetable", //this.$t("表格前插入行")
dragondean@qq.com's avatar
dragondean@qq.com committed
118
            //"insertcode", //代码语言
huhaiqing's avatar
huhaiqing committed
119 120 121 122 123 124 125
            "fontfamily", //字体
            "fontsize", //字号
            "paragraph", //段落格式
            "simpleupload", //单图上传
            "insertimage", //多图上传
            "edittable", //表格属性
            "edittd", //单元格属性
dragondean@qq.com's avatar
dragondean@qq.com committed
126 127
            //"link", //超链接
            //"emotion", //表情
huhaiqing's avatar
huhaiqing committed
128
            "spechars", //特殊字符
dragondean@qq.com's avatar
dragondean@qq.com committed
129 130
            //"searchreplace", //查询替换
            //"insertvideo", //视频
huhaiqing's avatar
huhaiqing committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144
            "justifyleft", //居左对齐
            "justifyright", //居右对齐
            "justifycenter", //居中对齐
            "justifyjustify", //两端对齐
            "forecolor", //字体颜色
            "backcolor", //背景色
            "insertorderedlist", //有序列表
            "insertunorderedlist", //无序列表
            "fullscreen", //全屏
            "directionalityltr", //从左向右输入
            "directionalityrtl", //从右向左输入
            "rowspacingtop", //段前距
            "rowspacingbottom", //段后距
            "pagebreak", //分页
dragondean@qq.com's avatar
dragondean@qq.com committed
145
            //"insertframe", //插入Iframe
huhaiqing's avatar
huhaiqing committed
146 147 148
            "imagenone", //默认
            "imageleft", //左浮动
            "imageright", //右浮动
dragondean@qq.com's avatar
dragondean@qq.com committed
149
            //"attachment", //附件
huhaiqing's avatar
huhaiqing committed
150 151 152
            "imagecenter", //居中
            "wordimage", //图片转存
            "lineheight", //行间距
dragondean@qq.com's avatar
dragondean@qq.com committed
153
            //"edittip ", //编辑提示
huhaiqing's avatar
huhaiqing committed
154 155
            "customstyle", //自定义标题
            "autotypeset", //自动排版
dragondean@qq.com's avatar
dragondean@qq.com committed
156 157
            //"touppercase", //字母大写
            //"tolowercase", //字母小写
huhaiqing's avatar
huhaiqing committed
158
            "background", //背景
dragondean@qq.com's avatar
dragondean@qq.com committed
159 160
            //"scrawl", //涂鸦
            //"music", //音乐
huhaiqing's avatar
huhaiqing committed
161 162
            "inserttable", //插入表格
            "drafts", // 从草稿箱加载
dragondean@qq.com's avatar
dragondean@qq.com committed
163
            //"charts", // 图表
huhaiqing's avatar
huhaiqing committed
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
          ],
        ],
        serverUrl:
          process.env.VUE_APP_BASE_API +
          "/admin-api/infra/file/editor?api_token=" +
          getToken().replace("Bearer ", ""),
      },
      visible: false,
      selectedUsers: [],
    };
  },
  methods: {
    showLoaingTemplate() {
      this.visible = true;
    },
179
    // 先获取订单信息,pdf用 订单号+唛头命名
180
    createPdf(){
181 182 183 184 185
      getOrder(this.currRow.orderId).then(res => {
        this.afterCreatePdf(res.data)
      })
    },
    afterCreatePdf(orderData){
186
      let loading = this.$loading()
187
      html2canvas(document.querySelector("#html2canvas-container"), {dpi:144, useCORS: true}).then(canvas => {
188 189 190 191
        const doc = new jsPDF('p','pt','a4',true);

        const imgWidth = canvas.width
        const imgHeight = canvas.height
dragondean@qq.com's avatar
dragondean@qq.com committed
192
        console.log(imgHeight, imgWidth)
193 194 195 196 197 198 199 200
        let _w = 595.28;
		    let _h = 595.28/imgWidth*imgHeight;
        if(_h>841.89){
          _h = 841.89;
          _w = _h/imgHeight*imgWidth
        }
        const _left = (595.28-_w)/2;
        doc.addImage(canvas, 'PNG', _left, 0, _w,_h, '', 'FAST');
201 202
        /* doc.save("a4.pdf");
        return Promise.reject() */
203
        let form = new FormData()
204
        let file = this.selfNo + "-" + this.currRow.tidanNo + ' ' + orderData.marks + '.pdf' //this.selfNo + '-' + this.currRow.tidanNo + '.pdf'
dragondean@qq.com's avatar
dragondean@qq.com committed
205

206
        form.append('file', new File([doc.output('arraybuffer')], file, {type: 'application/pdf'}))
207
        form.append('path', `admin/shipment/${this.selfNo}/pdf/${file}`) // 最前面不能有/,否则返回的url会有两个/
208 209

        /* let blob = new Blob([doc.output('arraybuffer')], {type: "application/pdf"})
210
        FileSaver.saveAs(blob, file);
dragondean@qq.com's avatar
dragondean@qq.com committed
211
        return */
212 213 214 215 216 217 218 219
        return uploadFile(form)
      }).then(res => {
        return this.submit(res.data)
      }).finally(res => {
        loading.close()
      })
    },
    submit(imgUrl) {
huhaiqing's avatar
huhaiqing committed
220
      let params = {
221
        imgUrl,
huhaiqing's avatar
huhaiqing committed
222 223 224 225
        billContent: this.billContent,
        orderId: this.currRow.orderId,
        copyUserId: this.selectedUsers,
      };
226
      if (["makeBill", "resetBill"].includes(this.dialogCfg.type)) {
huhaiqing's avatar
huhaiqing committed
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
        createBillService({ ...params, status: 1 }).then((res) => {
          serviceMsg(res, this).then((res) => {
            this.close("query");
          });
        });
      } else {
        updateBillService({
          ...params,
          id: this.currRow.id,
          status: 1,
        }).then((res) => {
          serviceMsg(res, this).then((res) => {
            this.close("query");
          });
        });
      }
    },
    /* 取消审核 */
    canclAudit() {
      cancelBillService(this.currRow.id).then((res) => {
        serviceMsg(res, this).then(() => {
          this.close("query");
        });
      });
    },
    close(type) {
      this.$emit("closeDialog", type);
    },
255
    jumpReviewDetail() {
256
      this.close('close')
257 258 259
      const { bpmProcessId } = this.currData;
      toReviewDetail.apply(this, [bpmProcessId]);
    },
huhaiqing's avatar
huhaiqing committed
260 261 262 263 264 265 266 267 268 269 270 271 272 273
  },
  watch: {
    currData: {
      immediate: true,
      handler(val) {
        this.billContent = val?.billContent ?? "";
        this.orderNo = val.orderNo;
      },
    },
  },
};
</script>

<style lang="scss" scoped>
274
::v-deep #html2canvas-container{
275
  padding: 3rem;
276
  word-break:initial;
277 278 279
  p{
    margin: 0;
  }
280 281 282
  td{
    word-break:initial;
  }
283
}
huhaiqing's avatar
huhaiqing committed
284 285 286
.shipping-makeLadingBill {
  .title-orderNo {
    text-align: center;
dragondean@qq.com's avatar
dragondean@qq.com committed
287
    font-size: 18px;
huhaiqing's avatar
huhaiqing committed
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
    font-weight: normal;
    margin-bottom: 10px;
  }
  .process-area {
    margin-top: 15px;
    .process {
      display: flex;
      flex-direction: column;
      > :first-child {
        color: #606266;
        font-weight: bolder;
        font-size: 16px;
      }
    }
    > :last-child {
      text-align: center;
    }
  }
huhaiqing's avatar
huhaiqing committed
306 307 308 309
  .ueditor-row {
    display: flex;
    justify-content: center;
  }
huhaiqing's avatar
huhaiqing committed
310
}
dragondean@qq.com's avatar
dragondean@qq.com committed
311 312 313 314
.shippingSea-dialog{
  ::v-deep .el-dialog__body{
    padding-top: 0;
  }
315

dragondean@qq.com's avatar
dragondean@qq.com committed
316
}
huhaiqing's avatar
huhaiqing committed
317
</style>