Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xiaomai-cloud-class-web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiaomai-cloud-class
xiaomai-cloud-class-web
Commits
0d46d6db
Commit
0d46d6db
authored
Jun 17, 2021
by
wufan
Browse files
Options
Browse Files
Download
Plain Diff
fix:合并master
parents
7976d506
3ceb4c87
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
571 additions
and
72 deletions
+571
-72
src/bu-components/ChooseMembersModal.jsx
+2
-3
src/bu-components/ChooseMembersModal.less
+1
-1
src/bu-components/ManagingMembersModal.jsx
+8
-6
src/bu-components/ManagingMembersModal.less
+3
-0
src/domains/basic-domain/constants.ts
+2
-2
src/domains/course-domain/constants.ts
+2
-2
src/modules/course-manage/graphics-course/components/GraphicsCourseList.jsx
+2
-2
src/modules/course-manage/modal/ShareLiveModal.jsx
+31
-2
src/modules/course-manage/modal/ShareLiveModal.less
+83
-6
src/modules/course-manage/offline-course/components/OfflineCourseList.jsx
+2
-2
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
+2
-2
src/modules/plan-manage/modal/SharePlanModal.jsx
+34
-3
src/modules/plan-manage/modal/SharePlanModal.less
+84
-6
src/modules/resource-disk/components/FolderList.jsx
+154
-28
src/modules/resource-disk/modal/PreviewFileModal.jsx
+57
-0
src/modules/resource-disk/modal/PreviewFileModal.less
+54
-0
src/modules/root/App.tsx
+1
-2
src/modules/root/Header.jsx
+19
-4
src/modules/root/Menu.less
+10
-1
src/modules/root/Menu.tsx
+20
-0
No files found.
src/bu-components/ChooseMembersModal.jsx
View file @
0d46d6db
...
...
@@ -157,7 +157,7 @@ class ChooseMembersModal extends React.Component {
let
rightsList
=
[];
// 保存新加进去的成员
selectUserList
.
map
((
item
)
=>
{
rightsList
.
push
({
rights
:
"LOOK
_DOWNLOAD
"
,
rights
:
"LOOK"
,
userId
:
item
.
userId
})
return
rightsList
...
...
@@ -207,7 +207,6 @@ class ChooseMembersModal extends React.Component {
dataIndex
:
'avatar'
,
render
:
(
value
,
record
)
=>
{
const
{
adminName
}
=
record
;
return
(
<
div
className=
'avatar'
>
{
...
...
@@ -233,7 +232,7 @@ class ChooseMembersModal extends React.Component {
title
:
'学员名'
,
key
:
'adminNameRight'
,
dataIndex
:
'adminName'
,
width
:
'
70
%'
,
width
:
'
65
%'
,
render
:
(
value
,
record
)
=>
{
const
{
adminName
=
''
,
avatar
}
=
record
;
return
(
...
...
src/bu-components/ChooseMembersModal.less
View file @
0d46d6db
...
...
@@ -37,7 +37,7 @@
>tr >td {
border-bottom: none;
background-color: #fff !important;
padding:8px 8px !important;
}
}
}
...
...
src/bu-components/ManagingMembersModal.jsx
View file @
0d46d6db
...
...
@@ -19,7 +19,7 @@ class ManagingMembersModal extends React.Component {
addManagingMember
:
false
,
// 是否点击了添加成员
storeId
:
User
.
getStoreId
()
,
// 学院Id
iconRotateList
:
[],
userAuthority
:
[
'可编辑'
,
'可
查看/下载'
,
'仅
可查看'
,
''
,
'创建者'
,
'学院管理员'
]
,
// 空 代表删除
userAuthority
:
[
'可编辑'
,
'可
下载'
,
'
可查看'
,
''
,
'创建者'
,
'学院管理员'
]
,
// 空 代表删除
}
}
componentDidMount
()
{
...
...
@@ -64,7 +64,7 @@ class ManagingMembersModal extends React.Component {
// 修改成员权限
updateFileUserAuthority
=
(
params
,
newRights
=
1
)
=>
{
const
rightList
=
[
'EDIT'
,
'LOOK_DOWNLOAD'
,
''
];
const
rightList
=
[
'EDIT'
,
'LOOK_DOWNLOAD'
,
'
LOOK
'
];
let
{
iconRotateList
}
=
this
.
state
;
let
_params
=
params
;
_params
.
rights
=
rightList
[
newRights
];
...
...
@@ -173,10 +173,10 @@ class ManagingMembersModal extends React.Component {
<
span
className=
'menu-bottom'
>
下载、复制
</
span
>
</
div
>
</
Menu
.
Item
>
{
/*
<Menu.Item key="LOOK" >
<div onClick={() => this.updateFileUserAuthority(params, 2)}>
仅可查看
</div>
<span className='menu-bottom'>
{userAuthority[2]}
</span>
</Menu.Item>
*/
}
<
Menu
.
Item
key=
"LOOK"
>
<
div
onClick=
{
()
=>
this
.
updateFileUserAuthority
(
params
,
2
)
}
>
{
userAuthority
[
2
]
}
</
div
>
<
span
className=
'menu-bottom'
>
查看
</
span
>
</
Menu
.
Item
>
<
Menu
.
Divider
key=
'LINE'
/>
<
Menu
.
Item
key=
"REMOVE"
>
<
div
className=
'remove'
onClick=
{
()
=>
this
.
removeUser
(
params
,
userAuthority
[
3
])
}
>
移除
</
div
>
...
...
@@ -247,6 +247,8 @@ class ManagingMembersModal extends React.Component {
num
=
1
;
}
else
if
(
record
.
rights
===
"EDIT"
)
{
num
=
0
;
}
else
if
(
record
.
rights
==
"LOOK"
){
num
=
2
;
}
}
return
(
...
...
src/bu-components/ManagingMembersModal.less
View file @
0d46d6db
...
...
@@ -35,6 +35,9 @@
.ant-table-row{
background-color: #fff !important;
}
tr:first-child{
display: none;
}
.ant-table-row:hover{
background-color: #E9E9E9;
}
...
...
src/domains/basic-domain/constants.ts
View file @
0d46d6db
/*
* @Author: 陈剑宇
* @Date: 2020-05-07 14:43:01
* @LastEditTime: 2021-0
5-28 15:20:40
* @LastEditors:
fusanqiasng
* @LastEditTime: 2021-0
6-11 16:44:17
* @LastEditors:
Please set LastEditors
* @Description:
* @FilePath: /wheat-web-demo/src/domains/basic-domain/constants.ts
*/
...
...
src/domains/course-domain/constants.ts
View file @
0d46d6db
/*
* @Author: 吴文洁
* @Date: 2020-08-20 09:21:40
* @LastEditors:
zhangleyuan
* @LastEditTime: 2021-0
2-20 17:08:58
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-0
6-11 15:17:56
* @Description:
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
...
...
src/modules/course-manage/graphics-course/components/GraphicsCourseList.jsx
View file @
0d46d6db
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors:
yuananting
* @LastEditTime: 2021-06-
02 15:05:54
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-06-
15 20:01:05
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
...
...
src/modules/course-manage/modal/ShareLiveModal.jsx
View file @
0d46d6db
...
...
@@ -52,6 +52,13 @@ class ShareLiveModal extends React.Component {
size
:
98
,
})
qrcodeWrapDom
.
appendChild
(
qrcodeNode
)
const
qrcodeWrapDomDownload
=
document
.
querySelector
(
'#qrcodeWrap-dowload'
)
const
qrcodeNodeDownLoad
=
new
qrcode
({
text
:
this
.
state
.
shareUrl
,
size
:
196
,
})
qrcodeWrapDomDownload
.
appendChild
(
qrcodeNodeDownLoad
)
}
)
})
...
...
@@ -72,13 +79,12 @@ class ShareLiveModal extends React.Component {
()
=>
{
this
.
setState
({
time
:
new
Date
().
valueOf
()
},
()
=>
{
setTimeout
(()
=>
{
let
node
=
document
.
getElementById
(
'poster'
)
let
node
=
document
.
getElementById
(
'poster
-dowload
'
)
domtoimage
.
toPng
(
node
).
then
((
imgData
)
=>
{
console
.
log
(
imgData
)
const
download
=
document
.
createElement
(
'a'
)
const
{
courseName
}
=
this
.
props
.
data
$
(
download
).
attr
(
'href'
,
imgData
).
attr
(
'download'
,
`
${
courseName
}
.png`
).
get
(
0
).
click
()
// this.props.close()
})
},
1000
)
})
...
...
@@ -158,6 +164,29 @@ class ShareLiveModal extends React.Component {
<
div
className=
'qrcode-wrap__right'
id=
'qrcodeWrap'
></
div
>
</
div
>
</
div
>
<
div
id=
'poster-dowload'
>
<
div
className=
'store-name'
>
<
span
className=
'text'
>
{
User
.
getStoreName
()
}
</
span
>
</
div
>
<
div
className=
'course-name-title'
>
{
type
===
'videoClass'
?
`${courseName}开课啦`
:
`邀请你观看直播:`
}
</
div
>
{
type
===
'liveClass'
&&
<
div
class=
'live-couse-name'
>
{
courseName
}
</
div
>
}
<
Choose
>
<
When
condition=
{
showImg
}
>
<
img
crossOrigin=
'*'
src=
{
coverImgSrc
+
`?=${time}`
}
className=
'course-cover'
alt=
''
/>
</
When
>
<
Otherwise
>
<
img
src=
{
coverImgSrc
+
`?=${time}`
}
className=
'course-cover'
alt=
''
/>
</
Otherwise
>
</
Choose
>
<
div
className=
'qrcode-wrap'
>
<
div
className=
'qrcode-wrap__left'
>
<
div
className=
'text'
>
长按识别二维码进入观看
</
div
>
<
img
className=
'finger'
src=
'https://image.xiaomaiketang.com/xm/thpkWDwJsC.png'
alt=
''
/>
</
div
>
<
div
className=
'qrcode-wrap__right'
id=
'qrcodeWrap-dowload'
></
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
'right'
>
<
div
className=
'share-poster right__item'
>
...
...
src/modules/course-manage/modal/ShareLiveModal.less
View file @
0d46d6db
.share-live-modal {
.ant-modal-body {
display: flex;
#poster{
background: #FFF;
margin:0;
padding: 20px;
}
height:510px !important;
overflow: hidden !important;
.left {
width: 303px;
margin: 0 32px 0 16px;
box-shadow:0px 2px 10px 0px rgba(0,0,0,0.05);
border-radius: 12px;
#poster{
background: #FFF;
margin:0;
padding: 20px;
margin-bottom:140px;
.course-name-title {
font-size: 14px;
color: #333;
...
...
@@ -83,6 +84,82 @@
}
}
}
#poster-dowload{
background: #FFF;
margin:0;
padding: 40px;
width:606px;
.course-name-title {
font-size: 28px;
color: #333;
line-height: 40px;
margin-bottom: 8px;
}
.live-couse-name{
font-size:32px;
color:#333333;
font-weight: 600;
}
.course-name {
color: #333;
font-size: 32px;
font-weight: 600;
line-height: 40px;
}
.course-cover {
width: 526px;
height: 286px;
border-radius: 6px;
margin-top: 16px;
}
.qrcode-wrap {
padding: 0 32px;
display: flex;
align-items: center;
margin: 48px 0 32px 0;
&__left {
width: 196px;
text-align: center;
margin-right: 44px;
.text {
line-height: 40px;
}
.finger {
width: 80px;
height: 80px;
margin-top: 16px;
}
}
&__right {
width: 220px;
height: 220px;
padding: 12px
}
}
.store-name {
// padding: 8px 16px;
display: flex;
align-items: center;
margin-bottom: 16px;
.text {
font-size: 24px;
color: #999;
font-size: 28px;
line-height: 40px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 100%;
}
}
}
}
.right {
.title {
...
...
src/modules/course-manage/offline-course/components/OfflineCourseList.jsx
View file @
0d46d6db
/*
* @Author: 吴文洁
* @Date: 2020-08-05 10:12:45
* @LastEditors:
yuananting
* @LastEditTime: 2021-06-
02 16:15:55
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-06-
11 16:44:42
* @Description: 视频课-列表模块
* @Copyright: 杭州杰竞科技有限公司 版权所有
*/
...
...
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
View file @
0d46d6db
...
...
@@ -2,8 +2,8 @@
* @Description:
* @Author: zangsuyun
* @Date: 2021-03-12 14:49:40
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-30 20:37:42
* @LastEditors:
Please set LastEditors
* @LastEditTime: 2021-0
6-11 16:44:59
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
src/modules/plan-manage/modal/SharePlanModal.jsx
View file @
0d46d6db
...
...
@@ -51,6 +51,13 @@ class ShareLiveModal extends React.Component {
size
:
98
,
})
qrcodeWrapDom
.
appendChild
(
qrcodeNode
)
const
qrcodeWrapDomDownload
=
document
.
querySelector
(
'#qrcodeWrap-dowload'
)
const
qrcodeNodeDownLoad
=
new
qrcode
({
text
:
this
.
state
.
shareUrl
,
size
:
196
,
})
qrcodeWrapDomDownload
.
appendChild
(
qrcodeNodeDownLoad
)
}
)
})
...
...
@@ -70,9 +77,8 @@ class ShareLiveModal extends React.Component {
},
()
=>
{
this
.
setState
({
time
:
new
Date
().
valueOf
()
},
()
=>
{
let
node
=
document
.
getElementById
(
'poster'
)
let
node
=
document
.
getElementById
(
'poster
-dowload
'
)
domtoimage
.
toPng
(
node
).
then
((
imgData
)
=>
{
console
.
log
(
imgData
)
const
download
=
document
.
createElement
(
'a'
)
const
{
planName
}
=
this
.
props
.
data
$
(
download
).
attr
(
'href'
,
imgData
).
attr
(
'download'
,
`
${
planName
}
.png`
).
get
(
0
).
click
()
...
...
@@ -112,7 +118,7 @@ class ShareLiveModal extends React.Component {
<
div
className=
'course-name-title'
>
邀请你参与培训:
</
div
>
<
div
class=
'live-couse-name'
>
{
planName
}
</
div
>
<
div
class
Name
=
'live-couse-name'
>
{
planName
}
</
div
>
<
Choose
>
<
When
condition=
{
showImg
}
>
<
img
crossOrigin=
'*'
src=
{
coverUrl
+
`?=${time}`
}
className=
'course-cover'
alt=
''
/>
...
...
@@ -130,6 +136,31 @@ class ShareLiveModal extends React.Component {
<
div
className=
'qrcode-wrap__right'
id=
'qrcodeWrap'
></
div
>
</
div
>
</
div
>
<
div
id=
'poster-dowload'
>
<
div
className=
'store-name'
>
<
span
className=
'text'
>
{
User
.
getStoreName
()
}
</
span
>
</
div
>
<
div
className=
'course-name-title'
>
邀请你参与培训:
</
div
>
<
div
className=
'live-couse-name'
>
{
planName
}
</
div
>
<
Choose
>
<
When
condition=
{
showImg
}
>
<
img
crossOrigin=
'*'
src=
{
coverUrl
+
`?=${time}`
}
className=
'course-cover'
alt=
''
/>
</
When
>
<
Otherwise
>
<
img
src=
{
coverUrl
+
`?=${time}`
}
className=
'course-cover'
alt=
''
/>
</
Otherwise
>
</
Choose
>
<
div
className=
'qrcode-wrap'
>
<
div
className=
'qrcode-wrap__left'
>
<
div
className=
'text'
>
长按识别二维码进入观看
</
div
>
<
img
className=
'finger'
src=
'https://image.xiaomaiketang.com/xm/thpkWDwJsC.png'
alt=
''
/>
</
div
>
<
div
className=
'qrcode-wrap__right'
id=
'qrcodeWrap-dowload'
></
div
>
</
div
>
</
div
>
</
div
>
<
div
className=
'right'
>
<
div
className=
'share-poster right__item'
>
...
...
src/modules/plan-manage/modal/SharePlanModal.less
View file @
0d46d6db
.share-live-modal {
.ant-modal-body {
display: flex;
#poster{
background: #FFF;
margin:0;
padding: 20px;
}
height:510px !important;
overflow: hidden !important;
.left {
width: 303px;
margin: 0 32px 0 16px;
box-shadow:0px 2px 10px 0px rgba(0,0,0,0.05);
border-radius: 12px;
#poster{
background: #FFF;
margin:0;
padding: 20px;
margin-bottom:140px;
.course-name-title {
font-size: 14px;
color: #333;
...
...
@@ -83,6 +84,83 @@
}
}
}
#poster-dowload{
background: #FFF;
margin:0;
padding: 40px;
width:606px;
.course-name-title {
font-size: 28px;
color: #333;
line-height: 40px;
margin-bottom: 8px;
}
.live-couse-name{
font-size:32px;
color:#333333;
font-weight: 600;
}
.course-name {
color: #333;
font-size: 32px;
font-weight: 600;
line-height: 40px;
}
.course-cover {
width: 526px;
height: 286px;
border-radius: 6px;
margin-top: 16px;
}
.qrcode-wrap {
padding: 0 32px;
display: flex;
align-items: center;
margin: 48px 0 32px 0;
&__left {
width: 196px;
text-align: center;
margin-right: 44px;
.text {
line-height: 40px;
}
.finger {
width: 80px;
height: 80px;
margin-top: 16px;
}
}
&__right {
width: 220px;
height: 220px;
padding: 12px
}
}
.store-name {
// padding: 8px 16px;
display: flex;
align-items: center;
margin-bottom: 16px;
.text {
font-size: 12px;
color: #999;
font-size: 28px;
line-height: 40px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 100%;
}
}
}
}
.right {
.title {
...
...
src/modules/resource-disk/components/FolderList.jsx
View file @
0d46d6db
...
...
@@ -21,13 +21,15 @@ import UploadProgressModal from '@/bu-components/UploadProgressModal';
import
SelectPrepareFileModal
from
'@/bu-components/SelectPrepareFileModal'
;
import
CopyFileModal
from
'@/bu-components/CopyFileModal'
;
import
ManagingMembersModal
from
'@/bu-components/ManagingMembersModal'
;
import
PreviewFileModal
from
'../modal/PreviewFileModal'
import
ScanFileModal
from
'../modal/ScanFileModal'
;
import
CreateFolderModal
from
'../modal/CreateFolderModal'
;
import
User
from
'@/common/js/user'
;
import
axios
from
'axios'
;
const
appId
=
"yozoqvpO2Hvz8346"
;
const
DEL_FOLDER_URL_MAP
=
{
'MYSELF'
:
'public/hadesStore/delFolder'
,
'COMMON'
:
'public/hadesStore/delFolder'
...
...
@@ -52,7 +54,10 @@ class FolderList extends React.Component {
showCopyFileModal
:
false
,
// 复制文件弹窗
showManagingModal
:
false
,
// 管理文件查看编辑权限
nonCompliantFileList
:
[],
// 不符合上限的文件列表
parentRights
:
''
// 继承父级文件夹权限
parentRights
:
''
,
// 继承父级文件夹权限
showPreviewModal
:
false
,
//是否显示loading
previewing
:
false
,
//是否正在预览
previewStatus
:
'UPLOAD'
//预览文件的生成状态
}
}
...
...
@@ -95,10 +100,123 @@ class FolderList extends React.Component {
break
;
}
}
handleYZPreviewDataDot
=
(
folderFormat
)
=>
{
switch
(
folderFormat
)
{
case
'PDF'
:
window
.
WEBTRACING
(
'resource_disk_yz_file_preview_pdf'
,
'资料云盘_点击永中预览_pdf'
);
break
;
case
'WORD'
:
case
'DOCX'
:
case
'DOC'
:
window
.
WEBTRACING
(
'resource_disk_yz_file_preview_word'
,
'资料云盘_点击永中预览_word'
);
break
;
case
'EXCEL'
:
window
.
WEBTRACING
(
'resource_disk_yz_file_preview_excel'
,
'资料云盘_点击永中预览_excel'
);
break
;
case
'PPT'
:
case
'PPTX'
:
window
.
WEBTRACING
(
'resource_disk_yz_file_preview_ppt'
,
'资料云盘_点击永中预览_ppt'
);
break
;
default
:
break
;
}
}
getYoZoSign
=
(
data
,
type
,
folderName
)
=>
{
return
new
Promise
((
resolve
)
=>
{
let
uploadParams
;
if
(
type
===
"UPLOAD"
){
uploadParams
=
{
fileUrl
:
data
,
instId
:
window
.
currentUserInstInfo
.
instId
,
yoZoTypeEnum
:
'UPLOAD'
}
}
else
{
uploadParams
=
{
fileVersionId
:
data
,
instId
:
window
.
currentUserInstInfo
.
instId
,
yoZoTypeEnum
:
'VIEW'
,
htmlTitle
:
folderName
}
}
Service
.
Apollo
(
'public/apollo/getYoZoSign'
,
uploadParams
).
then
(
res
=>
{
const
{
result
=
[]
}
=
res
;
resolve
(
result
)
});
})
}
saveYoZoFileVersionId
=
(
fileVersionId
,
folderId
)
=>
{
const
params
=
{
fileVersionId
,
folderId
,
instId
:
window
.
currentUserInstInfo
.
instId
,
}
Service
.
Apollo
(
'public/apollo/saveYoZoFileVersionId'
,
params
).
then
(
res
=>
{
});
}
// 预览文件
handleScanFile
=
(
folder
)
=>
{
const
{
folderFormat
,
folderSize
,
ossUrl
}
=
folder
;
handleScanFile
=
async
(
folder
)
=>
{
const
{
folderFormat
,
folderSize
,
ossUrl
,
rights
,
fileVersionId
,
id
,
folderName
}
=
folder
;
const
{
currentRootDisk
}
=
this
.
props
;
//如果是公共文件且只有查看的权限的用户的预览对接的三方是永中
const
that
=
this
;
if
(
currentRootDisk
.
disk
===
"COMMON"
&&
rights
===
"LOOK"
){
switch
(
folderFormat
)
{
case
'PDF'
:
case
'WORD'
:
case
'DOCX'
:
case
'DOC'
:
case
'EXCEL'
:
case
'PPT'
:
case
'PPTX'
:
that
.
handleYZPreviewDataDot
(
folderFormat
);
if
(
!
fileVersionId
){
this
.
setState
({
previewing
:
true
,
showPreviewModal
:
true
,
previewStatus
:
'UPLOAD'
},
async
()
=>
{
const
uploadSign
=
await
that
.
getYoZoSign
(
ossUrl
,
"UPLOAD"
);
axios
.
post
(
`https://dmc.yozocloud.cn/api/file/http?fileUrl=
${
ossUrl
}
&appId=
${
appId
}
&sign=
${
uploadSign
}
`
)
.
then
(
async
function
(
response
){
that
.
saveYoZoFileVersionId
(
response
.
data
.
data
.
fileVersionId
,
id
);
const
{
previewing
}
=
that
.
state
;
if
(
previewing
){
const
previewSign
=
await
that
.
getYoZoSign
(
response
.
data
.
data
.
fileVersionId
,
"VIEW"
,
folderName
);
const
url
=
`https://eic.yozocloud.cn/api/view/file?fileVersionId=
${
response
.
data
.
data
.
fileVersionId
}
&appId=
${
appId
}
&sign=
${
previewSign
}
&htmlTitle=
${
folderName
}
`
that
.
setState
({
previewStatus
:
'UPLOAD_SUCCESS'
,
url
})
}
})
})
}
else
{
const
previewSign
=
await
that
.
getYoZoSign
(
fileVersionId
,
"VIEW"
,
folderName
);
const
url
=
`http://eic.yozocloud.cn/api/view/file?fileVersionId=
${
fileVersionId
}
&appId=
${
appId
}
&sign=
${
previewSign
}
&htmlTitle=
${
folderName
}
`
const
a
=
document
.
createElement
(
'a'
);
document
.
body
.
appendChild
(
a
);
a
.
setAttribute
(
'href'
,
url
);
a
.
setAttribute
(
'target'
,
'_blank'
);
a
.
click
();
document
.
body
.
removeChild
(
a
)
}
break
;
default
:
const
scanFileModal
=
(
<
ScanFileModal
fileType=
{
folderFormat
}
item=
{
folder
}
close=
{
()
=>
{
this
.
setState
({
scanFileModal
:
null
});
}
}
/>
);
this
.
setState
({
scanFileModal
});
break
;
}
}
else
{
switch
(
folderFormat
)
{
case
'PDF'
:
window
.
open
(
ossUrl
,
"_blank"
);
...
...
@@ -126,20 +244,20 @@ class FolderList extends React.Component {
});
break
;
}
if
(
folderFormat
===
'EXCEL'
)
{
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
;
}
//
if (folderFormat === 'EXCEL') {
//
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
)}
`
window
.
open
(
scanUrl
,
"_blank"
);
...
...
@@ -155,11 +273,17 @@ class FolderList extends React.Component {
this
.
setState
({
scanFileModal
});
break
;
}
}
// 预览文件埋点
this
.
handleDataDot
(
folderFormat
);
}
cancelPreview
=
()
=>
{
this
.
setState
({
previewing
:
false
,
showPreviewModal
:
false
,
previewStatus
:
'UPLOAD'
})
}
// 选择文件夹
handleSelectFolder
=
(
folder
)
=>
{
const
{
folderPathList
,
showResultPage
,
currentRootDisk
}
=
this
.
props
;
...
...
@@ -276,8 +400,8 @@ class FolderList extends React.Component {
title
:
'操作'
,
key
:
'operate'
,
render
:
(
value
,
record
)
=>
{
if
(
!
(
currentRootDisk
.
disk
===
'COMMON'
&&
(
folderPathList
.
length
===
1
||
record
.
folderType
===
'FOLDER'
))
||
hasManagementAuthority
)
{
if
(
(
!
(
currentRootDisk
.
disk
===
'COMMON'
&&
(
folderPathList
.
length
===
1
||
record
.
folderType
===
'FOLDER'
))
||
hasManagementAuthority
)
&&
!
(
record
.
rights
===
"LOOK"
)
)
{
return
(
<
Dropdown
overlay=
{
this
.
renderMenu
(
record
)
}
trigger=
{
[
'hover'
]
}
>
<
span
className=
"icon iconfont"
>

</
span
>
...
...
@@ -608,14 +732,13 @@ class FolderList extends React.Component {
<
Menu
.
Divider
key=
"administration-bottom"
/>
]
}
{
folderType
===
'FILE'
&&
{
(
folderType
===
'FILE'
&&
(
rights
===
"LOOK_DOWNLOAD"
||
rights
===
'EDIT'
)
)
&&
<
Menu
.
Item
key=
"download"
>
<
span
onClick=
{
()
=>
{
this
.
handleDownload
(
record
)
}
}
>
下载
</
span
>
</
Menu
.
Item
>
}
{
currentRootDisk
.
disk
===
'COMMON'
&&
{
(
rights
===
"LOOK_DOWNLOAD"
||
rights
===
'EDIT'
)
&&
<
Menu
.
Item
key=
"copy"
>
<
span
onClick=
{
()
=>
this
.
handleShowCopyFileModal
(
record
)
}
>
复制到
</
span
>
</
Menu
.
Item
>
...
...
@@ -646,7 +769,8 @@ class FolderList extends React.Component {
const
{
currentFolder
,
currentFile
,
renameModalData
,
showSelectFileModal
,
showUploadModal
,
localFileList
,
showCopyFileModal
,
showManagingModal
showUploadModal
,
localFileList
,
showCopyFileModal
,
showManagingModal
,
showPreviewModal
,
previewStatus
,
url
}
=
this
.
state
;
const
{
selectedFileIds
,
folderList
,
showResultPage
,
...
...
@@ -789,7 +913,9 @@ class FolderList extends React.Component {
}
}
/>
}
{
showPreviewModal
&&
<
PreviewFileModal
onCancel=
{
()
=>
this
.
cancelPreview
()
}
previewStatus=
{
previewStatus
}
url=
{
url
}
/>
}
{
this
.
state
.
scanFileModal
}
{
this
.
state
.
chargeModal
}
</
div
>
...
...
src/modules/resource-disk/modal/PreviewFileModal.jsx
0 → 100644
View file @
0d46d6db
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
;
src/modules/resource-disk/modal/PreviewFileModal.less
0 → 100644
View file @
0d46d6db
.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
src/modules/root/App.tsx
View file @
0d46d6db
...
...
@@ -116,7 +116,6 @@ const App: React.FC = (props: any) => {
setMenuType
(
!
menuType
);
}
if
(
!
storeUserId
)
{
return
<
div
></
div
>
}
...
...
@@ -127,7 +126,7 @@ const App: React.FC = (props: any) => {
<
ConfigProvider
locale=
{
zhCN
}
autoInsertSpaceInButton=
{
false
}
>
<
Main
menuType=
{
menuType
}
/>
</
ConfigProvider
>
<
Menu
menuType=
{
menuType
}
handleMenuType=
{
handleMenuType
}
/>
<
Menu
menuType=
{
menuType
}
handleMenuType=
{
handleMenuType
}
/>
</
div
>
)
}
...
...
src/modules/root/Header.jsx
View file @
0d46d6db
...
...
@@ -11,6 +11,7 @@ import { Radio, Button, Dropdown, Modal, Tooltip, message } from "antd";
import
{
LIVE_SHARE
}
from
"@/domains/course-domain/constants"
;
import
User
from
"@/common/js/user"
;
import
Service
from
"@/common/js/service"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
BaseService
from
"@/domains/basic-domain/baseService"
;
import
{
XMContext
}
from
"@/store/context"
;
import
logoImg
from
"@/common/images/logo.png"
;
...
...
@@ -18,6 +19,7 @@ import CourseService from "@/domains/course-domain/CourseService";
import
qrcode
from
"@/libs/qrcode/qrcode.js"
;
import
Bus
from
'@/core/tbus'
;
import
ClickOutside
from
'../../components/ClickOutside'
;
import
_
from
"underscore"
;
const
baseImg
=
"https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png"
;
const
{
confirm
}
=
Modal
;
...
...
@@ -38,6 +40,8 @@ function Header(props) {
const
storeUserId
=
User
.
getStoreUserId
();
const
enterpriseId
=
User
.
getEnterpriseId
();
const
messageHelpRef
=
useRef
(
null
)
const
domRef
=
useRef
(
null
);
const
listRef
=
useRef
(
list
);
...
...
@@ -54,6 +58,17 @@ function Header(props) {
enterpriseId
?
getEnterpriseUser
()
:
User
.
setIsAdmin
(
false
);
},
[
storeUserId
]);
useEffect
(()
=>
{
if
(
!
messageHelpRef
.
current
)
{
return
}
if
(
menuType
)
{
messageHelpRef
.
current
.
style
.
marginLeft
=
"194px"
}
else
{
messageHelpRef
.
current
.
style
.
marginLeft
=
"76px"
}
},[
menuType
])
function
getUserInfo
()
{
const
param
=
{
storeUserId
:
User
.
getStoreUserId
(),
...
...
@@ -218,10 +233,10 @@ function Header(props) {
return
(
<
div
id=
"top-container"
className=
"top-container"
>
<
div
className=
"top top-nav"
>
<
div
>
<
img
src=
'https://image.xiaomaiketang.com/xm/WEsMPAYxAs.png'
className=
"logo"
alt=
""
/>
</
div
>
<
div
className=
"message-help"
>
{
/*
<div>
<img src=
{topLeftLogo}
className="logo" alt="" />
</div>
*/
}
<
div
className=
"message-help"
ref=
{
messageHelpRef
}
>
{
list
.
length
?
(
<
ClickOutside
onClickOutside=
{
()
=>
{
...
...
src/modules/root/Menu.less
View file @
0d46d6db
@import '../../core/variables.less';
@top-height:
6
0px;
@top-height: 0px;
@menu-bakg: #FFF;
@active-color: #2966FF;
.left-container {
...
...
@@ -12,6 +12,15 @@
width: @xm-left-width;
background: @menu-bakg;
color: #333;
.topLogo {
height: 62px;
img {
width: 138px;
height: 35px;
margin-left: 19px;
margin-top: 13px;
}
}
.menu-type-icon{
margin:4px 0 0px 150px;
cursor: pointer;
...
...
src/modules/root/Menu.tsx
View file @
0d46d6db
...
...
@@ -5,8 +5,12 @@ import {
import
{
Menu
}
from
'antd'
;
import
{
menuList
}
from
'../../routes//config/menuList'
import
{
XMContext
}
from
'../../store/context'
;
import
Service
from
"@/common/js/service"
;
import
StoreService
from
"@/domains/store-domain/storeService"
;
import
User
from
"@/common/js/user"
;
import
_
from
'underscore'
;
import
"./Menu.less"
;
console
.
log
(
'2021-06-17'
)
const
{
SubMenu
}
=
Menu
;
function
Aside
(
props
:
any
)
{
...
...
@@ -14,6 +18,7 @@ function Aside(props: any) {
const
ctx
:
any
=
useContext
(
XMContext
);
const
[
selectKey
,
setSelectKey
]
=
useState
();
const
[
openKeys
,
setOpenKeys
]
=
useState
([
''
]);
const
[
topLogoUrl
,
setTopLogoUrl
]
=
useState
(
""
)
const
rootSubmenuKeys
=
_
.
pluck
(
menuList
,
'groupCode'
);
useEffect
(()
=>
{
const
link
=
props
.
location
.
pathname
;
...
...
@@ -31,6 +36,17 @@ function Aside(props: any) {
return
item
;
})
},
[
props
.
location
.
pathname
])
useEffect
(()
=>
{
getTopLeftLogo
()
})
function
getTopLeftLogo
()
{
if
(
User
.
getToken
())
{
StoreService
.
getStoreDetail
({
storeId
:
User
.
getStoreId
()})
.
then
(
res
=>
{
setTopLogoUrl
(
res
.
result
.
logo
)
})
}
}
function
toggleMenu
(
item
:
any
)
{
window
.
RCHistory
.
push
(
item
.
link
)
}
...
...
@@ -54,6 +70,10 @@ function Aside(props: any) {
:
"left-container left-container-vertical"
}
>
<
div
className=
"topLogo"
>
{
menuType
?
(<
img
src=
{
topLogoUrl
}
alt=
""
></
img
>)
:
(
""
)
}
</
div
>
<
div
className=
"menu-type-icon"
onClick=
{
handleMenu
}
>
{
menuType
?
(
<
span
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment