Commit ffe5a5f7 by zhangleyuan

feat:永忠优化

parent 9e611ef6
import React from 'react';
import "./PreviewFileModal.less";
import { Spin } from 'antd'
class PreviewFileModal extends React.Component {
constructor(props) {
super(props);
this.state = {};
}
cancelPreView = ()=>{
this.props.onCancel();
}
toPreView = (url)=>{
const a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('href', url);
a.setAttribute('target', '_blank');
a.click();
document.body.removeChild(a);
this.props.onCancel();
}
render() {
const { previewStatus,url} = this.props
return (
<div className="preview-modal">
<div className="preview-modal-content">
<div className="load-img-box">
{previewStatus === "UPLOAD" &&
<Spin size="large"/>
}
{previewStatus === "UPLOAD_SUCCESS" &&
<img className="load-img" src="https://image.xiaomaiketang.com/xm/jJRK3bTEdc.png"></img>
}
</div>
<div className="load-text-box">
{previewStatus === "UPLOAD" &&
<div className="load-text-box-title">预览生成中</div>
}
{previewStatus === "UPLOAD_SUCCESS" &&
<div className="load-text-box-title">预览生成成功</div>
}
</div>
<div className="operate">
<span className="btn cancel-preview-btn" onClick={()=>this.cancelPreView()}>取消预览</span>
{previewStatus === "UPLOAD" &&
<span className="btn to-preview-btn__disabled to-preview-btn">去查看</span>
}
{previewStatus === "UPLOAD_SUCCESS" &&
<span className="btn to-preview-btn" onClick={()=>this.toPreView(url)}>去查看</span>
}
</div>
</div>
</div>
);
}
}
export default PreviewFileModal;
.preview-modal{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 102;
height: 100%;
background: rgba(0, 0, 0, 0.7);
.preview-modal-content{
position:absolute;
left:calc(50% - 133px);
top:calc(50% - 87px);
color:#FFF;
text-align:center;
width:266px;
height:174px;
.ant-spin-dot-item{
background-color: #FFF;
}
.load-img-box{
.load-img{
width:44px;
height:44px;
}
}
.load-text-box{
margin-top:23px;
font-size:16px;
color:#FFF;
.load-text-box-title{
margin-bottom:8px;
}
}
.operate{
margin-top:24px;
.btn {
padding:5px 12px;
border:1px solid #E8E8E8;
border-radius:2px;
}
.cancel-preview-btn{
margin-right:8px;
}
.to-preview-btn__disabled{
border:1px solid #E8E8E8;
opacity: 0.4;
}
}
}
}
\ No newline at end of file
/* /*
* @Author: yuananting * @Author: yuananting
* @Date: 2021-03-03 15:13:12 * @Date: 2021-03-03 15:13:12
* @LastEditors: fusanqiasng * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-06-16 09:57:18 * @LastEditTime: 2021-06-22 14:31:46
* @Description: 助学工具接口 * @Description: 助学工具接口
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
......
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-12-01 17:21:21 * @Date: 2020-12-01 17:21:21
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-04-09 14:28:09 * @LastEditTime: 2021-06-22 14:56:34
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import Service from "@/common/js/service"; import Service from "@/common/js/service";
import axios from 'axios';
export function sendLoginAuthCode(params: object) { export function sendLoginAuthCode(params: object) {
return Service.Hades("anon/hades/sendLoginAuthCode", params); return Service.Hades("anon/hades/sendLoginAuthCode", params);
} }
...@@ -47,6 +47,16 @@ export function getEnterpriseUser(params: object) { ...@@ -47,6 +47,16 @@ export function getEnterpriseUser(params: object) {
export function getWXWorkLoginNoCheck(params: object) { export function getWXWorkLoginNoCheck(params: object) {
return Service.Hades('anon/hades/getWXWorkLoginNoCheck', params); return Service.Hades('anon/hades/getWXWorkLoginNoCheck', params);
} }
export function getYoZoSign(params: object) {
return Service.Apollo('public/apollo/getYoZoSign', params);
}
export function saveYoZoFileVersionId(params: object) {
return Service.Apollo('public/apollo/saveYoZoFileVersionId', params);
}
export function yoZoUpload(ossUrl:String,appId:String,uploadSign:String){
return axios.post(`https://dmc.yozocloud.cn/api/file/http?fileUrl=${ossUrl}&appId=${appId}&sign=${uploadSign}`)
}
export const getOssClient = ( export const getOssClient = (
data: object, data: object,
instId: string, instId: string,
...@@ -63,3 +73,4 @@ export const getOssClient = ( ...@@ -63,3 +73,4 @@ export const getOssClient = (
}); });
} }
/* /*
* @Author: wufan * @Author: wufan
* @Date: 2020-12-01 17:20:49 * @Date: 2020-12-01 17:20:49
* @LastEditors: zhangleyuan * @LastEditors: Please set LastEditors
* @LastEditTime: 2021-04-09 14:28:59 * @LastEditTime: 2021-06-22 14:57:01
* @Description: Description * @Description: Description
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有 * @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/ */
import { getUserStore, getUserPermission ,logout,getStoreUser,sendBizAuthCode,editUserPhone,checkBizAuthCode,sendNewPhoneAuthCode,sendLoginAuthCode,login,getLastedVersion, getEnterpriseUser,getWXWorkLoginNoCheck} from '@/data-source/base/request-apis'; import { getUserStore, getUserPermission ,logout,getStoreUser,sendBizAuthCode,editUserPhone,checkBizAuthCode,sendNewPhoneAuthCode,sendLoginAuthCode,login,getLastedVersion, getEnterpriseUser,getWXWorkLoginNoCheck,getYoZoSign,saveYoZoFileVersionId,yoZoUpload} from '@/data-source/base/request-apis';
export default class StoreService { export default class StoreService {
// 获取员工列表 // 获取员工列表
...@@ -55,5 +55,18 @@ export default class StoreService { ...@@ -55,5 +55,18 @@ export default class StoreService {
static getWXWorkLoginNoCheck(params: any){ static getWXWorkLoginNoCheck(params: any){
return getWXWorkLoginNoCheck(params); return getWXWorkLoginNoCheck(params);
} }
static getYoZoSign(params:any){
return new Promise((resolve) => {
getYoZoSign(params).then(res => {
const { result = [] } = res;
resolve(result)
});
})
}
static saveYoZoFileVersionId(params: any){
return saveYoZoFileVersionId(params);
}
static yoZoUpload(ossUrl:String,appId:String,uploadSign:String){
return yoZoUpload(ossUrl,appId,uploadSign);
}
} }
\ No newline at end of file
/* /*
* @Author: 陈剑宇 * @Author: 陈剑宇
* @Date: 2020-05-07 14:43:01 * @Date: 2020-05-07 14:43:01
* @LastEditTime: 2021-06-11 16:44:17 * @LastEditTime: 2021-06-22 16:49:06
* @LastEditors: Please set LastEditors * @LastEditors: Please set LastEditors
* @Description: * @Description:
* @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts * @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts
...@@ -26,6 +26,10 @@ const PATH_MAP: MapInterface = { ...@@ -26,6 +26,10 @@ const PATH_MAP: MapInterface = {
prod: 'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html', prod: 'https://res.xiaomai0.com/xiaomai-cloud-class-web/h5.html',
} }
export const YZ_APPId = "yozoqvpO2Hvz8346";
export const YZ_PREVIEW_URL: string = 'http://eic.yozocloud.cn/api/view/file'
export const OFFICE_PREVIEW_URL: string = 'https://view.officeapps.live.com/op/view.aspx'
// axios headers config // axios headers config
export const TIME_OUT: number = 20000 export const TIME_OUT: number = 20000
export const USER_TYPE: string = 'B' export const USER_TYPE: string = 'B'
...@@ -37,3 +41,4 @@ export const USER_PREFIX = 'store-live' ...@@ -37,3 +41,4 @@ export const USER_PREFIX = 'store-live'
// host // host
export const BASIC_HOST: string = BASIC_HOST_MAP[ENV] export const BASIC_HOST: string = BASIC_HOST_MAP[ENV]
export const PATH: string = PATH_MAP[ENV] export const PATH: string = PATH_MAP[ENV]
...@@ -16,6 +16,9 @@ import { FileVerifyMap, FileTypeIcon } from '@/common/constants/academic/lessonE ...@@ -16,6 +16,9 @@ import { FileVerifyMap, FileTypeIcon } from '@/common/constants/academic/lessonE
import ScanFileModal from '@/modules/prepare-lesson/modal/ScanFileModal' import ScanFileModal from '@/modules/prepare-lesson/modal/ScanFileModal'
import SelectPrepareFileModal from '@/modules/prepare-lesson/modal/SelectPrepareFileModal'; import SelectPrepareFileModal from '@/modules/prepare-lesson/modal/SelectPrepareFileModal';
import Service from '@/common/js/service'; import Service from '@/common/js/service';
import BaseService from "@/domains/basic-domain/baseService";
import PreviewFileModal from '@/bu-components/PreviewFileModal';
import {YZ_APPId,YZ_PREVIEW_URL,OFFICE_PREVIEW_URL} from '@/domains/basic-domain/constants';
import './ManageCoursewareModal.less'; import './ManageCoursewareModal.less';
...@@ -33,7 +36,10 @@ class ManageCoursewareModal extends React.Component { ...@@ -33,7 +36,10 @@ class ManageCoursewareModal extends React.Component {
scanFileModal: false, scanFileModal: false,
isLessonPermission: false, isLessonPermission: false,
diskList: [], // 机构可见的磁盘目录 diskList: [], // 机构可见的磁盘目录
selectedFileList: [] selectedFileList: [],
showPreviewModal:false, //是否显示loading
previewing:false, //是否正在预览
previewStatus:'UPLOAD' //预览文件的生成状态
} }
} }
...@@ -170,11 +176,11 @@ class ManageCoursewareModal extends React.Component { ...@@ -170,11 +176,11 @@ class ManageCoursewareModal extends React.Component {
const suffix = _.last(item.fileName.split('.')).toLowerCase(); const suffix = _.last(item.fileName.split('.')).toLowerCase();
const type = suffixType[suffix] const type = suffixType[suffix]
const fileType = FileVerifyMap[type].type; const fileType = FileVerifyMap[type].type;
const that = this;
switch (fileType) { switch (fileType) {
case "PDF": case "PDF":
window.open(item.srcDocUrl, "_blank"); // window.open(item.srcDocUrl, "_blank");
break; // break;
case "Excel": case "Excel":
case "EXCEL": case "EXCEL":
case "PPT": case "PPT":
...@@ -183,27 +189,56 @@ class ManageCoursewareModal extends React.Component { ...@@ -183,27 +189,56 @@ class ManageCoursewareModal extends React.Component {
case "WORD": case "WORD":
case "DOCX": case "DOCX":
case "DOC": case "DOC":
let size = parseFloat(item.fileSize.replace(/M$|KB$/g, '')); // let size = parseFloat(item.fileSize.replace(/M$|KB$/g, ''));
if (item.fileSize.includes('KB')) { // if (item.fileSize.includes('KB')) {
size = 0; // size = 0;
} // }
if (((fileType == 'word' || fileType == 'PPT') && size > 10) || ((fileType == 'Excel') && size > 5)) { // if (((fileType == 'word' || fileType == 'PPT') && size > 10) || ((fileType == 'Excel') && size > 5)) {
Modal.confirm({ // Modal.confirm({
title: '抱歉,不能在线预览', // title: '抱歉,不能在线预览',
content: '由于文件较大,不支持在线预览,请下载后再查看', // content: '由于文件较大,不支持在线预览,请下载后再查看',
icon: <QuestionCircleOutlined />, // icon: <QuestionCircleOutlined />,
okText:"下载", // okText:"下载",
onOk:() => { // onOk:() => {
const a = document.createElement('a'); // const a = document.createElement('a');
a.href = item.srcDocUrl; // a.href = item.srcDocUrl;
a.click(); // a.click();
// }
// });
// } else {
// const scanUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + encodeURIComponent(item.srcDocUrl);
// window.open(scanUrl, "_blank");
// }
this.setState({
previewing:true,
showPreviewModal:true,
previewStatus:'UPLOAD'
},async ()=>{
const uploadParams ={
fileUrl:item.srcDocUrl,
instId:User.getStoreId(),
yoZoTypeEnum:'UPLOAD'
} }
}); const uploadSign = await BaseService.getYoZoSign(uploadParams);
} else { BaseService.yoZoUpload(item.srcDocUrl,YZ_APPId,uploadSign).then(async function (response){
const scanUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + encodeURIComponent(item.srcDocUrl); const { previewing } = that.state;
window.open(scanUrl, "_blank"); if(previewing){
} const previewParams ={
break; fileVersionId:response.data.data.fileVersionId,
instId:User.getStoreId(),
yoZoTypeEnum:'VIEW',
htmlTitle:item.fileName
}
const previewSign = await BaseService.getYoZoSign(previewParams);
const url = `${YZ_PREVIEW_URL}?fileVersionId=${response.data.data.fileVersionId}&appId=${YZ_APPId}&sign=${previewSign}&htmlTitle=${item.fileName}`
that.setState({
previewStatus:'UPLOAD_SUCCESS',
url
})
}
})
})
break;
case "JPG": case "JPG":
case "PNG": case "PNG":
case "MP4": case "MP4":
...@@ -214,8 +249,13 @@ class ManageCoursewareModal extends React.Component { ...@@ -214,8 +249,13 @@ class ManageCoursewareModal extends React.Component {
break; break;
} }
}; };
cancelPreview = ()=>{
this.setState({
previewing:false,
showPreviewModal:false,
previewStatus:'UPLOAD'
})
}
render() { render() {
const columns = [ const columns = [
{ {
...@@ -299,7 +339,7 @@ class ManageCoursewareModal extends React.Component { ...@@ -299,7 +339,7 @@ class ManageCoursewareModal extends React.Component {
const { const {
list, scanFileModal, editData, cancelObject, list, scanFileModal, editData, cancelObject,
showSelectFileModal, selectedFileList, showSelectFileModal, selectedFileList,
diskList diskList,showPreviewModal, previewStatus,url
} = this.state; } = this.state;
const _list = _.reject(list, (item) => cancelObject[item.id]); const _list = _.reject(list, (item) => cancelObject[item.id]);
return ( return (
...@@ -365,6 +405,9 @@ class ManageCoursewareModal extends React.Component { ...@@ -365,6 +405,9 @@ class ManageCoursewareModal extends React.Component {
}} }}
onSelect={this.handleAddFile} onSelect={this.handleAddFile}
/> />
{ showPreviewModal &&
<PreviewFileModal onCancel={()=>this.cancelPreview()} previewStatus={previewStatus} url={url}/>
}
</Modal> </Modal>
) )
} }
......
...@@ -21,9 +21,9 @@ import UploadProgressModal from '@/bu-components/UploadProgressModal'; ...@@ -21,9 +21,9 @@ import UploadProgressModal from '@/bu-components/UploadProgressModal';
import SelectPrepareFileModal from '@/bu-components/SelectPrepareFileModal'; import SelectPrepareFileModal from '@/bu-components/SelectPrepareFileModal';
import CopyFileModal from '@/bu-components/CopyFileModal'; import CopyFileModal from '@/bu-components/CopyFileModal';
import ManagingMembersModal from '@/bu-components/ManagingMembersModal'; import ManagingMembersModal from '@/bu-components/ManagingMembersModal';
import PreviewFileModal from '../modal/PreviewFileModal' import PreviewFileModal from '@/bu-components/PreviewFileModal';
import {YZ_APPId,YZ_PREVIEW_URL,OFFICE_PREVIEW_URL} from '@/domains/basic-domain/constants';
import BaseService from "@/domains/basic-domain/baseService";
import ScanFileModal from '../modal/ScanFileModal'; import ScanFileModal from '../modal/ScanFileModal';
import CreateFolderModal from '../modal/CreateFolderModal'; import CreateFolderModal from '../modal/CreateFolderModal';
import User from '@/common/js/user'; import User from '@/common/js/user';
...@@ -121,47 +121,47 @@ class FolderList extends React.Component { ...@@ -121,47 +121,47 @@ class FolderList extends React.Component {
break; break;
} }
} }
getYoZoSign = (data,type,folderName)=>{ // getYoZoSign = (data,type,folderName)=>{
return new Promise((resolve) => { // return new Promise((resolve) => {
let uploadParams; // let uploadParams;
if(type==="UPLOAD"){ // if(type==="UPLOAD"){
uploadParams ={ // uploadParams ={
fileUrl:data, // fileUrl:data,
instId:window.currentUserInstInfo.instId, // instId:window.currentUserInstInfo.instId,
yoZoTypeEnum:'UPLOAD' // yoZoTypeEnum:'UPLOAD'
} // }
}else{ // }else{
uploadParams ={ // uploadParams ={
fileVersionId:data, // fileVersionId:data,
instId:window.currentUserInstInfo.instId, // instId:window.currentUserInstInfo.instId,
yoZoTypeEnum:'VIEW', // yoZoTypeEnum:'VIEW',
htmlTitle:folderName // htmlTitle:folderName
} // }
} // }
Service.Apollo('public/apollo/getYoZoSign', uploadParams).then(res => { // Service.Apollo('public/apollo/getYoZoSign', uploadParams).then(res => {
const { result = [] } = res; // const { result = [] } = res;
resolve(result) // resolve(result)
}); // });
}) // })
} // }
saveYoZoFileVersionId = (fileVersionId,folderId)=>{ // saveYoZoFileVersionId = (fileVersionId,folderId)=>{
const params ={ // const params ={
fileVersionId, // fileVersionId,
folderId, // folderId,
instId: window.currentUserInstInfo.instId, // instId: window.currentUserInstInfo.instId,
} // }
Service.Apollo('public/apollo/saveYoZoFileVersionId', params).then(res => { // Service.Apollo('public/apollo/saveYoZoFileVersionId', params).then(res => {
}); // });
} // }
// 预览文件 // 预览文件
handleScanFile = async (folder) => { handleScanFile = async (folder) => {
const { folderFormat, folderSize, ossUrl,rights,fileVersionId,id,folderName} = folder; const { folderFormat, folderSize, ossUrl,rights,fileVersionId,id,folderName} = folder;
const {currentRootDisk } = this.props; const {currentRootDisk } = this.props;
//如果是公共文件且只有查看的权限的用户的预览对接的三方是永中 //如果是公共文件且只有查看的权限的用户的预览对接的三方是永中
const that = this; const that = this;
if(currentRootDisk.disk==="COMMON" && rights==="LOOK"){ if(currentRootDisk.disk==="COMMON" && rights==="LOOK"){
switch (folderFormat) { switch (folderFormat) {
case 'PDF': case 'PDF':
case 'WORD': case 'WORD':
...@@ -177,24 +177,46 @@ class FolderList extends React.Component { ...@@ -177,24 +177,46 @@ class FolderList extends React.Component {
showPreviewModal:true, showPreviewModal:true,
previewStatus:'UPLOAD' previewStatus:'UPLOAD'
},async ()=>{ },async ()=>{
const uploadSign = await that.getYoZoSign(ossUrl,"UPLOAD"); const uploadParams ={
axios.post(`https://dmc.yozocloud.cn/api/file/http?fileUrl=${ossUrl}&appId=${appId}&sign=${uploadSign}`) fileUrl:ossUrl,
.then(async function (response){ instId:User.getStoreId(),
that.saveYoZoFileVersionId(response.data.data.fileVersionId,id); yoZoTypeEnum:'UPLOAD'
}
const uploadSign = await BaseService.getYoZoSign(uploadParams);
BaseService.yoZoUpload(ossUrl,YZ_APPId,uploadSign).then(async function (response){
const saveParams ={
fileVersionId:response.data.data.fileVersionId,
folderId:id,
instId:User.getStoreId(),
}
BaseService.saveYoZoFileVersionId(saveParams);
const { previewing } = that.state; const { previewing } = that.state;
if(previewing){ if(previewing){
const previewSign = await that.getYoZoSign(response.data.data.fileVersionId,"VIEW",folderName); const previewParams ={
const url = `https://eic.yozocloud.cn/api/view/file?fileVersionId=${response.data.data.fileVersionId}&appId=${appId}&sign=${previewSign}&htmlTitle=${folderName}` fileVersionId:response.data.data.fileVersionId,
instId:User.getStoreId(),
yoZoTypeEnum:'VIEW',
htmlTitle:folderName
}
const previewSign = await BaseService.getYoZoSign(previewParams);
const url = `${YZ_PREVIEW_URL}?fileVersionId=${response.data.data.fileVersionId}&appId=${appId}&sign=${previewSign}&htmlTitle=${folderName}`
that.setState({ that.setState({
previewStatus:'UPLOAD_SUCCESS', previewStatus:'UPLOAD_SUCCESS',
url url
}) })
} }
}) })
}) })
}else{ }else{
const previewSign = await that.getYoZoSign(fileVersionId,"VIEW",folderName); const previewParams ={
const url = `http://eic.yozocloud.cn/api/view/file?fileVersionId=${fileVersionId}&appId=${appId}&sign=${previewSign}&htmlTitle=${folderName}` fileVersionId,
instId:User.getStoreId(),
yoZoTypeEnum:'VIEW',
htmlTitle:folderName
}
const previewSign = await BaseService.getYoZoSign(previewParams);
const url = `${YZ_PREVIEW_URL}?fileVersionId=${fileVersionId}&appId=${appId}&sign=${previewSign}&htmlTitle=${folderName}`
const a = document.createElement('a'); const a = document.createElement('a');
document.body.appendChild(a); document.body.appendChild(a);
a.setAttribute('href', url); a.setAttribute('href', url);
...@@ -234,7 +256,6 @@ class FolderList extends React.Component { ...@@ -234,7 +256,6 @@ class FolderList extends React.Component {
Modal.confirm({ Modal.confirm({
title: '抱歉,不能在线预览', title: '抱歉,不能在线预览',
content: '由于文件较大,不支持在线预览,请下载后再查看', content: '由于文件较大,不支持在线预览,请下载后再查看',
// icon: <Icon type="question-circle" theme="filled" style={{ color: '#FF8534' }}></Icon>,
okText: "下载", okText: "下载",
onOk: () => { onOk: () => {
const a = document.createElement('a'); const a = document.createElement('a');
...@@ -244,21 +265,7 @@ class FolderList extends React.Component { ...@@ -244,21 +265,7 @@ class FolderList extends React.Component {
}); });
break; break;
} }
// if (folderFormat === 'EXCEL') { const prefixUrl = `${OFFICE_PREVIEW_URL}?src=`;
// Modal.confirm({
// title: '抱歉,不能在线预览',
// content: ' 该文件类型不支持在线预览,请下载后再查看',
// // icon: <Icon type="question-circle" theme="filled" style={{ color: '#FF8534' }}></Icon>,
// okText: "下载",
// onOk: () => {
// const a = document.createElement('a');
// a.href = ossUrl;
// a.click();
// }
// });
// break;
// }
const prefixUrl = "https://view.officeapps.live.com/op/view.aspx?src=";
const scanUrl = `${prefixUrl}${encodeURIComponent(ossUrl)}` const scanUrl = `${prefixUrl}${encodeURIComponent(ossUrl)}`
window.open(scanUrl, "_blank"); window.open(scanUrl, "_blank");
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment