Skip to content

Vue 引入 WPS JS-SDK

前言

因为业务觉得我们用开源插件开发的合同文件编辑不够强大,所以提出引入 WPS 的插件,满足现有合同编辑需求。

环境

Vue v2.6.14

WPS JS-SDK v2.0.4

实现

WPS 快速开始,先看看官方文档。

引入

因为我没有在 npm 上找到对应的官方包,所以我是 下载 到本地引入的。

js
// wps-component.vue
import WebOfficeSDK from "@/utils/web-office-sdk.js";

注册

注册也很简单,通用的方式,通过引入插件实例的内部方法初始化。

js
// wps-component.vue
async init() {
  // 注册wps-SDK
  this.instance = WebOfficeSDK.init({
    mode: "", // 显示模式 simple 极简,nomal 普通
    mount: "", // 挂在的 DOM 节点 ID
    appId: "", // WPS 应用 id,你在 Web Office 开发平台注册以后,新建的应用 id
    officeType: WebOfficeSDK.OfficeType.Writer,
    fileId: "",
    token: "", // 可以用来识别用户信息,具体的定义需要和后端配合
  });

  await this.instance.ready();

  // 有一些方法需要放到 WPS 实例初始化以后才能调用,具体看官方文档
},

使用

指定 DOM 节点的宽高,并挂载到该节点上,就会自动渲染。

总结

WPS JS-SDK 的使用过程非常顺滑,前端几乎不需要写什么代码,前后端总的来说,工作量都不大。

后端的工作量会更多一些,因为后端要对接 WPS 的接口,WPS 的读取、编辑和保存等操作,都需要后端提供接口支持。

WPSJS-SDK 是做的比较人性化的一个插件了。

代码

html
<template>
  <a-card :bordered="false">
    <div class="web-office" id="web-office" />
  </a-card>
</template>

<script>
  import WebOfficeSDK from "@/utils/web-office-sdk.js";
  import Cookie from "js-cookie";

  export default {
    name: "Index",
    props: {
      fileId: {
        type: String,
        default: "",
      },
      onlyReady: {
        type: Boolean,
        default: false,
      },
    },
    data() {
      return {
        instance: {},
      };
    },
    mounted() {
      this.init();
    },
    methods: {
      async init() {
        // 注册wps-SDK
        this.instance = WebOfficeSDK.init({
          mount: "#web-office", // 挂在的 DOM 节点 ID
          appId: "", // WPS 应用 id,你在 Web Office 开发平台注册以后,新建的应用 id
          officeType: WebOfficeSDK.OfficeType.Writer, // 打开文件类型,我这个是 word 文档
          fileId: this.fileId, // 文件 id
        });

        // 用来检测文件是否打开成功
        this.instance.ApiEvent.AddApiEventListener("fileOpen", (data) => {
          console.log("fileOpen: ", data);
        });

        await this.instance.ready();

        // 是否仅读
        if (this.onlyReady) {
          this.instance.Application.ActiveDocument.SetReadOnly({
            Value: true,
          });
        }
      },
    },
  };
</script>

<style lang="less" scoped>
  .web-office {
    height: 600px;
    width: 100%;
  }
</style>

Released under the MIT License.