Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
B
biz.qingxiao.com
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangxuelai
biz.qingxiao.com
Commits
9049c51c
Commit
9049c51c
authored
Sep 04, 2019
by
baixian
Browse files
Options
Browse Files
Download
Plain Diff
积分管理
parents
f098606d
5eef852b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
1034 additions
and
346 deletions
+1034
-346
index.html
index.html
+1
-1
api.js
src/common/api.js
+1
-4
classdetail.js
src/models/classdetail.js
+15
-1
integral.js
src/models/integral.js
+95
-80
login.js
src/models/login.js
+4
-2
students.js
src/models/students.js
+1
-1
uploader.js
src/models/uploader.js
+1
-6
usersetting.js
src/models/usersetting.js
+52
-1
EditClassModal.js
src/pages/classmgt/EditClassModal.js
+1
-1
index.js
src/pages/integralmanage/index.js
+1
-1
index.js
src/pages/integralmanage/integralsetting/index.js
+160
-187
index.less
src/pages/integralmanage/integralsetting/index.less
+35
-4
index.js
src/pages/integralmanage/operationlog/index.js
+0
-1
CouponAddModal.js
src/pages/integralmanage/storesetting/CouponAddModal.js
+4
-4
CouponAddModal.less
src/pages/integralmanage/storesetting/CouponAddModal.less
+1
-0
GoodsAddModal.js
src/pages/integralmanage/storesetting/GoodsAddModal.js
+116
-44
GoodsAddModal.less
src/pages/integralmanage/storesetting/GoodsAddModal.less
+394
-0
index.js
src/pages/integralmanage/storesetting/index.js
+12
-2
index.js
src/pages/login/index.js
+1
-1
index.js
src/pages/student/index.js
+5
-2
UpdateNickname.js
src/pages/usersetting/UpdateNickname.js
+85
-0
index.js
src/pages/usersetting/index.js
+39
-2
login.js
src/services/login.js
+9
-0
exportexcel.js
src/utils/exportexcel.js
+1
-1
No files found.
index.html
View file @
9049c51c
<!DOCTYPE html>
<html
lang=
"en"
><head><meta
charset=
"UTF-8"
><title>
轻校
</title><link
rel=
"shortcut icon"
href=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/image/qxlogo4.png"
><meta
content=
"width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0;"
name=
"viewport"
><meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<!-- Polyfills --><!--[if lt IE 10]>
<script src="js/console-polyfill.js"></script>
<![endif]-->
<script
charset=
"utf-8"
src=
"https://map.qq.com/api/js?v=2.exp&key=XSZBZ-5LHCV-5I2P7-UQHPW-6456F-JBB3B"
></script><link
href=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.css?1566982589664"
rel=
"stylesheet"
><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/lib/vendor.dll.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/console-polyfill.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es6-shim.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-shim.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-sham.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/json3.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/html5shiv.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/polyfill.js?3"
charset=
"utf-8"
></script></head><body><div
id=
"root"
></div><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.js?1566982589664"
charset=
"utf-8"
></script></body></html>
\ No newline at end of file
<![endif]-->
<script
charset=
"utf-8"
src=
"https://map.qq.com/api/js?v=2.exp&key=XSZBZ-5LHCV-5I2P7-UQHPW-6456F-JBB3B"
></script><link
href=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.css?1567578508350"
rel=
"stylesheet"
><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/lib/vendor.dll.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/console-polyfill.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es6-shim.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-shim.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/es5-sham.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/json3.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/html5shiv.min.js?3"
charset=
"utf-8"
></script><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/js/polyfill.js?3"
charset=
"utf-8"
></script></head><body><div
id=
"root"
></div><script
src=
"https://cdn.img.shangjiadao.cn/qingxiao/biz/dist/index.js?1567578508350"
charset=
"utf-8"
></script></body></html>
\ No newline at end of file
src/common/api.js
View file @
9049c51c
...
...
@@ -10,15 +10,12 @@ if (ENVIRONMENT == 'pro') {
api
=
'https://test.wp53.cn/v2/api/'
;
dakaapi
=
'https:clock.wp53.cn/v3/'
;
}
// const api = 'https://test.wp53.cn/v2/api/';
// const dakaapi = 'https:clock.wp53.cn/v3/';
// const api = 'https://wx.m.shangjiadao.cn/v2/api/';
// const dakaapi = 'https://qxapi.qingxiao.online/daka/v3/';
export
default
{
userRegister
:
`
${
api
}
service/user/register`
,
getVerifyCode
:
`
${
api
}
service/user/verify_code`
,
resetPassword
:
`
${
api
}
service/user/reset_password`
,
replenish
:
`
${
api
}
v1/user/replenish`
,
verifyCodeLogin
:
`
${
api
}
service/user/clock_login`
,
login
:
`
${
api
}
service/user/login`
,
videoupload
:
`
${
dakaapi
}
member/media_access`
,
imgupload
:
`
${
dakaapi
}
member/oss/access`
,
...
...
src/models/classdetail.js
View file @
9049c51c
...
...
@@ -1183,7 +1183,7 @@ export default {
},
*
saveClass
({
payload
},
{
call
,
put
,
select
})
{
const
{
sid
}
=
yield
select
(
state
=>
state
.
webapp
);
const
{
classSubmitting
,
classId
}
=
yield
select
(
state
=>
state
.
classdetail
);
const
{
classSubmitting
,
classId
,
classDetail
}
=
yield
select
(
state
=>
state
.
classdetail
);
if
(
classSubmitting
)
{
return
;
}
...
...
@@ -1218,6 +1218,20 @@ export default {
yield
put
({
type
:
'queryClassDetail'
,
});
if
(
classDetail
.
course_id
!=
values
.
course_id
)
{
yield
put
({
type
:
'queryCoursePlansList'
,
payload
:
{
params
:
{},
},
});
yield
put
({
type
:
'queryClassStudentList'
,
payload
:
{
params
:
{},
},
});
}
}
else
{
yield
put
({
type
:
'webapp/errorrequestresolve'
,
...
...
src/models/integral.js
View file @
9049c51c
This diff is collapsed.
Click to expand it.
src/models/login.js
View file @
9049c51c
...
...
@@ -60,12 +60,15 @@ export default {
mobile
,
union_id
:
1
,
};
let
ajax
=
null
;
if
(
type
==
'verify'
)
{
param
.
verify_code
=
verifycode
;
ajax
=
login
.
verifyCodeLogin
;
}
else
{
param
.
password
=
password
;
ajax
=
login
.
login
;
}
const
loginData
=
yield
call
(
login
.
login
,
param
);
const
loginData
=
yield
call
(
ajax
,
param
);
// 判断用户是否完善信息
if
(
!
loginData
.
code
)
{
if
(
loginData
.
data
&&
loginData
.
data
.
token
)
{
...
...
@@ -80,7 +83,6 @@ export default {
logining
:
false
,
},
});
console
.
log
(
userInfo
,
'userInfo1'
);
if
(
newLoginData
.
code
==
200
)
{
if
(
newLoginData
.
data
&&
newLoginData
.
data
.
token
)
{
LocalStorage
.
setItem
(
'user'
,
{
...
...
src/models/students.js
View file @
9049c51c
...
...
@@ -540,7 +540,7 @@ export default {
*
studentModelCoursesBuyOrRenew
({
payload
},
{
call
,
put
,
select
})
{
const
{
values
,
callBack
}
=
payload
;
const
{
selectdeStudent
}
=
yield
select
(
state
=>
state
.
students
);
const
loadmessage
=
message
.
loading
(
'
续课
中...'
,
0
);
const
loadmessage
=
message
.
loading
(
'
购买
中...'
,
0
);
const
buyOrRenewData
=
yield
call
(
courseAjax
.
coursesBuyOrRenew
,
Object
.
assign
(
values
,
{
class_ids
:
(
values
.
class_ids
&&
values
.
class_ids
.
join
(
','
))
||
''
,
student_id
:
selectdeStudent
.
id
,
...
...
src/models/uploader.js
View file @
9049c51c
...
...
@@ -171,9 +171,6 @@ export default {
const
{
bannerImg
,
course
,
orgdescs
,
}
=
yield
select
(
state
=>
state
.
officialweb
);
const
{
goodsBanner
,
}
=
yield
select
(
state
=>
state
.
integral
);
const
{
cropperUrl
,
filename
,
uploadtype
,
orgType
,
orgIndex
,
imgIndex
,
action
,
}
=
yield
select
(
state
=>
state
.
uploader
);
...
...
@@ -239,12 +236,10 @@ export default {
},
});
}
else
if
(
uploadtype
==
'goodBannerupload'
)
{
const
newbannerImg
=
JSON
.
parse
(
JSON
.
stringify
(
goodsBanner
));
newbannerImg
.
push
(
`
${
filename
}
?x-oss-process=
${
cropperUrl
}
`
);
yield
put
({
type
:
'integral/updateGoodBanner'
,
payload
:
{
avatar
:
newbannerImg
,
goodImage
:
`
${
filename
}
?x-oss-process=
${
cropperUrl
}
`
,
},
});
}
...
...
src/models/usersetting.js
View file @
9049c51c
...
...
@@ -39,6 +39,8 @@ export default {
previewQrcode
:
''
,
businessIsBind
:
false
,
checkoutVerifyCode
:
false
,
nicknameChangeShow
:
false
,
nicknameSubmitting
:
false
,
},
subscriptions
:
{
setup
({
dispatch
,
history
})
{
// eslint-disable-line
...
...
@@ -161,13 +163,62 @@ export default {
message
.
error
(
errorcode
[
data
.
code
].
cn
,
1
);
}
},
*
updateNickname
({
payload
},
{
call
,
put
,
select
})
{
const
{
nickname
,
callBack
}
=
payload
;
const
{
userInfo
}
=
yield
select
(
state
=>
state
.
webapp
);
const
{
nicknameSubmitting
}
=
yield
select
(
state
=>
state
.
usersetting
);
if
(
nicknameSubmitting
)
{
return
;
}
yield
put
({
type
:
'updateState'
,
payload
:
{
nicknameSubmitting
:
true
,
},
});
const
loading
=
message
.
loading
(
'昵称修改中...'
);
const
updateAvatarDate
=
yield
call
(
usersettingajax
.
updateAvatar
,
{
nickname
,
});
setTimeout
(
loading
);
yield
put
({
type
:
'updateState'
,
payload
:
{
nicknameSubmitting
:
false
,
},
});
if
(
updateAvatarDate
.
code
==
200
)
{
message
.
success
(
'修改成功'
,
1
);
userInfo
.
nickname
=
nickname
;
yield
put
({
type
:
'webapp/updateState'
,
payload
:
{
userInfo
:
{
...
userInfo
},
nicknameChangeShow
:
false
,
},
});
yield
put
({
type
:
'updateState'
,
payload
:
{
nicknameChangeShow
:
false
,
},
});
const
user
=
LocalStorage
.
getItem
(
'user'
);
user
.
nickname
=
nickname
;
LocalStorage
.
setItem
(
'user'
,
user
);
if
(
callBack
&&
(
typeof
callBack
==
'function'
))
{
callBack
();
}
}
else
{
message
.
error
(
'昵称修改失败'
);
}
},
*
updateUserAvatar
({
payload
},
{
call
,
put
,
select
})
{
const
{
userInfo
}
=
yield
select
(
state
=>
state
.
webapp
);
const
{
avatar
}
=
payload
;
const
loading
=
message
.
loading
(
'头像上传中...'
);
const
updateAvatarDate
=
yield
call
(
usersettingajax
.
updateAvatar
,
{
avatar
,
nickname
:
userInfo
.
nickname
,
});
setTimeout
(
loading
);
if
(
updateAvatarDate
.
code
==
200
)
{
...
...
src/pages/classmgt/EditClassModal.js
View file @
9049c51c
...
...
@@ -117,7 +117,7 @@ class EditClassModal extends React.Component {
initialValue
:
editClassInfo
.
course_id
,
rules
:
[{
required
:
true
,
message
:
'课程不能为空'
}],
})(
(
is
Edit
==
1
||
is
StudentClass
==
1
)
?
(
isStudentClass
==
1
)
?
<
span
>
{
courseList
.
find
(
ele
=>
ele
.
id
==
editClassInfo
.
course_id
)
&&
courseList
.
find
(
ele
=>
ele
.
id
==
editClassInfo
.
course_id
).
title
}
<
/span>
:
<
Select
>
<
Option
value
=
""
>
请选择课程名称
<
/Option
>
...
...
src/pages/integralmanage/index.js
View file @
9049c51c
...
...
@@ -100,7 +100,7 @@ class ClassMgtForm extends React.Component {
};
return
(
<
div
className
=
{
pageStyle
.
container
}
>
<
Tabs
defaultActiveKey
=
"1"
onChange
=
{
this
.
callback
}
tabBarExtraContent
=
{
operations
}
>
<
Tabs
defaultActiveKey
=
"1"
onChange
=
{
this
.
callback
}
tabBarExtraContent
=
{
operations
}
animated
=
{
false
}
>
<
TabPane
tab
=
"积分设置"
key
=
"1"
>
<
Integralsetting
/>
<
/TabPane
>
...
...
src/pages/integralmanage/integralsetting/index.js
View file @
9049c51c
This diff is collapsed.
Click to expand it.
src/pages/integralmanage/integralsetting/index.less
View file @
9049c51c
.container {
background-color: #fff;
padding: 24px 0
30px
;
padding: 24px 0
0
;
position: relative;
overflow-y: hidden;
}
...
...
@@ -24,6 +24,8 @@
color:rgba(0,0,0,0.85);
line-height:24px;
margin-right: 30px;
width: 106px;
min-width: 106px;
}
.topheadright {
font-size:14px;
...
...
@@ -45,17 +47,18 @@
display: flex;
align-items: center;
margin-top: 15px;
margin-left: 20px;
.formflex,.formflex1 {
display: flex;
align-items: center;
margin-left: 40px;
margin-bottom: 20px;
.number {
border: 1px solid #D9D9D9;
width: 40px;
height: 24px;
line-height: 24px;
}
.numberActive {
border: 1px solid red;
width: 56px;
height: 32px;
line-height: 32px;
...
...
@@ -69,6 +72,7 @@
color: #5E5E5E;
line-height: 24px;
text-align: center;
cursor: pointer;
}
.switchActive {
background-color: #1890FF;
...
...
@@ -79,6 +83,7 @@
color: #fff;
line-height: 32px;
text-align: center;
cursor: pointer;
}
.sprit {
padding: 0 15px;
...
...
@@ -97,4 +102,30 @@
line-height: 24px;
}
}
.checkLeftTip {
margin-left: 24px;
}
.direction {
text-align: right;
}
.checkboxWrap {
padding: 0 10px;
margin-top: 35px;
}
@media (max-width: 768px) {
.direction {
text-align: left;
margin: 15px 0;
}
}
@media (max-width: 600px) {
.formItem {
.formflex, .formflex1 {
margin-left: 20px;
margin-bottom: 20px;
}
}
.checkboxWrap {
padding: 0;
}
}
src/pages/integralmanage/operationlog/index.js
View file @
9049c51c
...
...
@@ -41,7 +41,6 @@ class StoreMgt extends React.Component {
recordListTotal
,
classListQueryParams
,
}
=
this
.
props
;
console
.
log
(
recordList
);
const
columns
=
[
{
title
:
'姓名'
,
...
...
src/pages/integralmanage/storesetting/CouponAddModal.js
View file @
9049c51c
...
...
@@ -29,7 +29,6 @@ class CouponAddModal extends React.Component {
const
{
form
,
save
,
editCouponInfo
,
couponImg
,
}
=
this
.
props
;
console
.
log
(
this
.
props
,
'this.props'
);
if
(
editCouponInfo
.
id
==
0
&&
(
couponImg
==
''
||
couponImg
==
undefined
))
{
message
.
error
(
'请上传卡券封面'
,
0.5
);
return
;
...
...
@@ -79,9 +78,9 @@ class CouponAddModal extends React.Component {
couponImg
,
uploadAvator
,
editCouponInfo
,
submitting
,
form
:
{
getFieldDecorator
,
getFieldValue
},
}
=
this
.
props
;
console
.
log
(
this
.
props
);
const
{
classRoomId
,
title
}
=
this
.
state
;
const
formItemModalLineLayout
=
{
labelCol
:
{
...
...
@@ -97,7 +96,8 @@ class CouponAddModal extends React.Component {
<
Modal
visible
=
{
visible
}
title
=
{
isEdit
==
1
?
'编辑卡券'
:
'新增卡券'
}
okText
=
"确定"
okText
=
{
!
submitting
?
'保存'
:
'保存中...'
}
confirmLoading
=
{
submitting
}
onCancel
=
{
this
.
close
}
onOk
=
{
this
.
save
}
className
=
"modifyclassModal"
...
...
@@ -119,7 +119,7 @@ class CouponAddModal extends React.Component {
<
img
className
=
{
pageStyle
.
avatar
}
src
=
{
imagify
(
couponImg
)
?
imagify
(
couponImg
)
:
imagify
(
editCouponInfo
.
cover
)}
alt
=
""
/>
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
<
input
type
=
"file"
id
=
"uploadinput"
className
=
{
pageStyle
.
fileuploadinput
}
onChange
=
{(
e
)
=>
{
this
.
uploadAvator
(
e
);
}}
accept
=
"image/*"
/>
新增图片
{
isEdit
==
1
?
'修改图片'
:
'新增图片'
}
<
/span
>
<
div
className
=
{
pageStyle
.
thumbTip
}
><
span
>
建议尺寸:
310
*
270
最多上传
1
张
<
/span></
div
>
<
/div
>
...
...
src/pages/integralmanage/storesetting/CouponAddModal.less
View file @
9049c51c
.thumb {
display: flex;
position: relative;
margin-bottom: 15px;
.thumbTip {
position: absolute;
font-size:14px;
...
...
src/pages/integralmanage/storesetting/GoodsAddModal.js
View file @
9049c51c
import
{
connect
}
from
'dva'
;
import
React
from
'react'
;
import
PropTypes
from
'prop-types'
;
import
{
message
,
Row
,
Col
,
Input
,
Select
,
Modal
,
Form
,
InputNumber
,
Carousel
}
from
'antd'
;
import
{
message
,
Row
,
Col
,
Input
,
Select
,
Modal
,
Form
,
InputNumber
,
Carousel
,
Icon
}
from
'antd'
;
import
{
imagify
,
pageIn
}
from
'../../../utils/index'
;
import
pageStyle
from
'./GoodsAddModal.less'
;
import
PageStyle
from
'../../officialweb/pagecomponent/OrgdescEditor.less'
;
const
{
Option
}
=
Select
;
const
{
TextArea
}
=
Input
;
const
FormItem
=
Form
.
Item
;
class
GoodsAddModal
extends
React
.
Component
{
state
=
{
};
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
currentIndex
:
-
1
,
};
}
componentWillMount
()
{
}
componentDidUpdate
()
{
...
...
@@ -27,13 +32,15 @@ class GoodsAddModal extends React.Component {
const
{
form
,
save
,
editCouponInfo
,
couponImg
,
goodsBanner
,
}
=
this
.
props
;
this
.
setState
({
currentIndex
:
-
1
,
});
if
(
editCouponInfo
.
id
==
0
&&
(
couponImg
==
''
||
couponImg
==
undefined
))
{
message
.
error
(
'请上传卡券封面'
,
0.5
);
return
;
}
form
.
validateFields
((
err
,
values
)
=>
{
if
(
!
err
)
{
console
.
log
(
values
,
'values'
);
const
{
price
,
title
,
...
...
@@ -61,6 +68,9 @@ class GoodsAddModal extends React.Component {
close
=
()
=>
{
const
{
form
,
close
}
=
this
.
props
;
form
.
resetFields
();
this
.
setState
({
currentIndex
:
-
1
,
});
close
();
}
uploadAvator
=
(
e
)
=>
{
...
...
@@ -77,6 +87,36 @@ class GoodsAddModal extends React.Component {
uploadtype
:
'goodBannerupload'
,
});
};
imgToUpdate
=
()
=>
{
this
.
setState
({
currentIndex
:
4
,
});
}
imgCancelUpdate
=
()
=>
{
this
.
setState
({
currentIndex
:
-
1
,
});
}
moveGoodsimg
=
(
index
,
direction
)
=>
{
const
{
dispatch
}
=
this
.
props
;
dispatch
({
type
:
'integral/moveGoodsimg'
,
payload
:
{
index
,
direction
,
},
});
}
deleteGoodsImg
=
(
index
)
=>
{
const
{
dispatch
}
=
this
.
props
;
dispatch
({
type
:
'integral/deleteGoodsImg'
,
payload
:
{
index
,
},
});
}
render
()
{
const
{
visible
,
...
...
@@ -86,9 +126,11 @@ class GoodsAddModal extends React.Component {
uploadBanner
,
editCouponInfo
,
goodsBanner
,
dispatch
,
submitting
,
form
:
{
getFieldDecorator
,
getFieldValue
},
}
=
this
.
props
;
const
{
c
lassRoomId
,
title
}
=
this
.
state
;
const
{
c
urrentIndex
}
=
this
.
state
;
const
formItemModalLineLayout
=
{
labelCol
:
{
xs
:
{
span
:
24
},
...
...
@@ -111,8 +153,9 @@ class GoodsAddModal extends React.Component {
<
Modal
visible
=
{
visible
}
title
=
{
isEdit
==
1
?
'编辑商品'
:
'新增商品'
}
okText
=
"确定"
okText
=
{
!
submitting
?
'保存'
:
'保存中...'
}
onCancel
=
{
this
.
close
}
confirmLoading
=
{
submitting
}
onOk
=
{
this
.
save
}
className
=
"modifyclassModal"
maskClosable
=
{
false
}
...
...
@@ -133,7 +176,7 @@ class GoodsAddModal extends React.Component {
<
img
className
=
{
pageStyle
.
avatar
}
src
=
{
imagify
(
couponImg
)
?
imagify
(
couponImg
)
:
imagify
(
editCouponInfo
.
cover
)}
alt
=
""
/>
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
<
input
type
=
"file"
id
=
"uploadinput"
className
=
{
pageStyle
.
fileuploadinput
}
onChange
=
{(
e
)
=>
{
this
.
uploadAvator
(
e
);
}}
accept
=
"image/*"
/>
新增图片
{
isEdit
==
1
?
'修改图片'
:
'新增图片'
}
<
/span
>
<
div
className
=
{
pageStyle
.
thumbTip
}
><
span
>
建议尺寸:
310
*
270
最多上传
1
张
<
/span></
div
>
<
/div
>
...
...
@@ -148,42 +191,66 @@ class GoodsAddModal extends React.Component {
sm
:
{
span
:
24
},
}}
>
{
editCouponInfo
.
banner
.
length
>
0
?
<
div
className
=
{
pageStyle
.
banner
}
>
<
div
className
=
{
pageStyle
.
bannerBox
}
>
<
Carousel
>
{
editCouponInfo
.
banner
.
length
>
0
&&
(
JSON
.
parse
(
editCouponInfo
.
banner
)).
map
((
item
,
index
)
=>
(
<
div
>
<
img
className
=
{
pageStyle
.
avatar
}
src
=
{
imagify
(
item
)}
alt
=
""
/>
<
/div
>
))}
<
/Carousel>
,
<
div
className
=
{
pageStyle
.
banner
}
>
<
div
className
=
{
pageStyle
.
bannerBox
}
>
{
editCouponInfo
.
banner
.
length
>
0
&&
<
div
>
<
img
className
=
{
pageStyle
.
avatar
}
src
=
{
imagify
(
editCouponInfo
.
banner
[
0
])}
alt
=
""
/>
<
div
className
=
{
pageStyle
.
imgdelandupdate
}
>
<
div
className
=
{
pageStyle
.
imgupdate
}
onClick
=
{()
=>
{
this
.
imgToUpdate
();
}}
>
修改
<
/div
>
<
/div
>
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
<
input
type
=
"file"
id
=
"uploadinput"
className
=
{
pageStyle
.
fileuploadinput
}
onChange
=
{(
e
)
=>
{
this
.
uploadBanner
(
e
);
}}
accept
=
"image/*"
/>
新增图片
<
/span
>
<
div
className
=
{
pageStyle
.
thumbTip
}
><
span
>
建议尺寸:
750
*
310
最多上传
4
张
<
/span></
div
>
<
/div>
:
<
div
className
=
{
pageStyle
.
banner
}
>
<
div
className
=
{
pageStyle
.
bannerBox
}
>
<
Carousel
>
{
goodsBanner
.
map
((
item
,
index
)
=>
(
<
div
>
<
img
className
=
{
pageStyle
.
avatar
}
src
=
{
imagify
(
item
)}
alt
=
""
/>
<
/div
>
))}
<
/Carousel>
,
<
/div
>
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
<
input
type
=
"file"
id
=
"uploadinput"
className
=
{
pageStyle
.
fileuploadinput
}
onChange
=
{(
e
)
=>
{
this
.
uploadBanner
(
e
);
}}
accept
=
"image/*"
/>
新增图片
<
/span
>
<
div
className
=
{
pageStyle
.
thumbTip
}
><
span
>
建议尺寸:
750
*
310
最多上传
4
张
<
/span></
div
>
<
/div
>
}
}
<
/div
>
{
currentIndex
>=
editCouponInfo
.
banner
.
length
&&
editCouponInfo
.
banner
.
length
>
0
&&
<
div
className
=
{
pageStyle
.
smallImgBox
}
>
<
Icon
className
=
{
pageStyle
.
smallImgBoxClose
}
onClick
=
{
this
.
imgCancelUpdate
}
type
=
"close"
/>
{
editCouponInfo
.
banner
.
map
((
img
,
i
)
=>
(
<
div
className
=
{
pageStyle
.
smallImgItem
}
>
<
div
className
=
{
pageStyle
.
smallImgItembox
}
>
<
img
alt
=
""
src
=
{
imagify
(
img
)}
/
>
<
div
className
=
{
pageStyle
.
imgdelandupdate
}
>
<
div
className
=
{
pageStyle
.
imgdel
}
onClick
=
{()
=>
this
.
deleteGoodsImg
(
i
)}
>
删除
<
/div
>
<
/div
>
<
/div
>
{
editCouponInfo
.
banner
.
length
>
1
&&
<
div
className
=
{
pageStyle
.
imgmovebox
}
>
{
i
>
0
&&
<
div
className
=
{
pageStyle
.
arowbox
}
onClick
=
{()
=>
this
.
moveGoodsimg
(
i
,
'left'
)}
>
<
Icon
type
=
"arrow-left"
/>
<
/div
>
}
{
i
==
0
&&
<
div
className
=
{
`
${
pageStyle
.
arowbox
}
${
pageStyle
.
arowboxgrey
}
`
}
>
<
Icon
type
=
"arrow-left"
/>
<
/div
>
}
{
i
<
editCouponInfo
.
banner
.
length
-
1
&&
<
div
className
=
{
pageStyle
.
arowbox
}
onClick
=
{()
=>
this
.
moveGoodsimg
(
i
,
'right'
)}
>
<
Icon
type
=
"arrow-right"
/>
<
/div
>
}
{
i
==
editCouponInfo
.
banner
.
length
-
1
&&
<
div
className
=
{
`
${
pageStyle
.
arowbox
}
${
pageStyle
.
arowboxgrey
}
`
}
>
<
Icon
type
=
"arrow-right"
/>
<
/div
>
}
<
/div>
}
<
/div
>
))}
<
/div
>
}
{
editCouponInfo
.
banner
.
length
<
4
?
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
<
input
type
=
"file"
id
=
"uploadinput"
className
=
{
pageStyle
.
fileuploadinput
}
onChange
=
{(
e
)
=>
{
this
.
uploadBanner
(
e
);
}}
accept
=
"image/*"
/>
新增图片
<
/span>
:
<
span
className
=
{
pageStyle
.
uploadThumb
}
>
已上传
4
张
<
/span
>
}
<
div
className
=
{
pageStyle
.
thumbTip
}
><
span
>
建议尺寸:
750
*
310
最多上传
4
张
<
/span></
div
>
<
/div
>
<
/FormItem
>
{
getFieldDecorator
(
'type'
,
{
initialValue
:
1
})(
<
Input
type
=
"hidden"
/>
)}
{
getFieldDecorator
(
'status'
,
{
initialValue
:
1
})(
<
Input
type
=
"hidden"
/>
)}
...
...
@@ -241,8 +308,13 @@ GoodsAddModal.propTypes = {
GoodsAddModal
.
defaultProps
=
{
isEdit
:
false
,
};
function
mapStateToProps
(
state
)
{
// eslint-disable-next-line no-empty-pattern
const
{
}
=
state
.
integral
;
return
{
};
}
const
ClassMgt
=
Form
.
create
()(
GoodsAddModal
);
export
default
ClassMgt
;
export
default
connect
(
mapStateToProps
)(
ClassMgt
);
src/pages/integralmanage/storesetting/GoodsAddModal.less
View file @
9049c51c
.thumb {
display: flex;
position: relative;
margin-bottom: 15px;
.thumbTip {
position: absolute;
font-size:14px;
...
...
@@ -23,10 +24,12 @@
height: 92px;
background-color: #D8D8D8;
margin-right: 30px;
position: relative;
}
.banner {
display: flex;
position: relative;
margin-bottom: 15px;
.thumbTip {
position: absolute;
font-size:14px;
...
...
@@ -82,4 +85,395 @@
background-color: #D8D8D8;
}
}
@import '../../../less/variables.less';
@images: '@{imagesroot}/webapp/';
.SchoolInfoEditorcontainer {
}
.header {
color: #000;
font-size: 14px;
font-weight: 700;
line-height: 50px;
padding-left: 20px;
border-bottom: 1px solid rgba(0,0,0,0.05);
}
.FormBox {
padding: 14px 0 0;
}
.itemlistbox {
max-height: 400px;
overflow-y: scroll;
padding-bottom: 10px;
}
.FormItemClass {
padding-left: 30px;
margin-bottom: 8px;
display: flex;
align-items: center;
}
.FormItemInputClass {
// height: 46px;
// line-height: 46px;
}
.divideLine {
border-bottom: 1px solid rgba(0,0,0,0.05);
// padding-top: 10px;
}
.btnbox {
text-align: right;
padding: 14px 35px 12px 0;
}
.SubmitBtn {
// background-color: #ECECEC;
// width: 70px;
height: 34px;
line-height: 34px;
background-color: #FFFFFF;
color: #000000;
font-size: 14px;
border: 1px solid #ECECEC;
height: 34px;
line-height: 34px;
&:hover {
background-color: #FFFFFF;
color: #000000;
font-size: 14px;
border: 1px solid #ECECEC;
}
&:active {
background-color: #FFFFFF;
color: #000000;
font-size: 14px;
border: 1px solid #ECECEC;
}
&:focus {
background-color: #FFFFFF;
color: #000000;
font-size: 14px;
border: 1px solid #ECECEC;
}
}
.operatebox {
padding: 35px 0 20px 30px;
}
.fileuploadbox {
width: 104px;
height: 104px;
position: relative;
background-color: #dedede;
border-radius: 7px;
cursor: pointer;
}
.fileuploadinput{
// height: 32px;
width: 100%;
height: 100%;
opacity: 0;
z-index: 3;
position: absolute;
cursor: pointer;
}
.fileuploadlayer{
width: 100%;
height: 100%;
z-index: 2;
position: absolute;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center;
color: #19B5FE;
font-size: 14px;
cursor: pointer;
}
.uploadcount {
color: #A5A5A5;
font-size: 14px;
line-height: 1;
margin-top: 17px;
}
.selfradiabox {
display: flex;
align-items: center;
justify-content: space-around;
}
.selfradiaitem {
display: flex;
align-items: center;
}
.selfradia {
width: 20px;
height: 20px;
border-radius: 50%;
border: 2px solid #9A9A9A;
}
.selfradiaitemactive {
.selfradia {
border: 6px solid #19B5FE;
}
}
.radianame {
color: #000;
font-size: 14px;
padding-left: 9px;
}
.operateitembox {
display: flex;
}
.imgbox {
width: 104px;
height: 104px;
border-radius: 10px;
margin-right: 12px;
position: relative;
background-color: #dedede;
overflow: hidden;
cursor: pointer;
}
.img {
width: 104px;
height: 104px;
display: block;
}
.imgoperatebox {
height: 104px;
width: 41px;
border-radius: 10px;
background-color: #fff;
margin-right: 24px;
display: flex;
flex-direction: column;
overflow: hidden;
}
.blockOperateItem {
flex: 1;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
&:hover {
background-color: #19B5FE;
.blockOperateItemIcon {
color: #fff;
}
}
}
.imgbox:hover {
.imgdelandupdate {
bottom: 0;
}
}
.imgdelandupdate {
position: absolute;
bottom: 0;
left: 0;
height: 30px;
background-color: rgba(0,0,0,0.5);
width: 100%;
color: #fff;
padding: 8px 0;
display: flex;
align-items: center;
line-height: 1;
font-size: 14px;
cursor: pointer;
transition: bottom 0.2s;
}
.imgdel {
//border-right: 1px solid #fff;
flex: 1;
text-align: center;
}
.imgupdate {
flex: 1;
text-align: center;
}
.Addbox {
height: 120px;
width: 509px;
margin: 10px auto 14px;
background-color: #fff;
border-radius: 7px;
color: #19B5FE;
font-size: 14px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
position: relative;
border:1px solid rgba(236,236,236,1);
&:hover {
.AddFloatbox {
display: block;
}
}
}
.AddFloatbox {
border-radius: 4px;
width: 152px;
height: 88px;
background-color: #fff;
box-shadow:0px 2px 10px 0px rgba(0, 0, 0, 0.14);
position: absolute;
left: 50%;
top: 64%;
display: none;
}
.AddItem {
line-height: 44px;
text-align: center;
font-size: 14px;
// padding-left: 20px;
color: #000000;
&:hover {
color: #19B5FE;
}
}
.AddVideoItem {
border-bottom: 1px solid rgba(0,0,0,0.05);
}
.mediaeditbox {
width: 509px;
margin: 0 auto 14px;
position: relative;
}
.mediadit {
background-color: #fff;
border-radius: 7px;
height: 120px;
padding: 8px 0 8px 8px;
display: flex;
align-items: flex-start;
position: relative;
&:hover {
.delicon {
display: block;
}
}
}
.mediaditboxtitle {
color: #9A9A9A;
font-weight: 700;
line-height: 1;
margin-bottom: 12px;
font-size: 14px;
}
.titlebox {
display: flex;
// align-items: center;
span {
font-size: 14px;
color: #000;
padding-right: 10px;
padding-left: 16px;
line-height: 39px;
}
}
.titleinput {
width: 270px;
}
.uploadinput {
cursor: pointer;
}
.continueAdImg {
color: #19B5FE;
font-size: 14px;
position: absolute;
left: 125px;
bottom: 8px;
line-height: 1;
cursor: pointer;
}
:global {
.ant-form-item {
margin-bottom: 0;
.ant-form-item-children {
padding-left: 0;
}
}
}
.smallImgBox {
position: absolute;
z-index: 4;
padding: 19px 19px 10px 19px;
background-color: #fff;
display: inline-block;
width: auto;
max-width: 600px;
overflow-x: auto;
border-radius: 10px;
box-shadow:0px 2px 10px 0px rgba(0, 0, 0, 0.14);
// height: 160px;
left: 65px;
top: 165px;
// display: none;
}
.smallImgItem {
width: 104px;
margin-right: 16px;
display: inline-block;
cursor: pointer;
}
.smallImgItembox {
width: 104px;
height: 104px;
position: relative;
overflow: hidden;
border-radius: 4px;
img {
width: 104px;
height: 104px;
display: block;
}
}
.imgmovebox {
display: flex;
align-items: center;
justify-content: center;
}
.arowbox {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
cursor: pointer;
height: 30px;
&:hover {
background-color: #19B5FE;
color: #fff;
}
&.arowboxgrey {
color: #E5E5E5;
&:hover {
background-color: #fff;
}
}
}
.smallImgItembox:hover {
.imgdelandupdate {
bottom: 0;
}
}
.smallImgBoxClose {
position: absolute;
right: 5px;
top: 5px;
font-size: 20px;
cursor: pointer;
}
.delicon {
background-image: url('@{imagesroot}delicon.png');
background-size: 100% 100%;
width: 27px;
height: 27px;
position: absolute;
top: -13px;
right: -13px;
display: none;
}
src/pages/integralmanage/storesetting/index.js
View file @
9049c51c
...
...
@@ -233,6 +233,7 @@ class StoreMgt extends React.Component {
editCouponInfo
,
editGoodsModalShow
,
goodsBanner
,
goodSaveSubmiting
,
}
=
this
.
props
;
const
{
previewVisible
,
previewImage
,
isEdit
,
type
,
...
...
@@ -242,6 +243,13 @@ class StoreMgt extends React.Component {
title
:
'商品名称'
,
dataIndex
:
'title'
,
},
{
title
:
'类型'
,
dataIndex
:
'type'
,
render
:
(
text
)
=>
{
return
(
<
div
>
{
text
==
1
&&
'商品'
}{
text
==
2
&&
'卡券'
}
<
/div>
)
;
},
},
{
title
:
'图片展示'
,
dataIndex
:
'cover'
,
...
...
@@ -314,17 +322,16 @@ class StoreMgt extends React.Component {
<
CouponAddModal
visible
=
{
editCouponModalShow
}
isEdit
=
{
isEdit
}
studentSubmiting
=
{
studentSubmiting
}
close
=
{
this
.
closeCouponModal
}
save
=
{
this
.
save
}
uploadAvator
=
{
this
.
uploadAvator
}
couponImg
=
{
couponImg
}
editCouponInfo
=
{
editCouponInfo
}
submitting
=
{
goodSaveSubmiting
}
/
>
<
GoodsAddModal
visible
=
{
editGoodsModalShow
}
isEdit
=
{
isEdit
}
studentSubmiting
=
{
studentSubmiting
}
close
=
{
this
.
closeGoodsModal
}
save
=
{
this
.
save
}
uploadAvator
=
{
this
.
uploadAvator
}
...
...
@@ -332,6 +339,7 @@ class StoreMgt extends React.Component {
couponImg
=
{
couponImg
}
goodsBanner
=
{
goodsBanner
}
editCouponInfo
=
{
editCouponInfo
}
submitting
=
{
goodSaveSubmiting
}
/
>
{
cropperboxShow
&&
<
Cropper
avatorUploader
=
{
this
.
state
.
avatorUploader
}
...
...
@@ -362,6 +370,7 @@ function mapStateToProps(state) {
couponImg
,
editGoodsModalShow
,
goodsBanner
,
goodSaveSubmiting
,
}
=
state
.
integral
;
return
{
goodsList
,
...
...
@@ -374,6 +383,7 @@ function mapStateToProps(state) {
editCouponInfo
,
editGoodsModalShow
,
goodsBanner
,
goodSaveSubmiting
,
};
}
export
default
connect
(
mapStateToProps
)(
StoreMgt
);
...
...
src/pages/login/index.js
View file @
9049c51c
...
...
@@ -75,7 +75,7 @@ class LoginForm extends React.Component {
dispatch
({
type
:
'register/getverifycode'
,
payload
:
{
type
:
4
,
type
:
5
,
mobile
,
dispatch
,
},
...
...
src/pages/student/index.js
View file @
9049c51c
...
...
@@ -158,11 +158,14 @@ class StudentMgt extends React.Component {
dispatch
({
type
:
'students/studentModelCoursesBuyOrRenew'
,
payload
:
{
values
,
values
:
{
...
values
,
buy
:
values
.
buy
||
0
,
give
:
values
.
give
||
0
,
},
callBack
,
},
});
// form.resetFields();
}
// ShowModeType = (value) => {
// if (value == 3) {
...
...
src/pages/usersetting/UpdateNickname.js
0 → 100644
View file @
9049c51c
import
React
from
'react'
;
import
{
connect
}
from
'dva'
;
import
{
Row
,
Col
,
Modal
,
Form
,
Input
,
Button
,
message
}
from
'antd'
;
import
pageStyles
from
'./BindWx.less'
;
import
Cropper
from
'../../components/Cropper'
;
import
{
pageIn
,
imagify
}
from
'../../utils/index'
;
const
{
Search
}
=
Input
;
const
FormItem
=
Form
.
Item
;
class
UpdateNicknameForm
extends
React
.
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
};
}
componentDidMount
()
{
}
componentWillUnmount
()
{
const
{
dispatch
}
=
this
.
props
;
}
sureBindWx
=
()
=>
{
const
{
form
,
updateNickname
}
=
this
.
props
;
form
.
validateFields
((
err
,
values
)
=>
{
if
(
!
err
)
{
updateNickname
(
values
,
()
=>
{
form
.
resetFields
();
});
}
});
}
onCancel
=
()
=>
{
const
{
form
,
onCancel
}
=
this
.
props
;
form
.
resetFields
();
onCancel
(
false
);
}
render
()
{
const
{
nickname
,
nicknameChangeShow
,
nicknameSubmitting
,
}
=
this
.
props
;
const
{
getFieldDecorator
}
=
this
.
props
.
form
;
return
(
<
div
>
<
Modal
visible
=
{
nicknameChangeShow
}
title
=
"修改昵称"
okText
=
{
nicknameSubmitting
?
'提交中...'
:
'提交'
}
cancelText
=
"关闭"
zIndex
=
{
110
}
onOk
=
{
this
.
sureBindWx
}
onCancel
=
{
this
.
onCancel
}
maskClosable
=
{
false
}
confirmLoading
=
{
nicknameSubmitting
}
width
=
"540px"
>
<
Form
className
=
"modalform"
labelAlign
=
"left"
>
<
Form
.
Item
label
=
"昵称"
labelCol
=
{{
span
:
3
}}
wrapperCol
=
{{
span
:
21
}}
>
<
Row
gutter
=
{
8
}
>
<
Col
span
=
{
15
}
>
{
getFieldDecorator
(
'nickname'
,
{
initialValue
:
nickname
,
rules
:
[
{
required
:
true
,
message
:
'请输入昵称'
},
],
})(
<
Input
type
=
"text"
maxLength
=
{
20
}
placeholder
=
"请输入昵称"
/>
)}
<
/Col
>
<
/Row
>
<
/Form.Item
>
<
/Form
>
<
/Modal
>
<
/div
>
);
}
}
UpdateNicknameForm
.
propTypes
=
{
};
const
UpdateNickname
=
Form
.
create
()(
UpdateNicknameForm
);
export
default
UpdateNickname
;
src/pages/usersetting/index.js
View file @
9049c51c
...
...
@@ -3,6 +3,7 @@ import { connect } from 'dva';
import
{
Row
,
Col
,
Modal
,
Form
,
Input
,
Button
,
message
}
from
'antd'
;
import
pageStyles
from
'./index.less'
;
import
BindWx
from
'./BindWx'
;
import
UpdateNickname
from
'./UpdateNickname'
;
import
Cropper
from
'../../components/Cropper'
;
import
QrcodeShow
from
'../../components/qrcodeShow'
;
import
{
pageIn
,
imagify
}
from
'../../utils/index'
;
...
...
@@ -201,6 +202,25 @@ class UserSettingForm extends React.Component {
},
});
}
updateNickname
=
(
value
,
callBack
)
=>
{
const
{
dispatch
}
=
this
.
props
;
dispatch
({
type
:
'usersetting/updateNickname'
,
payload
:
{
nickname
:
value
.
nickname
,
callBack
,
},
});
}
toupdateNickanem
=
(
visible
)
=>
{
const
{
dispatch
}
=
this
.
props
;
dispatch
({
type
:
'usersetting/updateState'
,
payload
:
{
nicknameChangeShow
:
visible
,
},
});
}
render
()
{
const
{
cropperboxShow
,
...
...
@@ -218,6 +238,8 @@ class UserSettingForm extends React.Component {
previewQrcode
,
businessIsBind
,
checkoutVerifyCode
,
nicknameChangeShow
,
nicknameSubmitting
,
}
=
this
.
props
;
const
{
getFieldDecorator
}
=
this
.
props
.
form
;
return
(
...
...
@@ -243,11 +265,15 @@ class UserSettingForm extends React.Component {
<
/div
>
<
/div
>
<
div
className
=
{
pageStyles
.
infoline
}
>
<
div
className
=
{
pageStyles
.
infodetail
}
>
手
&
nbsp
;
&
nbsp
;
机
&
nbsp
;
&
nbsp
;
号
:
&
nbsp
;
&
nbsp
;{
userInfo
.
mobile
}
<
/div
>
<
div
className
=
{
pageStyles
.
infodetail
}
>
昵
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
&
nbsp
;
称:
&
nbsp
;
&
nbsp
;{
userInfo
.
nickname
}
<
/div
>
<
div
className
=
{
pageStyles
.
infooperate
}
onClick
=
{()
=>
this
.
toupdateNickanem
(
true
)}
>
修改昵称
<
/div
>
<
/div
>
<
div
className
=
{
pageStyles
.
infoline
}
>
<
div
className
=
{
pageStyles
.
infodetail
}
>
手
&
nbsp
;
&
nbsp
;
机
&
nbsp
;
&
nbsp
;
号:
&
nbsp
;
&
nbsp
;{
userInfo
.
mobile
}
<
/div
>
<
div
className
=
{
pageStyles
.
infooperate
}
onClick
=
{()
=>
this
.
toResetPsd
(
true
)}
>
修改密码
<
/div
>
<
/div
>
<
div
className
=
{
pageStyles
.
infoline
}
>
<
div
className
=
{
pageStyles
.
infodetail
}
>
绑定微信
:
&
nbsp
;
&
nbsp
;{
businessIsBind
?
'已绑定'
:
'未绑定'
}
<
/div
>
<
div
className
=
{
pageStyles
.
infodetail
}
>
绑定微信
:
&
nbsp
;
&
nbsp
;{
businessIsBind
?
'已绑定'
:
'未绑定'
}
<
/div
>
{
!
businessIsBind
&&
<
div
className
=
{
pageStyles
.
infooperate
}
onClick
=
{()
=>
this
.
BindWxDiaVisible
(
true
)}
>
立即绑定
<
/div>
}
{
businessIsBind
&&
<
div
className
=
{
pageStyles
.
infooperate
}
style
=
{{
opacity
:
0
}}
>
立即绑定
<
/div>
}
<
/div
>
...
...
@@ -378,6 +404,13 @@ class UserSettingForm extends React.Component {
bindWxPost
=
{
this
.
bindWxPost
}
checkoutVerifyCode
=
{
checkoutVerifyCode
}
/
>
<
UpdateNickname
nickname
=
{
userInfo
.
nickname
}
updateNickname
=
{
this
.
updateNickname
}
nicknameChangeShow
=
{
nicknameChangeShow
}
onCancel
=
{()
=>
this
.
toupdateNickanem
(
false
)}
nicknameSubmitting
=
{
nicknameSubmitting
}
/
>
<
/Row
>
);
}
...
...
@@ -411,6 +444,8 @@ function mapStateToProps(state) {
previewQrcode
,
businessIsBind
,
checkoutVerifyCode
,
nicknameChangeShow
,
nicknameSubmitting
,
}
=
state
.
usersetting
;
return
{
cropperboxShow
,
...
...
@@ -430,6 +465,8 @@ function mapStateToProps(state) {
previewQrcode
,
businessIsBind
,
checkoutVerifyCode
,
nicknameChangeShow
,
nicknameSubmitting
,
};
}
export
default
connect
(
mapStateToProps
)(
UserSetting
);
src/services/login.js
View file @
9049c51c
...
...
@@ -10,6 +10,15 @@ export function login(params) {
data
,
});
}
export
function
verifyCodeLogin
(
params
)
{
const
data
=
qs
.
stringify
(
params
);
return
request
({
url
:
`
${
api
.
verifyCodeLogin
}
`
,
method
:
'POST'
,
needAuth
:
false
,
data
,
});
}
export
function
newLogin
(
params
)
{
const
data
=
qs
.
stringify
(
params
);
return
request
({
...
...
src/utils/exportexcel.js
View file @
9049c51c
...
...
@@ -27,7 +27,7 @@ function exportExcel(headers, data, fileName = 'XXX.xlsx', type) {
teacher
:
item
.
school_teachers
?
item
.
school_teachers
.
map
(
ele
=>
ele
.
nickname
).
join
(
','
)
:
''
,
capacity
:
`
${
item
.
class_student_count
||
0
}
/
${
item
.
capacity
||
0
}
`
,
expended
:
`
${
item
.
graduation_status
==
1
?
(
item
.
total
||
''
)
:
'-'
}
`
,
total
:
`
${
item
.
already_attend_expended
||
0
}
/
${
item
.
total
||
0
}
`
,
total
:
`
${
item
.
expended
||
0
}
/
${
item
.
already_attend_expended
||
0
}
`
,
};
});
break
;
...
...
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