瀏覽代碼

onlyoffice集成,在线编辑之后保存,并保存文档历史记录

wukai 2 年之前
父節點
當前提交
542b5a07aa
共有 5 個文件被更改,包括 573 次插入280 次删除
  1. 2 2
      src/api/doc/info.js
  2. 16 23
      src/views/doc/groupUser/index.vue
  3. 2 4
      src/views/doc/groupUser/oo.vue
  4. 287 251
      src/views/doc/info/index.vue
  5. 266 0
      src/views/tool/onlyoffice.vue

+ 2 - 2
src/api/doc/info.js

@@ -10,9 +10,9 @@ export function listInfo(query) {
 }
 
 // 查询文档基本信息详细
-export function getInfo(docId) {
+export function getInfo(docId, createYear) {
   return request({
-    url: '/doc/info/' + docId,
+    url: '/doc/info/' + docId + "/" + createYear,
     method: 'get'
   })
 }

+ 16 - 23
src/views/doc/groupUser/index.vue

@@ -15,7 +15,7 @@
 </template>
 
 <script>
-  import vabOnlyOffice from './oo.vue'
+  import vabOnlyOffice from '@/views/tool/onlyoffice.vue'
 
   export default {
     name: 'App',
@@ -26,31 +26,27 @@
       return {
         //参考vabOnlyOffice组件参数配置
         option: {
-          url: '',
-          isEdit: '',
-          fileType: '',
-          title: '',
-          lang: '',
-          isPrint: '',
+          url: '', //在线文档地址
+          isEdit: '', //是否允许编辑
+          fileType: '', //文件扩展名
+          title: '', //文件标题
           user: {
-            id: null,
-            name: ''
+            id: null, //用户ID
+            name: '' //用户姓名
           },
-          editUrl: ''
+          editUrl: '' //回调地址
         },
-        show: false,
+        show: false //是否显示
       }
     },
     methods: {
       getFile() {
         this.show = true
         // getAction('/file/selectById', { id: this.id }).then(res => {
-        this.option.isEdit = true
-        this.option.lang = 'zh-CN'
+        this.option.isEdit = false
         this.option.url = 'http://192.168.1.26:9300/statics/2023/04/03/产品研发会议纪要20230314_20230403170635A001.doc'
         this.option.title = '测试word'
         this.option.fileType = 'docx'
-        this.option.isPrint = false
         this.option.user = {
           id: 12,
           name: '张三'
@@ -63,17 +59,16 @@
       getExcelFile() {
         this.show = true
         // getAction('/file/selectById', { id: this.id }).then(res => {
+        // this.option.key = "11889900-3321";
         this.option.isEdit = true
-        this.option.lang = 'zh-CN'
         this.option.url = 'http://192.168.1.26:9300/statics/2023/03/20/第一阶段工作内容V1.0_20230320114614A002.xlsx'
         this.option.title = '测试excel'
         this.option.fileType = 'xlsx'
-        this.option.isPrint = false
         this.option.user = {
-          id: 13,
-          name: '李四'
-        },
-        this.option.editUrl='http://192.168.1.26:8080/doc/groupUser/save'
+            id: 13,
+            name: '李四'
+          },
+          this.option.editUrl = 'http://192.168.1.26:8080/doc/groupUser/save?test=1'
         // })
       },
       close() {
@@ -83,11 +78,9 @@
         this.show = true
         // getAction('/file/selectById', { id: this.id }).then(res => {
         this.option.isEdit = true
-        this.option.lang = 'zh-CN'
         this.option.url = 'http://192.168.1.26:9300/statics/2023/03/20/项目管理培训06-项目时间管理.ppt'
         this.option.title = '测试ppt'
         this.option.fileType = 'ppt'
-        this.option.isPrint = false
         this.option.user = {
           id: 14,
           name: '王五'
@@ -126,4 +119,4 @@
     width: 100%;
     height: '900px';
   }
-</style>
+</style>

+ 2 - 4
src/views/doc/groupUser/oo.vue

@@ -47,9 +47,7 @@
           this.docEditor = null;
         }
 
-        console.log(document.body.clientHeight);
         this.doctype =this.getFileType(option.fileType);
-        console.log(this.doctype);
         let config = {
           document: {
             //后缀
@@ -58,8 +56,8 @@
             title: option.title,
             permissions: {
               edit: option.isEdit, //是否可以编辑: 只能查看,传false
-              print: option.isPrint,
-              download: true,
+              print: option.isPrint, //是否可以打印
+              download: option.isEdit, //是否可以下载
               // "fillForms": true,//是否可以填写表格,如果将mode参数设置为edit,则填写表单仅对文档编辑器可用。 默认值与edit或review参数的值一致。
               // "review": true //跟踪变化
             },

+ 287 - 251
src/views/doc/info/index.vue

@@ -1,260 +1,296 @@
 <template>
-	<div class="app-container">
-		<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
-			label-width="68px">
-			<el-form-item label="文档名称" prop="docName">
-				<el-input v-model="queryParams.docName" placeholder="请输入文档名称" clearable
-					@keyup.enter.native="handleQuery" />
-			</el-form-item>
-			<el-form-item label="文档级别" prop="docLevel">
-				<el-input v-model="queryParams.docLevel" placeholder="请输入文档级别" clearable
-					@keyup.enter.native="handleQuery" />
-			</el-form-item>
-			<el-form-item label="文档年份" prop="createYear">
-				<el-input v-model="queryParams.createYear" placeholder="请输入文档创建年份" clearable
-					@keyup.enter.native="handleQuery" />
-			</el-form-item>
-			<el-form-item>
-				<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-				<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-			</el-form-item>
-		</el-form>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="文档名称" prop="docName">
+        <el-input v-model="queryParams.docName" placeholder="请输入文档名称" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="文档级别" prop="docLevel">
+        <el-input v-model="queryParams.docLevel" placeholder="请输入文档级别" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="文档年份" prop="createYear">
+        <el-input v-model="queryParams.createYear" placeholder="请输入文档创建年份" clearable
+          @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
 
-		<el-row :gutter="10" class="mb8">
-			<el-col :span="1.5">
-				<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-					v-hasPermi="['doc:info:add']">新增</el-button>
-			</el-col>
-			<el-col :span="1.5">
-				<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
-					v-hasPermi="['doc:info:edit']">修改</el-button>
-			</el-col>
-			<el-col :span="1.5">
-				<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
-					@click="handleDelete" v-hasPermi="['doc:info:remove']">删除</el-button>
-			</el-col>
-			<el-col :span="1.5">
-				<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
-					v-hasPermi="['doc:info:export']">导出</el-button>
-			</el-col>
-			<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-		</el-row>
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['doc:info:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['doc:info:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['doc:info:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['doc:info:export']">导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
 
-		<el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
-			<el-table-column type="selection" width="55" align="center" />
-			<el-table-column label="文档ID" align="center" prop="docId" />
-			<el-table-column label="文档名称" align="center" prop="docName" />
-			<el-table-column label="文档级别" align="center" prop="docLevel" />
-			<el-table-column label="文档年份" align="center" prop="createYear" />
-			<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-				<template slot-scope="scope">
-					<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-						v-hasPermi="['doc:info:edit']">修改</el-button>
-					<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
-						v-hasPermi="['doc:info:remove']">删除</el-button>
-				</template>
-			</el-table-column>
-		</el-table>
+    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="文档ID" align="center" prop="docId" />
+      <el-table-column label="文档名称" align="center" prop="docName" />
+      <el-table-column label="文档级别" align="center" prop="docLevel" />
+      <el-table-column label="文档年份" align="center" prop="createYear" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handlePreview(scope.row)">预览</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['doc:info:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['doc:info:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
 
-		<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
-			@pagination="getList" />
+    <pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
-		<!-- 添加或修改文档基本信息对话框 -->
-		<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-			<el-form ref="form" :model="form" :rules="rules" label-width="80px">
-				<el-form-item label="文档名称" prop="docName">
-					<el-input v-model="form.docName" placeholder="请输入文档名称" />
-				</el-form-item>
-				<el-form-item label="文档描述">
-					<editor v-model="form.docDesc" :min-height="192" />
-				</el-form-item>
-				<el-form-item label="文档存储路径" prop="docPath">
-					<el-input v-model="form.docPath" placeholder="请输入文档路径" />
-					<!-- <file-upload v-model="form.docPath" /> -->
-				</el-form-item>
-				<el-form-item label="文档级别" prop="docLevel">
-					<el-input v-model="form.docLevel" placeholder="请输入文档级别" />
-				</el-form-item>
-				<el-form-item label="文档年份" prop="createYear">
-					<el-input v-model="form.createYear" placeholder="请输入文档创建年份" />
-				</el-form-item>
-			</el-form>
-			<div slot="footer" class="dialog-footer">
-				<el-button type="primary" @click="submitForm">确 定</el-button>
-				<el-button @click="cancel">取 消</el-button>
-			</div>
-		</el-dialog>
-	</div>
+    <!-- 添加或修改文档基本信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="文档名称" prop="docName">
+          <el-input v-model="form.docName" placeholder="请输入文档名称" />
+        </el-form-item>
+        <el-form-item label="文档描述">
+          <editor v-model="form.docDesc" :min-height="192" />
+        </el-form-item>
+        <el-form-item label="文档存储路径" prop="docPath">
+          <!-- <el-input v-model="form.docPath" placeholder="请输入文档路径" /> -->
+          <file-upload v-model="form.docPath" />
+        </el-form-item>
+        <el-form-item label="文档级别" prop="docLevel">
+          <el-input v-model="form.docLevel" placeholder="请输入文档级别" />
+        </el-form-item>
+        <el-form-item label="文档年份" prop="createYear">
+          <el-input v-model="form.createYear" placeholder="请输入文档创建年份" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <div v-if='show' class='qualityManual-container-office'>
+      <vab-only-office :option='option' />
+    </div>
+  </div>
 </template>
 
 <script>
-	import {
-		listInfo,
-		getInfo,
-		delInfo,
-		addInfo,
-		updateInfo
-	} from "@/api/doc/info";
+  import {
+    listInfo,
+    getInfo,
+    delInfo,
+    addInfo,
+    updateInfo
+  } from "@/api/doc/info";
 
-	export default {
-		name: "Info",
-		data() {
-			return {
-				// 遮罩层
-				loading: true,
-				// 选中数组
-				ids: [],
-				// 非单个禁用
-				single: true,
-				// 非多个禁用
-				multiple: true,
-				// 显示搜索条件
-				showSearch: true,
-				// 总条数
-				total: 0,
-				// 文档基本信息表格数据
-				infoList: [],
-				// 弹出层标题
-				title: "",
-				// 是否显示弹出层
-				open: false,
-				// 查询参数
-				queryParams: {
-					pageNum: 1,
-					pageSize: 10,
-					docName: null,
-					docLevel: null,
-					createYear: null,
-				},
-				// 表单参数
-				form: {},
-				// 表单校验
-				rules: {
-					docName: [{
-						required: true,
-						message: "文档名称不能为空",
-						trigger: "blur"
-					}],
-					createYear: [{
-						required: true,
-						message: "文档创建年份;文档创建年份,分表用不能为空",
-						trigger: "blur"
-					}],
-				}
-			};
-		},
-		created() {
-			this.getList();
-		},
-		methods: {
-			/** 查询文档基本信息列表 */
-			getList() {
-				this.loading = true;
-				listInfo(this.queryParams).then(response => {
-					this.infoList = response.rows;
-					this.total = response.total;
-					this.loading = false;
-				});
-			},
-			// 取消按钮
-			cancel() {
-				this.open = false;
-				this.reset();
-			},
-			// 表单重置
-			reset() {
-				this.form = {
-					docId: null,
-					docName: null,
-					docType: null,
-					docSize: null,
-					classifyId: null,
-					docDesc: null,
-					docPath: null,
-					docLevel: null,
-					allowEdit: null,
-					docOf: null,
-					owner: null,
-					createYear: null,
-					createBy: null,
-					createTime: null,
-					updateBy: null,
-					updateTime: null,
-					remark: null,
-					isDel: null
-				};
-				this.resetForm("form");
-			},
-			/** 搜索按钮操作 */
-			handleQuery() {
-				this.queryParams.pageNum = 1;
-				this.getList();
-			},
-			/** 重置按钮操作 */
-			resetQuery() {
-				this.resetForm("queryForm");
-				this.handleQuery();
-			},
-			// 多选框选中数据
-			handleSelectionChange(selection) {
-				this.ids = selection.map(item => item.docId)
-				this.single = selection.length !== 1
-				this.multiple = !selection.length
-			},
-			/** 新增按钮操作 */
-			handleAdd() {
-				this.reset();
-				this.open = true;
-				this.title = "添加文档基本信息";
-			},
-			/** 修改按钮操作 */
-			handleUpdate(row) {
-				this.reset();
-				const docId = row.docId || this.ids
-				console.log(row);
-				alert(JSON.stringify(row));
-				getInfo(docId, row.createYear).then(response => {
-					this.form = response.data;
-					this.open = true;
-					this.title = "修改文档基本信息";
-				});
-			},
-			/** 提交按钮 */
-			submitForm() {
-				this.$refs["form"].validate(valid => {
-					if (valid) {
-						if (this.form.docId != null) {
-							updateInfo(this.form).then(response => {
-								this.$modal.msgSuccess("修改成功");
-								this.open = false;
-								this.getList();
-							});
-						} else {
-							addInfo(this.form).then(response => {
-								this.$modal.msgSuccess("新增成功");
-								this.open = false;
-								this.getList();
-							});
-						}
-					}
-				});
-			},
-			/** 删除按钮操作 */
-			handleDelete(row) {
-				const docIds = row.docId || this.ids;
-				this.$modal.confirm('是否确认删除文档基本信息编号为"' + docIds + '"的数据项?').then(function() {
-					return delInfo(docIds);
-				}).then(() => {
-					this.getList();
-					this.$modal.msgSuccess("删除成功");
-				}).catch(() => {});
-			},
-			/** 导出按钮操作 */
-			handleExport() {
-				this.download('doc/info/export', {
-					...this.queryParams
-				}, `info_${new Date().getTime()}.xlsx`)
-			}
-		}
-	};
-</script>
+  import vabOnlyOffice from '@/views/tool/onlyoffice.vue';
+
+  export default {
+    components: {
+      vabOnlyOffice
+    },
+    name: "Info",
+    data() {
+      return {
+        // 遮罩层
+        loading: true,
+        // 选中数组
+        ids: [],
+        // 非单个禁用
+        single: true,
+        // 非多个禁用
+        multiple: true,
+        // 显示搜索条件
+        showSearch: true,
+        // 总条数
+        total: 0,
+        // 文档基本信息表格数据
+        infoList: [],
+        // 弹出层标题
+        title: "",
+        // 是否显示弹出层
+        open: false,
+        // 查询参数
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          docName: null,
+          docLevel: null,
+          createYear: null,
+        },
+        // 表单参数
+        form: {},
+        // 表单校验
+        rules: {
+          docName: [{
+            required: true,
+            message: "文档名称不能为空",
+            trigger: "blur"
+          }],
+          createYear: [{
+            required: true,
+            message: "文档创建年份;文档创建年份,分表用不能为空",
+            trigger: "blur"
+          }],
+        },
+        option: {
+          key: '', //key 使用文档ID+年份
+          url: '', //在线文档地址
+          isEdit: '', //是否允许编辑
+          fileType: '', //文件扩展名
+          title: '', //文件标题
+          user: {
+            id: null, //用户ID
+            name: '' //用户姓名
+          },
+          editUrl: '' //回调地址
+        },
+        show: true //是否显示
+      }
+    },
+    created() {
+      this.getList();
+    },
+    methods: {
+      handlePreview(row) {
+        console.log(row);
+        //获取当前登录用户名:this.$store.state.user.name
+        //获取当前登录用户ID:this.$store.state.user.uid
+        //获取当前登录用户昵称:this.$store.state.user.uname
+        this.show = true;
+        // getAction('/file/selectById', { id: this.id }).then(res => {
+        this.option.isEdit = true;
+        this.option.url = row.docPath;
+        //'http://192.168.1.26:9300/statics/2023/04/03/产品研发会议纪要20230314_20230403170635A001.doc';
+        this.option.title = row.docName; //'测试word';
+        this.option.fileType = row.docType;
+
+        this.option.user = {
+          id: this.$store.state.user.uid,
+          name: this.$store.state.user.uname
+        };
+        this.option.editUrl = 'http://192.168.1.26:8080/doc/only-office/callback?id='+row.docId+"&year="+row.createYear
+      },
+      /** 查询文档基本信息列表 */
+      getList() {
+        this.loading = true;
+        listInfo(this.queryParams).then(response => {
+          this.infoList = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        });
+      },
+      // 取消按钮
+      cancel() {
+        this.open = false;
+        this.reset();
+      },
+      // 表单重置
+      reset() {
+        this.form = {
+          docId: null,
+          docName: null,
+          docType: null,
+          docSize: null,
+          classifyId: null,
+          docDesc: null,
+          docPath: null,
+          docLevel: null,
+          allowEdit: null,
+          docOf: null,
+          owner: null,
+          createYear: null,
+          createBy: null,
+          createTime: null,
+          updateBy: null,
+          updateTime: null,
+          remark: null,
+          isDel: null
+        };
+        this.resetForm("form");
+      },
+      /** 搜索按钮操作 */
+      handleQuery() {
+        this.queryParams.pageNum = 1;
+        this.getList();
+      },
+      /** 重置按钮操作 */
+      resetQuery() {
+        this.resetForm("queryForm");
+        this.handleQuery();
+      },
+      // 多选框选中数据
+      handleSelectionChange(selection) {
+        this.ids = selection.map(item => item.docId)
+        this.single = selection.length !== 1
+        this.multiple = !selection.length
+      },
+      /** 新增按钮操作 */
+      handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加文档基本信息";
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const docId = row.docId || this.ids
+        getInfo(docId, row.createYear).then(response => {
+          this.form = response.data;
+          this.open = true;
+          this.title = "修改文档基本信息";
+        });
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.docId != null) {
+              updateInfo(this.form).then(response => {
+                this.$modal.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              });
+            } else {
+              addInfo(this.form).then(response => {
+                this.$modal.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        const docIds = row.docId || this.ids;
+        this.$modal.confirm('是否确认删除文档基本信息编号为"' + docIds + '"的数据项?').then(function() {
+          return delInfo(docIds);
+        }).then(() => {
+          this.getList();
+          this.$modal.msgSuccess("删除成功");
+        }).catch(() => {});
+      },
+      /** 导出按钮操作 */
+      handleExport() {
+        this.download('doc/info/export', {
+          ...this.queryParams
+        }, `info_${new Date().getTime()}.xlsx`)
+      }
+    }
+  };
+</script>

+ 266 - 0
src/views/tool/onlyoffice.vue

@@ -0,0 +1,266 @@
+<!--onlyoffice 编辑器-->
+<template>
+  <div id='vabOnlyOffice'></div>
+</template>
+
+<script>
+  export default {
+    name: 'VabOnlyOffice',
+    props: {
+      option: {
+        type: Object,
+        default: () => {
+          return {}
+        },
+      },
+    },
+    data() {
+      return {
+        doctype: '',
+        docEditor: null,
+      }
+    },
+    beforeDestroy() {
+      if (this.docEditor !== null) {
+        this.docEditor.destroyEditor();
+        this.docEditor = null;
+      }
+    },
+    watch: {
+      option: {
+        handler: function(n) {
+          this.setEditor(n)
+          this.doctype = this.getDocType(n.fileType)
+        },
+        deep: true,
+      },
+    },
+    mounted() {
+      if (this.option.url) {
+        this.setEditor(this.option)
+      }
+    },
+    methods: {
+      async setEditor(option) {
+        if (this.docEditor !== null) {
+          this.docEditor.destroyEditor();
+          this.docEditor = null;
+        }
+
+        this.doctype = this.getDocType(option.fileType);
+        console.log(this.doctype);
+        console.log(option.key);
+        let config = {
+          document: {
+            fileType: option.fileType, //后缀
+            key: option.key || '',
+            title: option.title,
+            permissions: {
+              edit: option.isEdit, //是否可以编辑: 只能查看,传false
+              print: false, //是否可以打印
+              download: false, //是否可以下载
+              // "fillForms": true,//是否可以填写表格,如果将mode参数设置为edit,则填写表单仅对文档编辑器可用。 默认值与edit或review参数的值一致。
+              // "review": true //跟踪变化
+            },
+            url: option.url,
+          },
+          documentType: this.doctype,
+          editorConfig: {
+            callbackUrl: option.editUrl, //"编辑word后保存时回调的地址,这个api需要自己写了,将编辑后的文件通过这个api保存到自己想要的位置
+            lang: 'zh-CN', //语言设置
+            //定制
+            customization: {
+              autosave: false, //是否自动保存
+              chat: false,
+              comments: false,
+              help: false,
+              // "hideRightMenu": false,//定义在第一次加载时是显示还是隐藏右侧菜单。 默认值为false
+              //是否显示插件
+              plugins: false,
+            },
+            user: {
+              id: option.user.id,
+              name: option.user.name
+            },
+            userdata:{
+              wdm:111,
+              xdm:222
+            },
+            mode: option.model ? option.model : 'edit',
+            // 定义共享编辑模式(快速fast/严格strict), change为控制是否允许修改
+            coEditing: {
+              mode: 'fast',
+              change: false
+            }
+          },
+          width: '100%',
+          height: document.body.clientHeight - 110,
+          token: option.token || ''
+        }
+
+        // eslint-disable-next-line no-undef,no-unused-vars
+        this.docEditor = new DocsAPI.DocEditor('vabOnlyOffice', config)
+
+      },
+      /*
+       * 通过扩展名获取文档类型
+       * text对应各种文档类型(.doc, .docm, .docx, .dot, .dotm, .dotx, .epub, .fodt, .htm, .html, .mht, .odt, .ott, .pdf, .rtf, .txt, .djvu, .xps)
+       * spreadsheet对应表格类型(.csv, .fods, .ods, .ots, .xls, .xlsm, .xlsx, .xlt, .xltm, .xltx)
+       * presentation对应PPT类型(.fodp, .odp, .otp, .pot, .potm, .potx, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx)
+       */
+      getDocType(fileType) {
+        let docType = '';
+        for (const type in fileTypeMap) {
+          if (fileTypeMap[type].includes(fileType)) {
+            docType = type;
+            break;
+          }
+        }
+        return docType;
+      }
+    },
+  }
+
+  const fileTypeMap = {
+    'word': ['doc', 'docm', 'docx', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'htm', 'html', 'mht', 'odt', 'ott',
+      'pdf', 'rtf', 'txt', 'djvu', 'xps'
+    ],
+    'cell': ['csv', 'fods', 'ods', 'ots', 'xls', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx'],
+    'slide': ['fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
+  }
+</script>
+
+
+  <!-- let config = {
+      "document": {
+          "documentType": "text",
+          "width": "100%", //打开窗口宽度
+          "height": "100%", //打开窗口高度
+          "fileType": fileType, //文档类型
+          "key": key, //定义用于服务识别文档的唯一文档标识符。每次编辑和保存文档时,都必须重新生成密钥。长度限制为128个符号。
+          "title": title, //为查看或编辑的文档定义所需的文件名,该文件名也将在下载文档时用作文件名。长度限制为128个符号。
+          "url": url, //定义存储原始查看或编辑的文档的绝对URL
+          "info": {
+              "owner": "王重阳", //文件创建者名称
+              "sharingSettings": [ //文件对应用户的操作权限配置
+                  {
+                      "permissions": "Full Access", // 完全操作权限-Full Access,只读权限-Read Only 拒绝访问-Deny Access
+                      "user": "林朝英" //有次权限的用户
+                  },
+                  {
+                      "permissions": "Read Only",
+                      "user": "周伯通"
+                  },
+              ],
+              "uploaded": "2010-07-07 3:46 PM" //文件创建时间
+          },
+          //文档权限参数
+          "permissions": {
+              "edit": true, //(文件是否可以编辑,false时文件不可编辑)
+              "fillForms": true, //定义是否能在文档中填充表单
+              "print": true, //定义文档是否能打印
+              "review": false, //第一是否显示审阅文档菜单
+              "comment": true, //定义是否可以注释文档。如果注释权限设置为“ true”,则文档侧栏将包含“注释”菜单选项;只有将mode参数设置为edit时才生效,默认值与edit参数的值一致。
+              "copy": true, //是否允许您将内容复制到剪贴板。默认值为true。
+              "download": true, //定义是否可以下载文档或仅在线查看或编辑文档。如果下载权限设置为“false”下载为菜单选项将没有。默认值为true。
+              "modifyContentControl": true, //定义是否可以更改内容控件设置。仅当mode参数设置为edit时,内容控件修改才可用于文档编辑器。默认值为true。
+              "modifyFilter": true, //定义过滤器是否可以全局应用(true)影响所有其他用户,或局部应用(false),即仅适用于当前用户。如果将mode参数设置为edit,则过滤器修改仅对电子表格编辑器可用。默认值为true。
+          }
+      },
+      // type: "embedded",
+      //打开文档类型
+      // text对应各种文档类型(.doc, .docm, .docx, .dot, .dotm, .dotx, .epub, .fodt, .htm, .html, .mht, .odt, .ott, .pdf, .rtf, .txt, .djvu, .xps)
+      //spreadsheet对应表格类型(.csv, .fods, .ods, .ots, .xls, .xlsm, .xlsx, .xlt, .xltm, .xltx)
+      //presentation对应PPT类型(.fodp, .odp, .otp, .pot, .potm, .potx, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx)
+      "editorConfig": { //编辑配置
+          "createUrl": "http://docServer:port/url-to-create-document/", //指定创建文件的页面,添加该配置后文档服务器插件才会显示新建文件按钮
+          "mode": model, //文档操作模式 view 视图模式不可编辑  edit 编辑模式可编辑文档
+          "callbackUrl": callbackUrl, //保存文件时的回调地址
+          "lang": "zh-CN", //语言环境
+          "customization": { //定制部分允许自定义编辑器界面,使其看起来像您的其他产品,并更改是否存在其他按钮,链接,更改徽标和编辑者所有者详细信息。
+              "help": false, //定义是显示还是隐藏“帮助”菜单按钮。默认值为true。
+              "hideRightMenu": false, //定义在第一次加载时是显示还是隐藏右侧菜单。默认值为false。
+              "autosave": false, //定义是启用还是禁用“自动保存”菜单选项。请注意,如果您在菜单中更改此选项,它将被保存到浏览器的localStorage中。默认值为true。
+              "forcesave": true, //定义保存按钮是否显示默认false
+              "chat": false, //定义“聊天”菜单按钮是显示还是隐藏;请注意,如果您隐藏“聊天”按钮,则相应的聊天功能也将被禁用。默认值为true。
+              "commentAuthorOnly": false, //定义用户是否只能编辑和删除他的评论。默认值为false。
+              "comments": false, //定义是显示还是隐藏“注释”菜单按钮;请注意,如果您隐藏“评论”按钮,则相应的评论功能将仅可用于查看,评论的添加和编辑将不可用。默认值为true。
+              "compactHeader": false, //定义是否将菜单栏放在在徽标旁边使界面更加紧凑默认false。
+              "compactToolbar": false, //定义显示的顶部工具栏类型是完整(false)还是紧凑true。默认值为false 多余菜单将在右侧折叠点击显示。
+              "compatibleFeatures": false, //定义仅与OOXML格式兼容的功能的使用。例如,不要在整个文档上使用注释。默认值为false。
+              "macros": false, //定义是否将运行文档宏以及可用的宏设置。默认值为true。
+              "macrosMode": "warn", //定义是否将运行文档宏。可以采用以下值: disable -根本不运行;enable -自动运行所有宏;warn -警告宏并请求允许运行。默认值为original。
+              "plugins": false, //定义是否将启动插件并可用。默认值为true。
+              "showReviewChanges": false, //定义在加载编辑器时是否自动显示或隐藏审阅更改面板。默认值为false。
+              "spellcheck": false, //定义在加载编辑器时是否自动打开或关闭拼写检查器。拼写检查器仅适用于文档编辑器和演示文稿编辑器。默认值为true。
+              "toolbarNoTabs": false, //定义是突出显示顶部工具栏选项卡样式。默认值为false。
+              "unit": "cm", //定义在标尺和对话框中使用的度量单位。可以采用以下值:cm -厘米,pt-点,inch -英寸。默认值为厘米(cm)。
+              "zoom": 100, //定义以百分比为单位的文档显示缩放值。可以取大于0的值。对于文本文档和演示文稿,可以将此参数设置为-1(使文档适合页面选项)或-2(使文档页面宽度适合编辑器页面)。默认值为100。
+              "customer": { //关于 文档编辑器的显示信息
+                  "address": "My City, 123a-45", //有权访问编辑或编辑作者的公司或个人的邮政地址,
+                  "info": "Some additional information", //有关您希望其他人认识的公司或个人的一些其他信息,
+                  "logo": "https://example.com/logo-big.png", //图片徽标的路径(此文件没有特别建议,但是如果使用透明背景的.png格式会更好)。图片必须具有以下尺寸:432x70,
+                  "mail": "john@example.com", //有权访问编辑者或编辑者的公司或个人的电子邮件地址
+                  "name": "欧阳锋", //该公司或个人的谁可以访问编辑或编辑作者,名称
+                  "www": "example.com" //以上公司或个人的家庭网站地址,
+              },
+              "feedback": { //反馈配置信息
+                  "url": "https://example.com", //单击“反馈和支持”菜单按钮时将打开的网站地址的绝对URL ,
+                  "visible": false //显示或隐藏“反馈和支持”菜单按钮,
+              },
+              "goback": { //定义“打开文件位置”菜单按钮和右上角按钮的设置。该对象具有以下参数:
+                  "blank": true, //在新的浏览器选项卡/窗口(如果值设置为true)或当前选项卡(如果值设置为false)中打开网站。默认值为true,
+                  "requestClose": false, //定义如果单击“打开文件位置”按钮,则调用events.onRequestClose事件,而不是打开浏览器选项卡或窗口。默认值为false,
+                  "text": "Open file location", //将在“打开文件位置”菜单按钮和右上角按钮(即,而不是“转到文档”)上显示的文本,
+                  "url": "https://example.com" //单击“打开文件位置”菜单按钮时将打开的网站地址的绝对URL ,
+              },
+              "logo": {
+                  "image": "https://example.com/logo.png", //图像文件的路径,用于在普通工作模式下显示(即,在所有编辑器的查看和编辑模式下)。图片必须具有以下尺寸:172x40,
+                  "imageEmbedded": "https://example.com/logo_em.png", //用于以嵌入式模式显示的图像文件的路径(请参阅config部分以了解如何定义嵌入式文档类型)。图片必须具有以下尺寸:248x40,
+                  "url": "https://www.baidu.com" //某人单击徽标图像时将使用的绝对URL(可用于转到您的网站等)。保留为空字符串或null以使徽标不可单击,
+              },
+          },
+          "user": { //用户信息
+              "id": "admin", //用户ID
+              "name": "操作员" //用户全名称
+          },
+          "embedded": { //Embedded部分仅适用于嵌入式文档类型(请参阅config部分以了解如何定义嵌入式文档类型)。它允许更改设置,这些设置定义嵌入式模式下按钮的行为。
+              "embedUrl": "https://example.com/embedded?doc=exampledocument1.docx", //定义文档的绝对URL,以作为嵌入到网页中的文档的源文件
+              "fullscreenUrl": "https://example.com/embedded?doc=exampledocument1.docx#fullscreen", //定义将以全屏模式打开的文档的绝对URL。
+              "saveUrl": "https://example.com/download?doc=exampledocument1.docx", //定义允许将文档保存到用户个人计算机上的绝对URL。
+              "shareUrl": "https://example.com/view?doc=exampledocument1.docx", //定义允许其他用户共享此文档的绝对URL。
+              "toolbarDocked": "top" //定义嵌入式查看器工具栏的位置,可以为top或bottom。
+          }
+      },
+
+      "events": { //事件配置
+          // onAppReady,//-将应用程序加载到浏览器时调用的函数。
+          // onCollaborativeChanges //-当文档由其他用户在严格共同编辑模式下共同编辑时调用的函数。
+          // onDocumentReady,//-将应用程序加载到浏览器时调用的函数。
+          // onDocumentStateChange,//-修改文档时调用的函数。这就是所谓的使用参数:{真正的“数据”}在当前用户编辑文档以及与参数:{“数据”:假}在当前用户的更改发送到文档编辑服务。
+          // onDownloadAs,//-调用downloadAs方法时,使用指向已编辑文件的绝对URL调用的函数。在data参数中发送要下载的文档的绝对URL 。
+          // onError,//-发生错误或其他特定事件时调用的函数。错误消息在data参数中发送。
+          // onInfo,//-应用程序打开文件时调用的函数。该模式在data.mode参数中发送。可以查看或编辑。
+          // onMetaChange,//-通过meta命令更改文档的元信息时调用的函数。文档名称通过data.title参数发送。
+          // onOutdatedVersion,//-使用旧的document.key值打开文档进行编辑时,显示错误后调用的函数,该值用于编辑先前的文档版本并已成功保存。调用此事件时,必须使用新的document.key重新初始化编辑器。
+          // onReady,//-将应用程序加载到浏览器时调用的函数。自从5.0版本不推荐使用,请使用onAppReady代替
+          // onRequestClose,//-结束编辑器的工作并且必须关闭编辑器时调用的函数。
+          // onRequestCompareFile,//-用户尝试通过单击“存储中的文档”按钮来选择要比较的文档时调用的函数。要选择要比较的文档,必须调用setRevisedFile方法。如果未声明该方法,则不会显示“来自存储的文档”按钮。
+          // onRequestCreateNew,//-用户尝试通过单击“新建”按钮来创建文档时调用的函数。使用此方法代替createUrl字段。如果未声明该方法且未指定createUrl,则将不会显示“创建新”按钮。
+          // onRequestEditRights,//-用户尝试通过单击“编辑文档”按钮尝试将文档从视图切换到编辑模式时调用的函数。调用该函数时,必须在编辑模式下再次初始化编辑器。如果未声明该方法,则不会显示“编辑”按钮。
+          // onRequestHistory,//-用户尝试通过单击“版本历史记录”按钮显示文档版本历史记录时调用的函数。要显示文档版本历史,您必须调用refreshHistory方法。如果未声明该方法和onRequestHistoryData方法,则不会显示“版本历史记录”按钮。
+          // onRequestHistoryClose,//-当用户尝试通过单击“关闭历史记录”按钮来查看文档版本历史记录时,试图调用该文档时调用的函数。调用该函数时,必须在编辑模式下再次初始化编辑器。如果未声明该方法,则不会显示“关闭历史记录”按钮。
+          // onRequestHistoryData,//-用户尝试单击文档版本历史记录中的特定文档版本时调用的函数。
+          // onRequestInsertImage,//-用户尝试通过单击“保存图像”按钮插入图像时调用的函数。图像插入的类型在参数data.c中指定。
+          // onRequestRename,//-用户尝试通过单击“重命名...”按钮重命名文件时调用的函数。
+          // onRequestRestore,//-用户单击版本历史记录中的“还原”按钮来还原文件版本时调用的函数。
+          // onRequestSaveAs,//-用户尝试通过单击“另存为...”按钮保存文件时调用的函数。文档的标题和要下载的文档的绝对URL在data参数中发送。如果未声明该方法,则不会显示“另存为...”按钮。
+          // onRequestSharingSettings,//-用户单击“更改访问权限”按钮来管理文档访问权限时调用的函数。必须调用setSharingSettings方法来更新有关允许与其他用户共享文档的设置的信息。如果未声明该方法,则不会显示“更改访问权限”按钮。
+          // onRequestUsers,//-评论者可以选择要在评论中提及的其他用户时调用的函数。要设置用户列表,必须调用setUsers方法。
+          // onWarning,//-发生警告时调用的函数。警告消息在data参数中发送。
+          // "onDocumentStateChange": function() {
+          // }, //文档改变后的回调
+          //"onDocumentReady" : onDocumentReady, //文档初始化准备好后的回调
+      },
+  };
+  var docEditor = new DocsAPI.DocEditor("placeholder", config); -->