Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
C
console
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
console
Commits
1e90e94c
Commit
1e90e94c
authored
Apr 20, 2017
by
nano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sos login
parent
9be8fb1b
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
338 additions
and
364 deletions
+338
-364
.idea/workspace.xml
.idea/workspace.xml
+230
-181
src/assets/yay.jpg
src/assets/yay.jpg
+0
-0
src/config.js
src/config.js
+2
-2
src/models/App.js
src/models/App.js
+6
-2
src/models/Apps.js
src/models/Apps.js
+4
-20
src/models/Common.js
src/models/Common.js
+36
-3
src/models/example.js
src/models/example.js
+0
-25
src/models/user.js
src/models/user.js
+7
-2
src/router.js
src/router.js
+0
-1
src/routes/AppDetail.js
src/routes/AppDetail.js
+18
-15
src/routes/Apps.js
src/routes/Apps.js
+5
-5
src/routes/IndexPage.css
src/routes/IndexPage.css
+0
-29
src/routes/IndexPage.js
src/routes/IndexPage.js
+0
-21
src/routes/Login.css
src/routes/Login.css
+0
-3
src/routes/Login.js
src/routes/Login.js
+0
-17
src/routes/LoginCallback.js
src/routes/LoginCallback.js
+18
-23
src/services/Apps.js
src/services/Apps.js
+7
-5
src/services/Packages.js
src/services/Packages.js
+5
-5
src/services/example.js
src/services/example.js
+0
-5
No files found.
.idea/workspace.xml
View file @
1e90e94c
This diff is collapsed.
Click to expand it.
src/assets/yay.jpg
deleted
100644 → 0
View file @
9be8fb1b
177 KB
src/config.js
View file @
1e90e94c
...
...
@@ -2,6 +2,6 @@ export default {
apiRoot
:
'
http://localhost:8001
'
,
imgRoot
:
'
http://node:7888
'
,
returnSSO
:
'
http://localhost:8000/loginCallback
'
,
SSOProvider
:
'
https://
ygobbs.com/session/sso_provider
'
SSOProvider
:
'
https://
accounts.moecube.com/
'
// SSOProvider: 'http://localhost:8081'
}
\ No newline at end of file
}
src/models/App.js
View file @
1e90e94c
...
...
@@ -43,14 +43,17 @@ export default {
}
},
effects
:
{
*
submit
({
payload
},
{
call
,
pu
t
}){
*
create
({
payload
},
{
call
,
put
,
selec
t
}){
yield
put
({
type
:
'
SubmitRequest
'
,
payload
})
const
{
user
}
=
yield
select
(
state
=>
state
.
user
)
const
params
=
{
id
:
payload
.
id
,
name
:
{
[
payload
.
locale
]:
payload
.
name
}
},
author
:
user
.
id
,
}
try
{
...
...
@@ -58,6 +61,7 @@ export default {
if
(
data
)
{
yield
put
({
type
:
'
SubmitSuccess
'
})
yield
put
({
type
:
'
reset
'
})
yield
put
({
type
:
'
Apps/fetch
'
})
message
.
info
(
"
i18n 创建成功
"
)
}
}
catch
(
error
)
{
...
...
src/models/Apps.js
View file @
1e90e94c
import
{
fetch
,
update
}
from
'
../services/Apps
'
import
*
as
crypto
from
'
crypto
'
import
{
message
}
from
'
antd
'
import
config
from
'
../config
'
export
default
{
...
...
@@ -18,10 +16,12 @@ export default {
},
},
effects
:
{
*
fetch
({
payload
},
{
call
,
put
})
{
*
fetch
({
payload
},
{
call
,
put
,
select
})
{
const
{
user
:
{
id
:
author
,
admin
}}
=
yield
select
(
state
=>
state
.
user
)
try
{
const
{
data
}
=
yield
call
(
fetch
,
payload
)
const
{
data
}
=
yield
call
(
fetch
,
{...
payload
,
author
,
admin
}
)
let
apps
=
{}
if
(
data
&&
data
.
length
>
0
)
{
...
...
@@ -65,22 +65,6 @@ export default {
subscriptions
:
{
setup
({
dispatch
,
history
})
{
dispatch
({
type
:
'
fetch
'
})
return
history
.
listen
(({
pathname
,
query
})
=>
{
if
(
pathname
===
'
/login
'
)
{
let
params
=
new
URLSearchParams
()
params
.
set
(
'
return_sso_url
'
,
config
.
returnSSO
)
let
payload
=
Buffer
.
from
(
params
.
toString
()).
toString
(
'
base64
'
)
let
url
=
new
URL
(
config
.
SSOProvider
)
params
=
url
[
'
searchParams
'
];
params
.
set
(
'
sso
'
,
payload
);
params
.
set
(
'
sig
'
,
crypto
.
createHmac
(
'
sha256
'
,
'
zsZv6LXHDwwtUAGa
'
).
update
(
payload
).
digest
(
'
hex
'
))
window
.
location
.
href
=
url
}
})
}
},
};
src/models/Common.js
View file @
1e90e94c
import
{
routerRedux
}
from
'
dva/router
'
import
config
from
'
../config
'
import
*
as
crypto
from
'
crypto
'
export
default
{
namespace
:
'
Common
'
,
...
...
@@ -8,9 +11,39 @@ export default {
reducers
:
{
collapsed
(
state
)
{
const
mode
=
state
.
collapsed
?
'
inline
'
:
'
vertical
'
return
{
...
state
,
collapsed
:
!
state
.
collapsed
,
mode
}
return
{...
state
,
collapsed
:
!
state
.
collapsed
,
mode
}
}
},
effects
:
{
*
init
({
payload
},
{
put
,
call
,
select
})
{
const
{
user
}
=
yield
select
(
state
=>
state
.
user
)
if
(
!
user
)
{
yield
put
(
routerRedux
.
replace
(
'
/login
'
))
}
// yield put({ type: 'Apps/fetch' })
}
},
subscriptions
:
{
setup
({
dispatch
,
history
})
{
if
(
location
.
pathname
!=
'
/loginCallback
'
)
{
dispatch
({
type
:
'
init
'
})
}
return
history
.
listen
(({
pathname
,
query
})
=>
{
if
(
pathname
===
'
/login
'
)
{
let
params
=
new
URLSearchParams
()
params
.
set
(
'
return_sso_url
'
,
config
.
returnSSO
)
let
payload
=
Buffer
.
from
(
params
.
toString
()).
toString
(
'
base64
'
)
let
url
=
new
URL
(
config
.
SSOProvider
)
params
=
url
[
'
searchParams
'
];
params
.
set
(
'
sso
'
,
payload
);
params
.
set
(
'
sig
'
,
crypto
.
createHmac
(
'
sha256
'
,
'
zsZv6LXHDwwtUAGa
'
).
update
(
payload
).
digest
(
'
hex
'
))
window
.
location
.
href
=
url
}
else
if
(
pathname
===
'
/apps
'
)
{
dispatch
({
type
:
'
Apps/fetch
'
,
query
})
}
})
}
},
effects
:
{},
subscriptions
:
{},
};
src/models/example.js
deleted
100644 → 0
View file @
9be8fb1b
export
default
{
namespace
:
'
example
'
,
state
:
{},
subscriptions
:
{
setup
({
dispatch
,
history
})
{
// eslint-disable-line
},
},
effects
:
{
*
fetch
({
payload
},
{
call
,
put
})
{
// eslint-disable-line
yield
put
({
type
:
'
save
'
});
},
},
reducers
:
{
save
(
state
,
action
)
{
return
{
...
state
,
...
action
.
payload
};
},
},
};
src/models/user.js
View file @
1e90e94c
import
{
routerRedux
}
from
'
dva/router
'
export
default
{
namespace
:
'
user
'
,
state
:
{
},
reducers
:
{
change
(
state
,
action
){
ssoLogin
(
state
,
action
){
return
{
...
state
,
...
action
.
payload
}
}
},
effects
:
{},
effects
:
{
*
ssoLogin
({
payload
},
{
put
,
call
})
{
yield
put
(
routerRedux
.
push
(
'
/apps
'
))
}
},
subscriptions
:
{},
};
src/router.js
View file @
1e90e94c
import
React
from
'
react
'
;
import
{
Router
,
Route
}
from
'
dva/router
'
;
import
IndexPage
from
'
./routes/IndexPage
'
;
import
Apps
from
"
./routes/Apps.js
"
;
import
AppDetail
from
'
./routes/AppDetail.js
'
import
Entry
from
"
./routes/Entry.js
"
;
...
...
src/routes/AppDetail.js
View file @
1e90e94c
...
...
@@ -123,25 +123,26 @@ class AppDetail extends React.Component {
});
}
handleChangeIco
=
({
fileList
})
=>
{
handleChangeIco
=
({
file
,
file
List
})
=>
{
this
.
setState
({
iconList
:
fileList
})
this
.
handleUpdateImg
({
fileList
,
field
:
'
icon
'
})
this
.
handleUpdateImg
({
file
,
file
List
,
field
:
'
icon
'
})
}
handleChangeCover
=
({
fileList
})
=>
{
handleChangeCover
=
({
file
,
file
List
})
=>
{
this
.
setState
({
coverList
:
fileList
})
this
.
handleUpdateImg
({
fileList
,
field
:
'
cover
'
})
this
.
handleUpdateImg
({
file
,
file
List
,
field
:
'
cover
'
})
}
handleChangeBackground
=
({
fileList
})
=>
{
handleChangeBackground
=
({
file
,
file
List
})
=>
{
this
.
setState
({
backgroundList
:
fileList
})
this
.
handleUpdateImg
({
fileList
,
field
:
'
background
'
})
this
.
handleUpdateImg
({
file
,
file
List
,
field
:
'
background
'
})
}
handleUpdateImg
=
({
field
,
fileList
})
=>
{
handleUpdateImg
=
({
fi
le
,
fi
eld
,
fileList
})
=>
{
const
{
form
,
dispatch
,
params
:
{
id
}}
=
this
.
props
const
[
img
]
=
fileList
if
(
img
.
status
===
'
done
'
)
{
if
(
file
.
status
===
'
done
'
)
{
const
[
res
]
=
img
.
response
dispatch
({
type
:
"
Apps/update
"
,
payload
:
{
id
,
[
field
]:
res
.
Key
}})
}
else
if
(
file
.
status
===
'
error
'
)
{
message
.
error
(
file
.
response
.
message
);
}
}
...
...
@@ -187,7 +188,9 @@ class AppDetail extends React.Component {
const
{
version
,
actions
,
references
,
dependencies
}
=
values
Object
.
keys
(
actions
).
forEach
((
platform
)
=>
{
actions
[
platform
]
=
JSON
.
parse
(
actions
[
platform
])
if
(
actions
[
platform
])
{
actions
[
platform
]
=
JSON
.
parse
(
actions
[
platform
])
}
})
dispatch
({
type
:
"
Apps/update
"
,
payload
:
{
id
,
version
,
actions
,
references
,
dependencies
}})
...
...
@@ -376,7 +379,7 @@ class AppDetail extends React.Component {
return
(
<
Spin
spinning
=
{
loading
.
global
}
>
<
Tabs
defaultActiveKey
=
"
1
"
className
=
"
app-detail-nav
"
type
=
"
card
"
>
<
Tabs
defaultActiveKey
=
"
1
"
className
=
"
app-detail-nav
"
>
<
TabPane
tab
=
{
<
span
><
Icon
type
=
"
setting
"
/>
基本信息
<
/span>} key="1"
>
<
div
className
=
{
styles
.
form
}
>
<
Form
onSubmit
=
{
this
.
onSubmitBase
}
>
...
...
@@ -392,7 +395,7 @@ class AppDetail extends React.Component {
<
div
className
=
"
clearfix
"
>
<
Upload
multiple
=
{
false
}
action
=
{
`
${
config
.
apiRoot
}
/upload/image`
}
action
=
{
`
${
config
.
apiRoot
}
/
v1/
upload/image`
}
listType
=
"
picture-card
"
className
=
"
upload-icon
"
fileList
=
{
iconList
}
...
...
@@ -418,7 +421,7 @@ class AppDetail extends React.Component {
<
div
className
=
"
clearfix
"
>
<
Upload
multiple
=
{
false
}
action
=
{
`
${
config
.
apiRoot
}
/upload/image`
}
action
=
{
`
${
config
.
apiRoot
}
/
v1/
upload/image`
}
listType
=
"
picture-card
"
className
=
"
upload-icon
"
fileList
=
{
coverList
}
...
...
@@ -444,7 +447,7 @@ class AppDetail extends React.Component {
<
div
className
=
"
clearfix
"
>
<
Upload
multiple
=
{
false
}
action
=
{
`
${
config
.
apiRoot
}
/upload/image`
}
action
=
{
`
${
config
.
apiRoot
}
/
v1/
upload/image`
}
listType
=
"
picture-card
"
className
=
"
upload-icon
"
fileList
=
{
backgroundList
}
...
...
@@ -899,7 +902,7 @@ class AppDetail extends React.Component {
}
}}
disabled
=
{
pack
.
status
!==
'
init
'
&&
pack
.
status
!==
'
failed
'
}
action
=
{
`
${
config
.
apiRoot
}
/upload/package/
${
pack
[
"
_id
"
]}
`
}
action
=
{
`
${
config
.
apiRoot
}
/
v1/
upload/package/
${
pack
[
"
_id
"
]}
`
}
>
<
p
className
=
"
ant-upload-drag-icon
"
>
<
Icon
type
=
"
inbox
"
/>
...
...
src/routes/Apps.js
View file @
1e90e94c
...
...
@@ -45,7 +45,7 @@ const columns = [
sorter
:
true
,
width
:
'
10%
'
,
key
:
'
updated_at
'
},
},
]
function
Apps
({
children
,
dispatch
,
isCreate
,
isSubmit
,
apps
})
{
...
...
@@ -55,7 +55,7 @@ function Apps({children, dispatch, isCreate, isSubmit, apps}) {
isLoading
:
isSubmit
,
onCancel
:
()
=>
dispatch
({
type
:
'
App/onCancel
'
}),
onCreate
:
()
=>
dispatch
({
type
:
'
App/onCreate
'
}),
onSubmit
:
(
payload
)
=>
dispatch
({
type
:
'
App/
submit
'
,
payload
}),
onSubmit
:
(
payload
)
=>
dispatch
({
type
:
'
App/
create
'
,
payload
}),
}
const
CreateButtonProps
=
{
...
...
@@ -74,8 +74,8 @@ function Apps({children, dispatch, isCreate, isSubmit, apps}) {
return
(
<
div
className
=
{
styles
.
normal
}
>
<
Table
{...
TableProps
}
/>
<
Table
{...
TableProps
}
/
>
<
Affix
style
=
{{
position
:
'
absolute
'
,
bottom
:
50
,
right
:
50
}}
>
<
Button
{...
CreateButtonProps
}
>
...
...
@@ -91,7 +91,7 @@ function Apps({children, dispatch, isCreate, isSubmit, apps}) {
function
mapStateToProps
(
state
)
{
const
{
Apps
:
{
apps
},
App
:
{
isCreate
,
isSubmit
}
App
:
{
isCreate
,
isSubmit
}
,
}
=
state
return
{
apps
,
...
...
src/routes/IndexPage.css
deleted
100644 → 0
View file @
9be8fb1b
.normal
{
font-family
:
Georgia
,
sans-serif
;
margin-top
:
3em
;
text-align
:
center
;
}
.title
{
font-size
:
2.5rem
;
font-weight
:
normal
;
letter-spacing
:
-1px
;
}
.welcome
{
height
:
328px
;
background
:
url(../assets/yay.jpg)
no-repeat
center
0
;
background-size
:
388px
328px
;
}
.list
{
font-size
:
1.2em
;
margin-top
:
1.8em
;
list-style
:
none
;
line-height
:
1.5em
;
}
.list
code
{
background
:
#f7f7f7
;
}
src/routes/IndexPage.js
deleted
100644 → 0
View file @
9be8fb1b
import
React
from
'
react
'
;
import
{
connect
}
from
'
dva
'
;
import
styles
from
'
./IndexPage.css
'
;
function
IndexPage
()
{
return
(
<
div
className
=
{
styles
.
normal
}
>
<
h1
className
=
{
styles
.
title
}
>
Yay
!
Welcome
to
dva
!<
/h1
>
<
div
className
=
{
styles
.
welcome
}
/
>
<
ul
className
=
{
styles
.
list
}
>
<
li
>
To
get
started
,
edit
<
code
>
src
/
index
.
js
<
/code> and save to reload.</
li
>
<
li
><
a
href
=
"
https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md
"
>
Getting
Started
<
/a></
li
>
<
/ul
>
<
/div
>
);
}
IndexPage
.
propTypes
=
{
};
export
default
connect
()(
IndexPage
);
src/routes/Login.css
deleted
100644 → 0
View file @
9be8fb1b
.normal
{
}
src/routes/Login.js
deleted
100644 → 0
View file @
9be8fb1b
import
React
from
'
react
'
;
import
{
connect
}
from
'
dva
'
;
import
styles
from
'
./Login.css
'
;
function
Login
()
{
return
(
<
div
className
=
{
styles
.
normal
}
>
Route
Component
:
Login
<
/div
>
);
}
function
mapStateToProps
()
{
return
{};
}
export
default
connect
(
mapStateToProps
)(
Login
);
src/routes/LoginCallback.js
View file @
1e90e94c
import
React
from
'
react
'
;
import
{
connect
}
from
'
dva
'
;
import
{
connect
}
from
'
dva
'
;
import
styles
from
'
./LoginCallback.css
'
;
class
LoginCallback
extends
React
.
Component
{
class
LoginCallback
extends
React
.
Component
{
componentDidMount
()
{
const
{
location
:
{
query
:
{
sso
}},
dispatch
}
=
this
.
props
console
.
log
(
this
.
props
)
const
data
=
toObject
(
new
URLSearchParams
(
Buffer
.
from
(
sso
,
'
base64
'
).
toString
()))
if
(
data
)
{
dispatch
({
type
:
"
user/change
"
,
payload
:{
data
}})
localStorage
.
setItem
(
"
user
"
,
JSON
.
stringify
(
data
))
componentDidMount
()
{
const
{
location
:
{
query
:
{
sso
}},
dispatch
}
=
this
.
props
const
user
=
toObject
(
new
URLSearchParams
(
Buffer
.
from
(
sso
,
'
base64
'
).
toString
()))
if
(
user
)
{
dispatch
({
type
:
"
user/ssoLogin
"
,
payload
:
{
user
}
})
}
}
render
(){
render
()
{
const
{
dispatch
,
location
}
=
this
.
props
return
(
...
...
@@ -26,29 +24,26 @@ class LoginCallback extends React.Component{
)
}
}
function
LoginCallback
({
})
{
function
LoginCallback
({})
{
return
(
<
div
className
=
{
styles
.
normal
}
>
{
JSON
.
stringify
(
data
)}
{
JSON
.
stringify
(
data
)}
<
/div
>
);
}
function
mapStateToProps
({
})
{
return
{
};
function
mapStateToProps
({})
{
return
{};
}
function
toObject
(
entries
){
function
toObject
(
entries
)
{
let
result
=
{};
for
(
let
[
key
,
value
]
of
entries
)
{
result
[
key
]
=
value
;
}
return
result
;
for
(
let
[
key
,
value
]
of
entries
)
{
result
[
key
]
=
value
;
}
return
result
;
}
export
default
connect
(
mapStateToProps
)(
LoginCallback
);
src/services/Apps.js
View file @
1e90e94c
import
*
as
qs
from
'
qs
'
import
request
from
'
../utils/request
'
export
async
function
fetch
()
{
return
request
(
`/apps`
)
export
async
function
fetch
(
params
)
{
return
request
(
`/v1/apps?
${
qs
.
stringify
(
params
)}
`
)
}
export
async
function
create
(
params
)
{
return
request
(
`/
apps
/
${
params
.
id
}
`
,
{
return
request
(
`/
v1/app
/
${
params
.
id
}
`
,
{
method
:
'
POST
'
,
body
:
JSON
.
stringify
(
params
)
})
}
export
async
function
update
(
params
)
{
return
request
(
`/
apps
/
${
params
.
id
}
`
,
{
return
request
(
`/
v1/app
/
${
params
.
id
}
`
,
{
method
:
'
PATCH
'
,
body
:
JSON
.
stringify
(
params
)
})
}
\ No newline at end of file
}
src/services/Packages.js
View file @
1e90e94c
...
...
@@ -2,34 +2,34 @@ import request from '../utils/request'
export
async
function
add
(
params
)
{
return
request
(
`/
packages
`
,
{
return
request
(
`/
v1/package
`
,
{
method
:
'
POST
'
,
body
:
JSON
.
stringify
(
params
)
})
}
export
async
function
patch
(
params
)
{
return
request
(
`/
packages
`
,
{
return
request
(
`/
v1/package
`
,
{
method
:
'
PATCH
'
,
body
:
JSON
.
stringify
(
params
)
})
}
export
async
function
fetch
(
params
)
{
return
request
(
`/
packages/manage
?appId=
${
params
.
appId
}
`
,
{
return
request
(
`/
v1/packages
?appId=
${
params
.
appId
}
`
,
{
method
:
'
GET
'
,
})
}
export
async
function
urlUpload
(
params
)
{
return
request
(
'
/upload/packageUrl
'
,
{
return
request
(
'
/
v1/
upload/packageUrl
'
,
{
method
:
'
POST
'
,
body
:
JSON
.
stringify
(
params
)
})
}
export
async
function
del
(
params
)
{
return
request
(
`/
packages
`
,
{
return
request
(
`/
v1/package
`
,
{
method
:
'
DELETE
'
,
body
:
JSON
.
stringify
(
params
)
})
...
...
src/services/example.js
deleted
100644 → 0
View file @
9be8fb1b
import
request
from
'
../utils/request
'
;
export
async
function
query
()
{
return
request
(
'
/api/users
'
);
}
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