sv-print可视化打印组件不完全指南②

1,127 阅读2分钟

上篇已简单介绍了 sv-print 组件库的一些基础知识,以及怎么引入它。本篇主要讲一讲 sv-print 组件库参数及插槽

先上效果图:

参数、插槽示例

参数说明:ccsimple.github.io/sv-print-do…

渲染可拖拽元素

如下图,根据这三个参数即可实现

上才艺:

以 vue3 为例:

  1. 首先构建 可拖拽元素 provider

如果你不清楚,可以先看看自定义拖拽元素 ccsimple.github.io/sv-print-do…

provider1.js

import { hiprint } from "sv-print";
export const provider1 = function (options) {
  console.log(options);
  var addElementTypes = function (context) {
    context.removePrintElementTypes("providerModule1");
    context.addPrintElementTypes("providerModule1", [
      new hiprint.PrintElementTypeGroup("常规", [
        options.config,
        {
          tid: "providerModule1.header",
          title: "单据表头",
          data: "单据表头",
          type: "text",
          options: {
            testData: "单据表头",
            height: 17,
            fontSize: 16.5,
            fontWeight: "700",
            textAlign: "center",
            hideTitle: true,
          },
        },
      ]),
    ]);
  };
  return {
    addElementTypes: addElementTypes,
  };
};
  1. 引入设计器组件,传入参数
<template>
  <div style="width: 100vw; height: 100vh">
    <Designer :providers="providers" :providerMap="providerMap" :clearProviderContainer="false" @onDesigned="onDesigned" />
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { Designer } from "@sv-print/vue3";
// 自定义的 provider
import { provider1 } from "./provider1";
import { provider2 } from "./provider2";
  
const providers = ref([provider1(),provider2()]);
const providerMap = ref([
    {
      // 这是默认的 拖拽元素容器
      container: ".hiprintEpContainer",
      // provider 对应的键
      value: "providerModule1",
    },
    {
      // 这是默认的 拖拽元素容器
      container: ".hiprintEpContainer",
      // provider 对应的键
      value: "providerModule2",
    }
]);
  
const onDesigned = (e) => {
  console.log("onDesigned");
  // 注意看 回调值
  console.log(e);
};
</script>

注意:clearProviderContainer 是控制同一个容器,是否先清空再渲染

保存事件

<template>
  <div style="width: 100vw; height: 100vh">
    <Designer :events="events" />
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { Designer } from "@sv-print/vue3";

const events = ref({
  // 保存
  onSave: (key, data) => {
    console.log(data);
    return true; // 是否阻止原有事件
  },
  // 编辑模板
  onEdit: (data) => {
    console.log(data);
    return true; // 是否阻止原有事件
  },
  // 点击打印数据
  onEditData: (data) => {
    console.log(data);
    return true; // 是否阻止原有事件
  },
  // 快捷键
  onKeyDownEvent: (e: KeyboardEvent, designerUtils: DesignerUtils) => {
    console.log(designerUtils);
    return true; // 是否阻止原有事件
  },
})
</script>

隐藏、调整小组件

如果觉得 拖拽元素、小地图、缩放等等工具栏位置,大小不合适,或者不想显示可使用下列两个参数

eg: 重写/隐藏 页面结构,隐藏 旋转工具

<template>
  <div style="width: 100vw; height: 100vh">
    <Designer :styleOption="styleOption" />
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { Designer } from "@sv-print/vue3";
  
const styleOption = ref({
  pageStructure: {
    mode: "default", // 拖拽模式: default(默认), top(上), bottom(下), left(左), right(右), fixed(固定)
    show: false, // 不显示
    style: "right:210px;top:95px;width:220px;",
  },
  rotateTools: {
    show: false, // 不显示
  }
});  
</script>

header插槽

头部不好看,或者有自定义需求,那就自己写一个咯。

<template>
  <div style="width: 100vw; height: 100vh">
    <Designer @onDesigned="onDesigned">
      <template #header>
        <div>
          <div @click="preview">自定义 header 预览</div>
        </div>
      </template>
    </Designer>
  </div>
</template>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import { Designer } from "@sv-print/vue3";

let dUtils; // 缓存工具类,其他方法可调用
  
const onDesigned = (e) => {
  console.log("onDesigned");
  // 注意看 回调值
  console.log(e);
  // 有很多方法都在 设计器工具类中 如:导入导出模板json文件、预览
  const { designerUtils } = e.detail;
  dUtils = designerUtils;
  // designerUtils.import(); // 导入
  // designerUtils.export(); // 导出
  // eg: show(printData, {}, { callback: () => {...}})
  // designerUtils.preview.show(); // 预览
  // 模板对象
  // designerUtils.printTemplate;
};

const preview = () => {
  dUtils.preview.show();
}
</script>

总结

参数多不要怕,如果有不清楚的,已授权、获取源码的小伙伴可以随时联系我,咱们是一对一的技术支持。

如果看到这里,你还是疑问,想要一对一技术指导,欢迎私信联系我。

敬请期待下一篇:如何自定义、扩展 vue3、react 使用的组件。比如内置的 Header、Designer 组件等。

记得点个赞咯~