#ICBR0A wps集成
This commit is contained in:
@ -72,3 +72,15 @@ export async function getFileList(params: FilePageListParams, mode: ErrorMessage
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getAppToken(params, mode: ErrorMessageMode = 'modal') {
|
||||||
|
return defHttp.get(
|
||||||
|
{
|
||||||
|
url: '/v1/3rd/weboffice/url',
|
||||||
|
params
|
||||||
|
},
|
||||||
|
{
|
||||||
|
errorMessageMode: mode,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
1
src/assets/libs/open-jssdk-v0.1.3.es.js
Normal file
1
src/assets/libs/open-jssdk-v0.1.3.es.js
Normal file
File diff suppressed because one or more lines are too long
@ -70,6 +70,19 @@
|
|||||||
点击上传
|
点击上传
|
||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<template #itemRender="{ file, actions }">
|
||||||
|
<a-space class="file-space">
|
||||||
|
<PaperClipOutlined/>
|
||||||
|
<span class="file-name-span" @click="actions.preview">{{ file.name }}</span>
|
||||||
|
<a-tooltip v-if="showDownloadIcon" title="下载"><span @click="actions.download" class="file-outlined-span"><DownloadOutlined /></span></a-tooltip>
|
||||||
|
<a-tooltip v-if="!disabled && showRemoveIcon" title="删除"><span @click="actions.remove" class="file-outlined-span"><DeleteOutlined /></span></a-tooltip>
|
||||||
|
<a-tooltip v-if="'.doc,.docx,.xls,.xlsx,.pdf'.includes(file.fileType)" title="编辑文档">
|
||||||
|
<span @click="editFile(file)" class="file-outlined-span"><EditOutlined /></span>
|
||||||
|
</a-tooltip>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
|
||||||
</a-upload>
|
</a-upload>
|
||||||
<a-modal
|
<a-modal
|
||||||
:bodyStyle="bodyStyle"
|
:bodyStyle="bodyStyle"
|
||||||
@ -81,19 +94,31 @@
|
|||||||
>
|
>
|
||||||
<iframe v-if="previewVisible" :src="previewFile" class="iframe-box"></iframe>;
|
<iframe v-if="previewVisible" :src="previewFile" class="iframe-box"></iframe>;
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
<a-modal
|
||||||
|
wrap-class-name="full-modal"
|
||||||
|
width="100%"
|
||||||
|
:visible="wpsPreviewVisible"
|
||||||
|
:title="previewTitle"
|
||||||
|
:footer="null"
|
||||||
|
@cancel="handleCancelWps"
|
||||||
|
>
|
||||||
|
<div v-if="wpsPreviewVisible" id="office-container"></div>
|
||||||
|
</a-modal>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref, watch } from 'vue';
|
import { nextTick, ref, watch } from 'vue';
|
||||||
import { Upload } from 'ant-design-vue';
|
import { Upload } from 'ant-design-vue';
|
||||||
import { UploadOutlined, PlusOutlined } from '@ant-design/icons-vue';
|
import { UploadOutlined, PlusOutlined, DownloadOutlined, DeleteOutlined, EditOutlined, PaperClipOutlined } from '@ant-design/icons-vue';
|
||||||
import { useMessage } from '/@/hooks/web/useMessage';
|
import { useMessage } from '/@/hooks/web/useMessage';
|
||||||
import { deleteSingleFile, getFileList } from '/@/api/system/file';
|
import {deleteSingleFile, getAppToken, getFileList, getOnlineEditUrl} from '/@/api/system/file';
|
||||||
import { downloadByUrl } from '/@/utils/file/download';
|
import { downloadByUrl } from '/@/utils/file/download';
|
||||||
import { uploadMultiApi } from '/@/api/sys/upload';
|
import { uploadMultiApi } from '/@/api/sys/upload';
|
||||||
import Icon from '/@/components/Icon/index';
|
import Icon from '/@/components/Icon/index';
|
||||||
import { Base64 } from 'js-base64';
|
import { Base64 } from 'js-base64';
|
||||||
import { getAppEnvConfig } from '/@/utils/env';
|
import { getAppEnvConfig } from '/@/utils/env';
|
||||||
|
import WebOfficeSDK from "/@/assets/libs/open-jssdk-v0.1.3.es.js";
|
||||||
|
import {getToken} from "/@/utils/auth";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
value: String,
|
value: String,
|
||||||
@ -133,6 +158,7 @@
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
|
||||||
const previewVisible = ref(false);
|
const previewVisible = ref(false);
|
||||||
|
const wpsPreviewVisible = ref(false);
|
||||||
const previewFile = ref('');
|
const previewFile = ref('');
|
||||||
const previewTitle = ref('');
|
const previewTitle = ref('');
|
||||||
|
|
||||||
@ -254,6 +280,42 @@
|
|||||||
downloadByUrl({ url, fileName: fileName + fileType });
|
downloadByUrl({ url, fileName: fileName + fileType });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleCancelWps = () => {
|
||||||
|
wpsPreviewVisible.value = false;
|
||||||
|
previewTitle.value = '';
|
||||||
|
};
|
||||||
|
|
||||||
|
const refreshToken = async () => {
|
||||||
|
return getToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
const editFile = async (file) => {
|
||||||
|
wpsPreviewVisible.value = true;
|
||||||
|
previewTitle.value = file.name || file.fileName;
|
||||||
|
let appToken = await getAppToken({_w_fileid: file.id});
|
||||||
|
let containerNode = document.getElementById('office-container')
|
||||||
|
containerNode.style.height = "calc(100vh - 50px)";
|
||||||
|
containerNode.style.width = "100%";
|
||||||
|
let webOfficeSdk = WebOfficeSDK.config({
|
||||||
|
mount: containerNode,
|
||||||
|
url: appToken.wpsUrl + '&_w_tokentype=1',
|
||||||
|
refreshToken: refreshToken,
|
||||||
|
})
|
||||||
|
webOfficeSdk.setToken({
|
||||||
|
token: appToken.token,
|
||||||
|
timeout: 10 * 60 * 1000,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*await webOfficeSdk.ready();
|
||||||
|
const app = webOfficeSdk.Application;
|
||||||
|
// 获取总页数
|
||||||
|
const totalPages = await app.ActiveDocument.Range.Information(
|
||||||
|
app.Enum.WdInformation.wdNumberOfPagesInDocument
|
||||||
|
);
|
||||||
|
console.log("总页数为:", totalPages);*/
|
||||||
|
}
|
||||||
|
|
||||||
const handlePreview = async (file) => {
|
const handlePreview = async (file) => {
|
||||||
const fileUrl = file.response?.data?.fileUrl || file.fileUrl;
|
const fileUrl = file.response?.data?.fileUrl || file.fileUrl;
|
||||||
previewFile.value =
|
previewFile.value =
|
||||||
@ -330,4 +392,41 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.file-name-span {
|
||||||
|
margin-right: 16px;
|
||||||
|
color: #1890ff;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-outlined-span {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-space:hover {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-space {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-modal {
|
||||||
|
.ant-modal {
|
||||||
|
max-width: 100%;
|
||||||
|
top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.ant-modal-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: calc(100vh);
|
||||||
|
}
|
||||||
|
.ant-modal-body {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user