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
465ae2c3
Commit
465ae2c3
authored
Apr 08, 2021
by
chenshu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:接入权限
parent
a1745984
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
272 additions
and
39 deletions
+272
-39
src/common/js/user.ts
+23
-0
src/data-source/base/request-apis.ts
+3
-0
src/domains/basic-domain/baseService.ts
+5
-1
src/index.tsx
+2
-1
src/modules/college-manage/CollegeInfoPage.jsx
+1
-20
src/modules/college-manage/CollegeInfoPage.less
+4
-0
src/modules/root/CreateCollege.jsx
+198
-2
src/modules/root/CreateCollege.less
+6
-1
src/modules/root/Header.jsx
+29
-13
src/modules/root/Header.less
+0
-1
src/modules/root/WechatLogin.tsx
+1
-0
No files found.
src/common/js/user.ts
View file @
465ae2c3
...
...
@@ -16,6 +16,10 @@ class User {
return
Storage
.
get
(
`
${
PREFIX
}
_storeId`
)
}
getEnterpriseId
()
{
return
Storage
.
get
(
`
${
PREFIX
}
_enterpriseId`
)
}
getStoreName
(){
return
Storage
.
get
(
`
${
PREFIX
}
_storeName`
)
}
...
...
@@ -39,10 +43,18 @@ class User {
return
Storage
.
get
(
`
${
PREFIX
}
_token`
);
}
getIsAdmin
()
{
return
Storage
.
get
(
`
${
PREFIX
}
_isAdmin`
);
}
setStoreId
(
value
:
any
){
return
Storage
.
set
(
`
${
PREFIX
}
_storeId`
,
value
)
}
setEnterpriseId
(
value
:
any
)
{
return
Storage
.
set
(
`
${
PREFIX
}
_enterpriseId`
,
value
)
}
setStoreName
(
value
:
any
){
return
Storage
.
set
(
`
${
PREFIX
}
_storeName`
,
value
)
}
...
...
@@ -66,12 +78,22 @@ class User {
setToken
(
value
:
any
)
{
return
Storage
.
set
(
`
${
PREFIX
}
_token`
,
value
);
}
setIsAdmin
(
value
:
any
)
{
return
Storage
.
set
(
`
${
PREFIX
}
_isAdmin`
,
value
);
}
removeToken
(){
return
Storage
.
remove
(
`
${
PREFIX
}
_token`
);
}
removeUserId
(){
return
Storage
.
remove
(
`
${
PREFIX
}
_userId`
);
}
removeEnterpriseId
()
{
return
Storage
.
remove
(
`
${
PREFIX
}
_enterpriseId`
)
}
}
export
default
new
User
();
\ No newline at end of file
src/data-source/base/request-apis.ts
View file @
465ae2c3
...
...
@@ -41,6 +41,9 @@ export function editUserPhone(params: object) {
export
function
getLastedVersion
(
params
:
object
)
{
return
Service
.
Hades
(
"public/hades/getLastedVersion"
,
params
);
}
export
function
getEnterpriseUser
(
params
:
object
)
{
return
Service
.
Hades
(
'public/hades/getEnterpriseUser'
,
params
);
}
export
const
getOssClient
=
(
data
:
object
,
instId
:
string
,
...
...
src/domains/basic-domain/baseService.ts
View file @
465ae2c3
...
...
@@ -7,7 +7,7 @@
* @@Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
import
{
getUserStore
,
getUserPermission
,
logout
,
getStoreUser
,
sendBizAuthCode
,
editUserPhone
,
checkBizAuthCode
,
sendNewPhoneAuthCode
,
sendLoginAuthCode
,
login
,
getLastedVersion
}
from
'@/data-source/base/request-apis'
;
import
{
getUserStore
,
getUserPermission
,
logout
,
getStoreUser
,
sendBizAuthCode
,
editUserPhone
,
checkBizAuthCode
,
sendNewPhoneAuthCode
,
sendLoginAuthCode
,
login
,
getLastedVersion
,
getEnterpriseUser
}
from
'@/data-source/base/request-apis'
;
export
default
class
StoreService
{
// 获取员工列表
...
...
@@ -49,4 +49,7 @@ export default class StoreService {
static
getLastedVersion
(
params
:
any
){
return
getLastedVersion
(
params
);
}
static
getEnterpriseUser
(
params
:
any
){
return
getEnterpriseUser
(
params
);
}
}
\ No newline at end of file
src/index.tsx
View file @
465ae2c3
...
...
@@ -58,12 +58,13 @@ function isWeiXin() {
console
.
log
(
isWeiXin
(),
'isWeiXin()'
)
if
(
getParameterByName
(
'code'
)
&&
isWeiXin
())
{
Service
.
Hades
(
'anon/hades/wXWork
User
Login'
,
{
Service
.
Hades
(
'anon/hades/wXWorkLogin'
,
{
appTermEnum
:
'XIAOMAI_CLOUD_CLASS_PC_WEB_ADMIN'
,
code
:
getParameterByName
(
'code'
)
}).
then
((
res
)
=>
{
User
.
setUserId
(
res
.
result
.
loginInfo
.
userId
);
User
.
setToken
(
res
.
result
.
loginInfo
.
xmToken
);
User
.
setEnterpriseId
(
res
.
result
.
enterpriseId
);
mount
()
})
}
else
{
...
...
src/modules/college-manage/CollegeInfoPage.jsx
View file @
465ae2c3
...
...
@@ -16,26 +16,7 @@ export default class CollegeInfoPage extends React.Component {
avatar
,
}
=
this
.
state
;
return
(
<
div
className=
"college-manage-page"
>
<
div
className=
"college-header"
>
<
div
className=
"box"
>
<
img
className=
"box-image"
src=
"https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png"
/>
<
div
className=
"user"
>
<
img
className=
"image"
src=
{
avatar
}
/>
<
span
className=
"name"
>
Xiaomai
</
span
>
<
span
className=
"logout"
>
退出
</
span
>
</
div
>
</
div
>
</
div
>
<
div
className=
"create-box"
>
<
img
className=
"image"
src=
"https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png"
/>
<
span
className=
"tip"
>
建议尺寸702*180px,JPG/PNG格式,图片小于2M。
</
span
>
<
Input
className=
"input"
placeholder=
"请输入学院名称"
></
Input
>
<
Button
className=
"button"
type=
"primary"
>
确定创建
</
Button
>
</
div
>
<
div
className=
"college-info-page"
>
</
div
>
)
}
...
...
src/modules/college-manage/CollegeInfoPage.less
View file @
465ae2c3
.college-info-page {
}
\ No newline at end of file
src/modules/root/CreateCollege.jsx
View file @
465ae2c3
import
React
from
'react'
;
import
{
Input
,
Button
}
from
'antd'
;
import
{
Input
,
Button
,
Modal
,
message
}
from
'antd'
;
import
Upload
from
'@/core/upload'
;
import
SelectPrepareFileModal
from
'@/modules/prepare-lesson/modal/SelectPrepareFileModal'
;
import
'./CreateCollege.less'
;
let
cutFlag
=
false
;
export
default
class
CreateCollege
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
avatar
:
'https://image.xiaomaiketang.com/xm/rJeQaZxtc7.png'
,
logo
:
'https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png'
,
name
:
''
,
};
}
handleSelectCover
=
(
file
)
=>
{
this
.
uploadImage
(
file
);
}
//上传图片
uploadImage
=
(
imageFile
)
=>
{
const
{
folderName
}
=
imageFile
;
const
fileName
=
window
.
random_string
(
16
)
+
folderName
.
slice
(
folderName
.
lastIndexOf
(
"."
));
const
self
=
this
;
this
.
setState
(
{
visible
:
true
,
},
()
=>
{
setTimeout
(()
=>
{
const
okBtnDom
=
document
.
querySelector
(
"#headPicModal"
);
const
options
=
{
size
:
[
500
,
282
],
ok
:
okBtnDom
,
maxZoom
:
3
,
style
:
{
jpgFillColor
:
"transparent"
,
},
done
:
function
(
dataUrl
)
{
clearTimeout
(
self
.
timer
);
self
.
timer
=
setTimeout
(()
=>
{
if
((
self
.
state
.
rotate
!=
this
.
rotate
())
||
(
self
.
state
.
scale
!=
this
.
scale
()))
{
console
.
log
(
this
.
scale
(),
'scale'
)
const
_dataUrl
=
this
.
clip
()
const
cutImageBlob
=
self
.
convertBase64UrlToBlob
(
_dataUrl
);
self
.
setState
({
cutImageBlob
,
dataUrl
:
_dataUrl
,
rotate
:
this
.
rotate
(),
scale
:
this
.
scale
()
})
}
},
500
)
const
cutImageBlob
=
self
.
convertBase64UrlToBlob
(
dataUrl
);
self
.
setState
({
cutImageBlob
,
dataUrl
})
setTimeout
(()
=>
{
cutFlag
=
false
;
},
2000
);
},
fail
:
(
failInfo
)
=>
{
message
.
error
(
"图片上传失败了,请重新上传"
);
},
loadComplete
:
function
(
img
)
{
setTimeout
(()
=>
{
const
_dataUrl
=
this
.
clip
()
self
.
setState
({
dataUrl
:
_dataUrl
,
hasImgReady
:
true
})
},
100
)
},
};
const
imgUrl
=
`
${
imageFile
.
ossUrl
}
?
${
new
Date
().
getTime
()}
`
if
(
!
this
.
state
.
photoclip
)
{
const
_photoclip
=
new
PhotoClip
(
"#headPicModal"
,
options
);
_photoclip
.
load
(
imgUrl
);
this
.
setState
({
photoclip
:
_photoclip
,
});
}
else
{
this
.
state
.
photoclip
.
clear
();
this
.
state
.
photoclip
.
load
(
imgUrl
);
}
},
200
);
}
);
};
// base64转换成blob
convertBase64UrlToBlob
=
(
urlData
)
=>
{
const
bytes
=
window
.
atob
(
urlData
.
split
(
","
)[
1
]);
const
ab
=
new
ArrayBuffer
(
bytes
.
length
);
const
ia
=
new
Uint8Array
(
ab
);
for
(
let
i
=
0
;
i
<
bytes
.
length
;
i
++
)
{
ia
[
i
]
=
bytes
.
charCodeAt
(
i
);
}
return
new
Blob
([
ab
],
{
type
:
"image/png"
});
};
//获取resourceId
getSignature
=
(
blob
,
fileName
)
=>
{
Upload
.
uploadBlobToOSS
(
blob
,
'cover'
+
(
new
Date
()).
valueOf
(),
null
,
'signInfo'
).
then
((
signInfo
)
=>
{
this
.
setState
({
coverClicpPath
:
signInfo
.
fileUrl
,
coverId
:
signInfo
.
resourceId
,
visible
:
false
},()
=>
this
.
updateCover
())
});
};
updateCover
=
()
=>
{
const
{
coverClicpPath
,
coverId
}
=
this
.
state
this
.
setState
({
showSelectFileModal
:
false
})
this
.
setState
({
logo
:
coverClicpPath
})
}
render
()
{
const
{
avatar
,
logo
,
showSelectFileModal
,
visible
,
hasImgReady
,
cutImageBlob
,
}
=
this
.
state
;
return
(
<
div
className=
"college-manage-page"
>
...
...
@@ -28,7 +151,9 @@ export default class CreateCollege extends React.Component {
</
div
>
</
div
>
<
div
className=
"create-box"
>
<
img
className=
"image"
src=
"https://image.xiaomaiketang.com/xm/HNHCAF6Fc2.png"
/>
<
div
className=
"image-box"
onClick=
{
()
=>
{
this
.
setState
({
showSelectFileModal
:
true
})}
}
>
<
img
className=
"image"
src=
{
logo
}
/>
</
div
>
<
span
className=
"tip"
>
建议尺寸702*180px,JPG/PNG格式,图片小于2M。
</
span
>
<
Input
className=
"input"
placeholder=
"请输入学院名称"
></
Input
>
<
Button
...
...
@@ -36,6 +161,77 @@ export default class CreateCollege extends React.Component {
type=
"primary"
>
确定创建
</
Button
>
</
div
>
{
showSelectFileModal
&&
<
SelectPrepareFileModal
key=
"basic"
operateType=
"select"
multiple=
{
false
}
accept=
"image/jpeg,image/png,image/jpg"
selectTypeList=
{
[
'JPG'
,
'JPEG'
,
'PNG'
]
}
tooltip=
'支持文件类型:jpg、jpeg、png'
isOpen=
{
showSelectFileModal
}
onClose=
{
()
=>
{
this
.
setState
({
showSelectFileModal
:
false
})
}
}
onSelect=
{
this
.
handleSelectCover
}
/>
}
<
Modal
title=
"设置图片"
width=
{
1080
}
visible=
{
visible
}
maskClosable=
{
false
}
closeIcon=
{
<
span
className=
"icon iconfont modal-close-icon"
>

</
span
>
}
onCancel=
{
()
=>
{
this
.
setState
({
visible
:
false
});
}
}
zIndex=
{
10001
}
footer=
{
[
<
Button
key=
"back"
onClick=
{
()
=>
{
this
.
setState
({
visible
:
false
});
}
}
>
重新上传
</
Button
>,
<
Button
key=
"submit"
type=
"primary"
disabled=
{
!
hasImgReady
}
onClick=
{
()
=>
{
if
(
!
cutFlag
)
{
cutFlag
=
true
;
this
.
refs
.
hiddenBtn
.
click
();
}
this
.
getSignature
(
cutImageBlob
);
}
}
>
确定
</
Button
>,
]
}
>
<
div
className=
"clip-box"
>
<
div
id=
"headPicModal"
ref=
"headPicModal"
style=
{
{
width
:
"500px"
,
height
:
"430px"
,
marginBottom
:
0
,
}
}
></
div
>
<
div
id=
"clipBtn"
style=
{
{
display
:
"none"
}
}
ref=
"hiddenBtn"
></
div
>
<
div
className=
"preview-img"
>
<
div
className=
"title"
>
效果预览
</
div
>
<
div
id=
"preview-url-box"
style=
{
{
width
:
500
,
height
:
282
}
}
>
<
img
src=
{
this
.
state
.
dataUrl
}
style=
{
{
width
:
'100%'
}
}
alt=
""
/>
</
div
>
</
div
>
</
div
>
</
Modal
>
</
div
>
)
}
...
...
src/modules/root/CreateCollege.less
View file @
465ae2c3
...
...
@@ -3,12 +3,17 @@
padding-top: 108px;
margin: 0 auto;
width: 350px;
.image {
.image
-box
{
display: block;
border: 1px dashed #E9E9E9;
width: 312px;
height: 73px;
margin: 0 auto 16px;
.image {
width: 100%;
height: 100%;
object-fit: contain;
}
}
.tip {
display: block;
...
...
src/modules/root/Header.jsx
View file @
465ae2c3
...
...
@@ -28,6 +28,7 @@ function Header(props) {
const
ctx
=
useContext
(
XMContext
);
const
htmlUrl
=
`
${
LIVE_SHARE
}
store/index?id=
${
User
.
getStoreId
()}
&userId=
${
User
.
getUserId
()}
&from=work_weixin`
;
const
storeUserId
=
User
.
getStoreUserId
();
const
enterpriseId
=
User
.
getEnterpriseId
();
useEffect
(()
=>
{
htmlUrl
&&
handleConvertShortUrl
();
...
...
@@ -38,6 +39,7 @@ function Header(props) {
useEffect
(()
=>
{
storeUserId
&&
getUserInfo
();
enterpriseId
?
getEnterpriseUser
()
:
User
.
setIsAdmin
(
false
);
},
[
storeUserId
]);
function
getUserInfo
()
{
...
...
@@ -51,6 +53,17 @@ function Header(props) {
});
}
function
getEnterpriseUser
()
{
const
params
=
{
enterpriseId
,
userId
:
User
.
getUserId
(),
}
BaseService
.
getEnterpriseUser
(
params
).
then
((
res
)
=>
{
const
{
isAdmin
}
=
res
.
result
;
User
.
setIsAdmin
(
isAdmin
);
});
}
function
userMenu
()
{
return
(
<
div
className=
"user-center-dropdown"
>
...
...
@@ -64,19 +77,21 @@ function Header(props) {
</
div
>
</
div
>
<
div
className=
"menu"
>
<
div
className=
"menu-item"
key=
"1"
onClick=
{
()
=>
{
window
.
RCHistory
.
push
({
pathname
:
'/college-manage'
,
});
}
}
>
<
span
className=
"menu-before iconfont icon"
>

</
span
>
<
span
>
进入管理后台
</
span
>
<
span
className=
"menu-after iconfont icon"
>

</
span
>
</
div
>
{
User
.
getIsAdmin
()
===
'true'
&&
<
div
className=
"menu-item"
key=
"1"
onClick=
{
()
=>
{
window
.
RCHistory
.
push
({
pathname
:
'/college-manage'
,
});
}
}
>
<
span
className=
"menu-before iconfont icon"
>

</
span
>
<
span
>
进入管理后台
</
span
>
<
span
className=
"menu-after iconfont icon"
>

</
span
>
</
div
>
}
<
div
className=
"menu-item"
key=
"2"
...
...
@@ -122,6 +137,7 @@ function Header(props) {
BaseService
.
logout
({}).
then
((
res
)
=>
{
User
.
removeUserId
();
User
.
removeToken
();
User
.
removeEnterpriseId
();
window
.
RCHistory
.
push
({
pathname
:
`/login`
,
});
...
...
src/modules/root/Header.less
View file @
465ae2c3
...
...
@@ -534,7 +534,6 @@
.user-center-dropdown {
background: #fff;
width: 274px;
height: 184px;
border-radius: 4px;
padding: 12px 16px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
...
...
src/modules/root/WechatLogin.tsx
View file @
465ae2c3
...
...
@@ -71,6 +71,7 @@ export default function WechatLogin(props: any) {
}).
then
((
_res
:
any
)
=>
{
User
.
setUserId
(
_res
.
result
.
loginInfo
.
userId
);
User
.
setToken
(
_res
.
result
.
loginInfo
.
xmToken
);
User
.
setEnterpriseId
(
res
.
result
.
enterpriseId
);
window
.
RCHistory
.
push
({
pathname
:
`/switch-route`
,
})
...
...
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