Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
train-admin-h5
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tangjiale
train-admin-h5
Commits
3e30b0a7
Commit
3e30b0a7
authored
Jun 11, 2022
by
tangjiale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新代码
parent
a4e2e3c4
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
463 additions
and
109 deletions
+463
-109
top-head.vue
components/layout/top-head.vue
+3
-3
add-course.vue
pages/components/add-course.vue
+199
-44
add-student.vue
pages/components/add-student.vue
+6
-6
import-student.vue
pages/components/import-student.vue
+8
-7
courseManage.vue
pages/courseManage.vue
+71
-31
login.vue
pages/login.vue
+0
-2
studentManage.vue
pages/studentManage.vue
+3
-3
service.js
plugins/framework/core/service.js
+0
-1
service.js
plugins/service.js
+85
-0
base.js
services/base.js
+32
-2
course.js
services/course.js
+42
-6
student.js
services/student.js
+12
-2
index.js
store/index.js
+2
-2
No files found.
components/layout/top-head.vue
View file @
3e30b0a7
...
...
@@ -21,7 +21,7 @@
</div>
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<
el-dropdown-item
command=
"update"
>
修改密码
</el-dropdown-item
>
<
!--
<el-dropdown-item
command=
"update"
>
修改密码
</el-dropdown-item>
--
>
<el-dropdown-item
command=
"layout"
>
退出
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
...
...
@@ -63,7 +63,7 @@
this
.
$service
.
base
.
getUserInfo
(
this
.
myUserInfo
.
token
).
then
(
result
=>
{
this
.
$store
.
commit
(
'updateUserInfo'
,
result
);
setTimeout
(()
=>
{
location
.
href
=
'/'
location
.
href
=
'/
pxsys/
'
},
500
)
})
})
...
...
@@ -76,7 +76,7 @@
this
.
$refs
[
'r-dialog'
].
change
()
break
case
'layout'
:
this
.
$showConfirm
(
"是否确认
退出
登录?"
).
then
(()
=>
{
this
.
$showConfirm
(
"是否确认登录?"
).
then
(()
=>
{
this
.
$store
.
commit
(
"logout"
);
});
break
...
...
pages/components/add-course.vue
View file @
3e30b0a7
...
...
@@ -3,48 +3,64 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-06 09:28:37
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
06 11:12:28
* @LastEditTime: 2022-06-
11 13:54:16
-->
<
template
>
<div
class=
"add-course-bg"
>
<el-form
ref=
"
ruleForm"
:model=
"param
"
>
<el-form
ref=
"
courseFrom"
:model=
"param"
:rules=
"rules
"
>
<el-form-item
label=
"课程名称:"
prop=
"name"
>
<el-input
v-model=
"param.name"
placeholder=
"最多输入
30个汉字(60个字符)"
></el-input>
<el-input
v-model=
"param.name"
placeholder=
"最多输入
60个字符"
maxlength=
"60"
></el-input>
</el-form-item>
<el-form-item
label=
"上课时段:"
prop=
"
na
me"
>
<el-input
v-model=
"param.
na
me"
placeholder=
"如:每周三下午4:30至5:30"
></el-input>
<el-form-item
label=
"上课时段:"
prop=
"
courseTi
me"
>
<el-input
v-model=
"param.
courseTi
me"
placeholder=
"如:每周三下午4:30至5:30"
></el-input>
</el-form-item>
<el-form-item
label=
"可用校区:"
prop=
"checkList"
>
<el-form-item
label=
"可用校区:"
error=
""
required
>
<el-checkbox-group
v-model=
"checkList"
@
change=
"handCheck"
>
<el-checkbox
v-for=
"(lab,index) in
l
ist"
:key=
"index"
:label=
"lab.value"
>
{{
lab
.
name
}}
</el-checkbox>
<el-checkbox
v-for=
"(lab,index) in
schoolL
ist"
:key=
"index"
:label=
"lab.value"
>
{{
lab
.
name
}}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<div
class=
"arr-bg"
>
<el-form-item
label=
"重要属性:"
></el-form-item>
<el-form-item
v-if=
"coachList.length || mangerList.length"
label=
"添加校区下的人员:"
></el-form-item>
<div
class=
"course-arr-flex"
>
<template
v-if=
"coachList && coachList.length"
>
<el-form-item
label=
"添加教练:"
error=
""
required
>
<t-select
v-model=
"coachSelect"
placeholder=
"请选择"
multiple
:ds=
"coachList"
@
input=
"e => handleSelect(e,'coach')"
></t-select>
</el-form-item>
</
template
>
<
template
v-if=
"mangerList && mangerList.length"
>
<el-form-item
label=
"添加班主任:"
error=
""
required
>
<t-select
v-model=
"mangerSelect"
placeholder=
"请选择"
multiple
:ds=
"mangerList"
@
input=
"e => handleSelect(e,'manger')"
></t-select>
</el-form-item>
</
template
>
</div>
<el-form-item
label=
"添加重要属性:"
></el-form-item>
<div
class=
"course-arr-flex"
>
<el-form-item
label=
"课程属性:"
prop=
"
arr
"
>
<t-select
v-model=
"param.
arr"
placeholder=
"请选择"
:ds=
"[
{name:'小学组',value:''},{name:'初中组',value:''},{name:'高中组',value:''
}]">
</t-select>
<el-form-item
label=
"课程属性:"
prop=
"
courseStep
"
>
<t-select
v-model=
"param.
courseStep"
placeholder=
"请选择"
:ds=
"[{name:'小学组',value:1},{name:'初中组',value:2},{name:'高中组',value:3
}]"
></t-select>
</el-form-item>
<el-form-item
label=
"课程类型:"
prop=
"type"
>
<t-select
v-model=
"param.type"
placeholder=
"请选择"
:ds=
"[
{name:'体验课',value:
''},{name:'正式班课',value:''
}]">
</t-select>
<t-select
v-model=
"param.type"
placeholder=
"请选择"
:ds=
"[{name:'体验课',value:
1},{name:'正式班课',value:2
}]"
></t-select>
</el-form-item>
<el-form-item
label=
"课时:"
prop=
"arr"
>
<el-input
v-model=
"param.name"
placeholder=
"请输入数字"
></el-input>
<el-form-item
label=
"课时:"
prop=
"classHour"
>
<el-input
v-model=
"param.classHour"
placeholder=
"请输入数字"
onkeyup=
"this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"
onafterpaste=
"this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"
></el-input>
</el-form-item>
<el-form-item
label=
"课程价格:"
prop=
"arr"
>
<el-input
v-model=
"param.price"
placeholder=
"请输入数字"
></el-input>
<el-form-item
label=
"课程价格:"
prop=
"cost"
>
<el-input
v-model=
"param.cost"
placeholder=
"请输入数字"
onkeyup=
"this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"
onafterpaste=
"this.value=this.value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"
></el-input>
</el-form-item>
</div>
</div>
<el-form-item
label=
"课程图片:"
prop=
"
name
"
>
<el-form-item
label=
"课程图片:"
prop=
"
poster
"
>
<el-upload
accept=
"image/jpg,image/jpeg,image/png"
:before-upload=
"beforeUpload"
class=
"upload-demo"
action=
"#"
:show-file-list=
"false"
>
<
template
>
<img
v-if=
"imageUrl"
:src=
"imageUrl"
class=
"avata
r"
>
<img
class=
"image-ctn"
v-if=
"param.poster"
:src=
"param.poste
r"
>
<div
class=
"upload-ctn"
v-else
>
<div
class=
"tip"
>
课程图片大小不能超过3MB。
</div>
<div
class=
"upload-bg"
>
...
...
@@ -56,20 +72,29 @@
</el-upload>
</el-form-item>
<el-form-item
label=
"课程详情:"
prop=
"
name
"
class=
"curstom-editor"
>
<quill-editor
:options=
"editorOption"
v-model=
"
content
"
></quill-editor>
<el-form-item
label=
"课程详情:"
prop=
"
detail
"
class=
"curstom-editor"
>
<quill-editor
:options=
"editorOption"
v-model=
"
param.detail
"
></quill-editor>
</el-form-item>
<div
class=
"btns"
>
<el-button
type=
"primary"
@
click=
"onSubmit('studentForm',0)"
>
保存
</el-button>
<el-button
v-if=
"param.status != 1"
type=
"primary"
@
click=
"onSubmit('studentForm',1)"
>
直接发布
</el-button>
</div>
</el-form>
</div>
</template>
<
script
>
import
{
Loading
}
from
'element-ui'
;
export
default
{
services
:[
'base'
,
'course'
],
data
(){
return
{
param
:{},
imageUrl
:
''
,
param
:{
poster
:
''
,
detail
:
''
,
},
checkList
:[],
content
:
''
,
...
...
@@ -77,17 +102,53 @@ export default {
placeholder
:
"请输入正文"
,
},
list
:[
{
name
:
'宇腾校区'
,
value
:
'4'
,},{
name
:
'河西校区'
,
value
:
'6'
,},{
name
:
'南湖馆校区'
,
value
:
'3'
,},
]
schoolList
:[],
//校区
mangerList
:[],
//班主任
coachList
:[],
// 教练
mangerSelect
:[],
coachSelect
:[],
rules
:{
name
:
[{
required
:
true
,
message
:
'请输入课程名称'
,
trigger
:
'change'
}],
courseTime
:[
{
required
:
true
,
message
:
'请输入上课时段'
,
trigger
:
'change'
}],
// checkList:[{ required: true, message: '请选择校区', trigger: 'change' }],
// pxEmployeeList:[{ required: true, message: '请选择校区人员', trigger: 'change' }],
courseStep
:[{
required
:
true
,
message
:
'请选择课程属性'
,
trigger
:
'change'
}],
type
:[{
required
:
true
,
message
:
'请选择课程类型'
,
trigger
:
'change'
}],
classHour
:[{
required
:
true
,
message
:
'请输入课时'
,
trigger
:
'change'
}],
cost
:[{
required
:
true
,
message
:
'请输入课程价格'
,
trigger
:
'change'
}],
poster
:[{
required
:
true
,
message
:
'请上传课程图片'
,
trigger
:
'change'
}],
detail
:[{
required
:
true
,
message
:
'请填入课程详情'
,
trigger
:
'change'
}]
}
}
},
async
mounted
(){
this
.
schoolList
=
await
this
.
$service
.
base
.
getUserAllSchList
()
||
[]
},
methods
:{
handCheck
(){
handCheck
(
e
){
this
.
mangerList
=
[]
this
.
mangerSelect
=
[]
this
.
coachList
=
[]
this
.
coachSelect
=
[]
this
.
param
.
pxEmployeeList
=
[]
if
(
!
e
.
length
){
return
}
let
schIds
=
e
.
join
(
','
)
//manger班主任 coach教练
this
.
$service
.
base
.
getSchEmpList
({
empPosition
:
'manger'
,
schIds
}).
then
(
res
=>
{
this
.
mangerList
=
res
||
[]
})
this
.
$service
.
base
.
getSchEmpList
({
empPosition
:
'coach'
,
schIds
}).
then
(
res
=>
{
this
.
coachList
=
res
||
[]
})
},
beforeUpload
(
file
)
{
//验证资源格式
let
that
=
this
var
img
=
file
.
name
.
substring
(
file
.
name
.
lastIndexOf
(
'.'
)
+
1
)
const
suffix
=
img
===
'jpg'
const
suffix2
=
img
===
'png'
...
...
@@ -101,28 +162,114 @@ export default {
if
(
!
isLt1M
)
{
this
.
$message
.
error
(
'上传图片大小不能超过 1MB!'
);
}
// return this.getToken(file).then(res => {
// this.dataObj.token = res.token;
// this.dataObj.key = res.key;
// let url = file.type.includes('image') ? (this.$config.imgUrl + res.filePath) : (this.$config.imgUrl + res.filePath)
// this.uploadList.push({
// url: url,
// })
// })
return
this
.
getToken
(
file
).
then
(
res
=>
{
that
.
param
.
poster
=
res
that
.
$forceUpdate
()
})
},
handleSelect
(
e
,
form
){
let
arr
=
form
==
'coach'
?
this
.
coachList
:
this
.
mangerList
let
list
=
[...[],...
this
.
param
.
pxEmployeeList
]
list
=
list
.
filter
(
v
=>
v
.
empPosition
!=
form
)
e
&&
e
.
length
&&
e
.
forEach
(
id
=>
{
arr
.
forEach
(
data
=>
{
if
(
data
.
value
==
id
){
list
.
push
({
empCode
:
data
.
empCode
,
empPosition
:
data
.
empPosition
,
id
:
data
.
value
})
}
})
})
this
.
param
.
pxEmployeeList
=
list
},
getToken
(
file
=
{})
{
let
datas
=
{
busType
:
1
,
submitType
:
0
,
fname
:
file
.
type
}
return
this
.
$service
.
upload
.
getUploadTokenForWeb
(
datas
)
let
formData
=
new
FormData
();
formData
.
append
(
"imageFile"
,
file
);
return
this
.
$service
.
base
.
upLoadImage
(
formData
)
},
onSubmit
(
data
,
form
){
let
that
=
this
this
.
$refs
.
courseFrom
.
validate
((
valid
)
=>
{
if
(
!
that
.
checkList
.
length
){
that
.
$message
.
error
(
'请选择校区'
)
return
}
if
(
!
that
.
param
.
pxEmployeeList
.
length
){
that
.
$message
.
error
(
'请选择校区人员'
)
return
}
if
(
!
(
that
.
param
.
pxEmployeeList
.
filter
(
v
=>
v
.
empPosition
==
'coach'
)).
length
){
that
.
$message
.
error
(
'请添加教练'
)
return
}
if
(
!
(
that
.
param
.
pxEmployeeList
.
filter
(
v
=>
v
.
empPosition
==
'manger'
)).
length
){
that
.
$message
.
error
(
'请添加班主任'
)
return
}
if
(
!
that
.
param
.
poster
){
that
.
$message
.
error
(
'请上传课程图片'
)
return
}
if
(
!
that
.
param
.
detail
){
that
.
$message
.
error
(
'请输入课程详情'
)
return
}
let
param
=
{
...
that
.
param
,
status
:
form
,
//0未发布 1已发布
schIds
:
that
.
checkList
.
join
(
','
),
}
//单位:分
param
.
cost
=
param
.
cost
*
100
let
funName
=
param
.
id
?
'emitCourse'
:
'addCourse'
this
.
$service
.
course
[
funName
](
param
).
then
(
res
=>
{
that
.
$notifySuccess
()
that
.
$emit
(
'update'
)
})
})
},
queryDetail
(
id
){
let
loadingInstance
=
Loading
.
service
({
text
:
'数据加载中...'
});
let
that
=
this
this
.
$service
.
course
.
queryCourseDetail
(
id
).
then
(
res
=>
{
let
{
name
=
''
,
courseTime
=
''
,
courseStep
=
''
,
schIds
=
''
,
status
=
''
,
type
=
''
,
pxEmployeeList
=
[],
poster
=
''
,
detail
=
''
,
classHour
=
''
,
id
=
''
,
cost
=
''
}
=
res
this
.
param
=
{
id
,
name
,
courseTime
,
courseStep
,
status
,
type
,
poster
,
detail
,
classHour
,
cost
:
cost
/
100
}
let
arr
=
schIds
.
split
(
','
)
if
(
arr
.
length
){
arr
=
arr
.
map
(
v
=>
Number
(
v
))
}
else
{
arr
=
[
Number
(
arr
)]
}
this
.
checkList
=
arr
this
.
handCheck
(
arr
)
this
.
$forceUpdate
()
pxEmployeeList
.
length
&&
pxEmployeeList
.
forEach
(
e
=>
{
if
(
e
.
empPosition
==
'manger'
){
that
.
mangerSelect
.
push
(
e
.
id
)
}
else
{
that
.
coachSelect
.
push
(
e
.
id
)
}
})
this
.
$nextTick
(()
=>
{
// 以服务的方式调用的 Loading 需要异步关闭
loadingInstance
.
close
();
});
})
}
}
}
</
script
>
<
style
lang=
"less"
scoped
>
/
deep
/
.el-form-item__error
{
padding-top
:
5px
!important
;
}
.add-course-bg
{
padding
:
20px
0px
;
}
...
...
@@ -152,6 +299,12 @@ export default {
/
deep
/
.el-form-item__content
{
height
:
auto
!important
;
}
.image-ctn
{
height
:
150px
;
width
:
200px
;
object-fit
:
cover
;
object-position
:
center
;
}
.upload-bg
{
cursor
:
pointer
;
height
:
150px
;
...
...
@@ -162,7 +315,8 @@ export default {
display
:
block
!important
;
}
}
//
/
deep
/
.curstom-editor
.ql-container
{
//
min-height
:
300px
;
//
}
.btns
{
display
:
flex
;
justify-content
:
center
;
}
</
style
>
\ No newline at end of file
pages/components/add-student.vue
View file @
3e30b0a7
...
...
@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-02 15:02:39
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-09 1
5:1
3:26
* @LastEditTime: 2022-06-09 1
7:2
3:26
-->
<
template
>
<div>
...
...
@@ -33,8 +33,8 @@
<el-form-item
label=
"其它人手机号"
prop=
"otherPhone"
>
<el-input
v-model=
"param.otherPhone"
placeholder=
"请输入手机号"
style=
"width:222px"
></el-input>
</el-form-item>
<el-form-item
label=
"所在校区"
prop=
"schId"
>
<t-select
v-model=
"param.schId"
:ds=
"
{service:'base', func: 'getUserAllSchList'}">
</t-select>
<el-form-item
label=
"所在校区"
prop=
"schId
s
"
>
<t-select
v-model=
"param.schId
s
"
:ds=
"
{service:'base', func: 'getUserAllSchList'}">
</t-select>
</el-form-item>
...
...
@@ -58,7 +58,7 @@ export default {
fatherPhone
:
''
,
motherPhone
:
''
,
otherPhone
:
''
,
schId
:
''
schId
s
:
''
},
rules
:{
...
...
@@ -78,8 +78,8 @@ export default {
},
queryDetail
(
id
){
this
.
$service
.
student
.
queryStudentDetail
(
id
).
then
(
res
=>
{
let
{
id
,
name
,
birthday
,
gender
,
fatherPhone
,
motherPhone
,
otherPhone
,
schId
}
=
res
this
.
param
=
{
id
,
name
,
birthday
,
gender
,
fatherPhone
,
motherPhone
,
otherPhone
,
schId
}
let
{
id
,
name
,
birthday
,
gender
,
fatherPhone
,
motherPhone
,
otherPhone
,
schId
s
}
=
res
this
.
param
=
{
id
,
name
,
birthday
,
gender
,
fatherPhone
,
motherPhone
,
otherPhone
,
schId
s
}
})
},
onSubmit
(){
...
...
pages/components/import-student.vue
View file @
3e30b0a7
...
...
@@ -50,9 +50,9 @@
<div
class=
"import-tip"
v-if=
"resultObj.message && resultObj.message.length"
>
<div
class=
"import-tip-title flex-s"
>
<span>
错误信息:
</span>
<
div
class=
"download-btn"
v-if=
"resultObj.message && resultObj.message.length"
@
click=
"importErrorMsg"
>
导出错误信息
</div
>
<
!--
<div
class=
"download-btn"
v-if=
"resultObj.message && resultObj.message.length"
@
click=
"importErrorMsg"
>
导出错误信息
</div>
--
>
</div>
<div
v-for=
"(t,idx) in resultObj.message"
:key=
"idx"
>
第
{{
t
.
row
}}
行
{{
t
.
errorInfoList
.
join
(
';'
)
}}
</div>
<div
v-for=
"(t,idx) in resultObj.message"
:key=
"idx"
>
第
{{
t
.
lineNum
}}
行
{{
t
.
errMsg
}}
</div>
</div>
</div>
<!-- 校验成功 -->
...
...
@@ -139,9 +139,8 @@ export default {
formData
.
append
(
"file"
,
this
.
file
);
this
.
$service
.
student
.
recordCheck
(
formData
).
then
(
res
=>
{
let
{
success
=
0
,
error
=
0
,
message
=
[]
}
=
res
debugger
this
.
resultObj
=
{
success
,
error
,
message
}
let
{
rightNum
=
0
,
errorNum
=
0
,
checkVoList
=
[]
}
=
res
this
.
resultObj
=
{
success
:
rightNum
,
error
:
errorNum
,
message
:
checkVoList
}
this
.
step
=
2
}
)
}
,
...
...
@@ -149,15 +148,17 @@ export default {
importData
(){
let
formData
=
new
FormData
();
formData
.
append
(
"file"
,
this
.
file
);
formData
.
append
(
"taskId"
,
this
.
activeObj
.
taskId
);
const
config
=
{
onUploadProgress
:
progressEvent
=>
{
debugger
// progressEvent.loaded:已上传文件大小
// progressEvent.total:被上传文件的总大小
this
.
progressPercent
=
Number
((
progressEvent
.
loaded
/
progressEvent
.
total
*
100
).
toFixed
(
2
))
}
}
this
.
$service
.
physiqueTester
.
downloadRecordImport
(
formData
,
config
).
then
(
res
=>
{
this
.
$service
.
student
.
downloadRecordImport
(
formData
,
config
).
then
(
res
=>
{
}
)
}
,
goNext
(
from
){
...
...
pages/courseManage.vue
View file @
3e30b0a7
...
...
@@ -3,74 +3,84 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-02 14:08:46
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
06 09:31:15
* @LastEditTime: 2022-06-
11 13:49:44
-->
<
template
>
<div
class=
"page-bg"
>
<!-- autoLoad -->
<t-table
autoLoad
ref=
"table"
:options=
"options"
:params=
"params"
@
row-btn-click=
"onRowButtonClick"
>
<!-- 操作栏 -->
<template
slot=
"form-order-search"
>
<div
class=
"search-bottom"
>
<el-button
type=
"primary"
size=
"mini"
plain
@
click=
"
exportOrder
"
><i
class=
"el-icon-plus"
></i>
新增课程
</el-button>
<el-button
type=
"primary"
size=
"mini"
plain
@
click=
"
addCourse
"
><i
class=
"el-icon-plus"
></i>
新增课程
</el-button>
</div>
</
template
>
</t-table>
<c-popup
ref=
"c-popup"
title=
"您正在新增课程信息
"
>
<add-course></add-course>
<c-popup
ref=
"c-popup"
:title=
"title
"
>
<add-course
ref=
"add-course"
@
update=
"updateList(),$refs['c-popup'].change()"
></add-course>
</c-popup>
</div>
</template>
<
script
>
import
addCourse
from
'./components/add-course.vue'
const
courseStep
=
[
''
,
'小学组'
,
'初中组'
,
'高中组'
]
export
default
{
services
:[
'
order'
,
'ba
se'
],
services
:[
'
base'
,
'cour
se'
],
components
:{
addCourse
},
data
(){
return
{
title
:
''
,
params
:{
regionCode
:
''
,
schName
:
''
},
options
:
{
title
:
"
订单
管理"
,
title
:
"
课程
管理"
,
search
:
[
{
label
:
'所属校区:'
,
field
:
'orderStatus'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
ds
:
[{
name
:
'全部'
,
value
:
''
},
{
name
:
'待发货'
,
value
:
1
},
{
name
:
'已退货'
,
value
:
2
},
{
name
:
'已收货'
,
value
:
3
},
{
name
:
'已取消'
,
value
:
4
},
{
name
:
'待收货'
,
value
:
5
}]
ds
:
{
service
:
'base'
,
func
:
'getUserAllSchList'
,
params
:{
all
:
true
}}
},{
label
:
'课程属性:'
,
field
:
'
valid
'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
ds
:
[{
name
:
'全部'
,
value
:
''
},
{
name
:
'小学组'
,
value
:
1
},
{
name
:
'初中组'
,
value
:
0
},{
name
:
'高中组'
,
value
:
0
}]
label
:
'课程属性:'
,
field
:
'
courseStep
'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
ds
:
[{
name
:
'全部'
,
value
:
''
},
{
name
:
'小学组'
,
value
:
1
},
{
name
:
'初中组'
,
value
:
2
},{
name
:
'高中组'
,
value
:
3
}]
},{
label
:
'课程类型:'
,
field
:
'valid'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
ds
:
[{
name
:
'全部'
,
value
:
''
},
{
name
:
'体验课'
,
value
:
1
},
{
name
:
'正式班课'
,
value
:
0
}]
},{
label
:
'课程状态:'
,
field
:
'
valid
'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
label
:
'课程状态:'
,
field
:
'
status
'
,
type
:
'select'
,
autoSelect
:
true
,
required
:
true
,
ds
:
[{
name
:
'全部'
,
value
:
''
},
{
name
:
'已发布'
,
value
:
1
},
{
name
:
'未发布'
,
value
:
0
}]
},{
placeholder
:
"请输入课程名称 "
,
field
:
"
productN
ame"
,
type
:
"text"
,
label
:
"课程名称:"
,
placeholder
:
"请输入课程名称 "
,
field
:
"
n
ame"
,
type
:
"text"
,
label
:
"课程名称:"
,
},
],
table
:
{
service
:
"
order
"
,
height
:(
screen
.
height
-
(
482
*
this
.
$px2rem
)),
func
:
"
getOrderPc
List"
,
service
:
"
course
"
,
height
:(
screen
.
height
-
(
482
*
this
.
$px2rem
)),
func
:
"
queryCourse
List"
,
selectable
:
false
,
customRow
:
true
,
columns
:
[
{
title
:
"课程名单"
,
field
:
"orderNo"
},
{
title
:
"所属小区"
,
field
:
"orderNo"
},
{
title
:
"课程属性"
,
field
:
"orderNo"
},
{
title
:
"课时"
,
width
:
'100px'
,
{
title
:
"课程名称"
,
field
:
"name"
},
{
title
:
"所属小区"
,
field
:
"schNames"
},
{
title
:
"课程属性"
,
type
:
'customField'
,
width
:
'140px'
,
fieldFunction
:
row
=>
courseStep
[
row
.
courseStep
],
},{
title
:
"课时"
,
width
:
'140px'
,
type
:
'customField'
,
fieldFunction
:
row
=>
4
+
'课时'
,
fieldFunction
:
row
=>
row
.
classHour
+
'课时'
,
},{
title
:
"课程价格"
,
type
:
'customField'
,
width
:
'140px'
,
fieldFunction
:
row
=>
(
row
.
cost
/
100
),
},{
title
:
"课程类型"
,
type
:
'customField'
,
width
:
'140px'
,
fieldFunction
:
row
=>
row
.
type
==
0
?
'体验课'
:
'正式课'
,
},
{
title
:
"课程价格"
,
field
:
"orderNo"
},
{
title
:
"课程类型"
,
field
:
"orderNo"
},
{
title
:
"操作"
,
width
:
"2
2
0px"
,
fixed
:
'right'
,
width
:
"2
6
0px"
,
fixed
:
'right'
,
type
:
"buttons"
,
//orderType 1:智慧体育订单 2移动活动订单 3腾讯同步订单 4 h5天天订单
buttons
:
[
...
...
@@ -78,12 +88,13 @@ export default {
name
:
"修改"
,
event
:
"emit"
,
type
:
'primary'
},{
name
:
"发布"
,
type
:
'success'
,
event
:
"publish"
,
controlBtn
:
function
(
data
){
return
true
}
controlBtn
:
function
(
data
){
return
data
.
status
==
0
}
},{
name
:
"取消发布"
,
type
:
'success'
,
event
:
"publish"
,
controlBtn
:
function
(
data
){
return
data
.
orderStatus
==
3
&&
(
data
.
orderType
==
1
||
data
.
orderType
==
4
)
}
controlBtn
:
function
(
data
){
return
data
.
status
==
1
}
},
{
name
:
"删除"
,
event
:
"delete"
,
type
:
'danger'
name
:
"删除"
,
event
:
"delete"
,
type
:
'danger'
,
controlBtn
:
function
(
data
){
return
data
.
status
==
0
&&
data
.
canDel
==
1
}
}
],
},
...
...
@@ -93,20 +104,49 @@ export default {
}
},
mounted
(){
this
.
$refs
[
'c-popup'
].
change
()
//
this.$refs['c-popup'].change()
},
methods
:{
onRowButtonClick
(
data
,
i
)
{
let
self
=
this
let
that
=
this
let
{
event
,
row
}
=
data
if
(
!
event
)
return
switch
(
event
)
{
case
'emit'
:
//修改
break
that
.
title
=
'您正在编辑课程信息'
that
.
$refs
[
'c-popup'
].
change
()
setTimeout
(()
=>
{
that
.
$refs
[
'add-course'
].
queryDetail
(
row
.
id
)
},
100
)
break
case
'publish'
:
//发布 取消发布
that
.
$service
.
course
.
publishCourse
({
id
:
row
.
id
,
status
:
row
.
status
==
0
?
1
:
0
}).
then
(
res
=>
{
that
.
$notifySuccess
()
setTimeout
(()
=>
{
that
.
updateList
()
},
800
)
})
break
case
'delete'
:
//删除
that
.
$showConfirm
().
then
(
res
=>
{
that
.
$service
.
course
.
deleteCourse
(
row
.
id
).
then
(()
=>
{
that
.
$notifySuccess
()
setTimeout
(()
=>
{
that
.
updateList
()
},
800
)
})
})
break
}
},
exportOrder
(){
addCourse
(){
this
.
title
=
'您正在新增课程信息'
this
.
$refs
[
'c-popup'
].
change
()
},
updateList
(){
this
.
$refs
[
'table'
].
reload
(
true
)
}
}
}
...
...
pages/login.vue
View file @
3e30b0a7
...
...
@@ -70,8 +70,6 @@
inputCode
:
this
.
inputCode
,
}).
then
(
res
=>
{
this
.
$service
.
base
.
getUserInfo
(
res
.
token
).
then
(
result
=>
{
debugger
result
.
token
=
res
.
token
this
.
$store
.
commit
(
'updateUserInfo'
,
result
);
this
.
$router
.
push
(
'/'
);
...
...
pages/studentManage.vue
View file @
3e30b0a7
...
...
@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-06-02 14:08:46
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
09 15:22:07
* @LastEditTime: 2022-06-
10 14:04:54
-->
<
template
>
<div
class=
"page-bg"
>
...
...
@@ -14,7 +14,7 @@
@
row-btn-click=
"onRowButtonClick"
>
<!-- 操作栏 -->
<template
slot=
"form-order-search"
>
<template
slot=
"form-order-search"
v-if=
"!([1,2].includes(myUserInfo.roleId))"
>
<div
class=
"search-bottom"
>
<el-button
type=
"primary"
size=
"mini"
plain
@
click=
"handleOption('add')"
><i
class=
"el-icon-plus"
></i>
新增学生
</el-button>
<el-button
type=
"primary"
size=
"mini"
plain
@
click=
"handleOption('import')"
><i
class=
"el-icon-upload2"
></i>
导入学生
</el-button>
...
...
@@ -27,7 +27,7 @@
<!-- 导入学生 -->
<c-popup
ref=
"i-popup"
title=
"您正在导入学生数据"
>
<import-student
@
close=
"$refs['i-popup'].change()"
@
updateData=
"
init()
"
></import-student>
<import-student
@
close=
"$refs['i-popup'].change()"
@
updateData=
"
updateList
"
></import-student>
</c-popup>
</div>
</template>
...
...
plugins/framework/core/service.js
View file @
3e30b0a7
...
...
@@ -141,7 +141,6 @@ export default class Service {
}
return
promise
;
};
return
_sendTo
(
options
);
}
...
...
plugins/service.js
0 → 100644
View file @
3e30b0a7
/*
* @Author: tangjiale
* @eMail: 932055106@qq.com
* @Date: 2022-06-11 14:08:04
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-11 14:13:27
*/
/**
* http基础类
*/
import
axios
from
'axios'
import
hooks
from
'./framework/core/hook'
let
config
=
require
(
`@/config/
${
process
.
env
.
ENV_CONFIG
||
'pro'
}
.config.json`
);
export
default
{
async
send
(
options
)
{
options
=
{
toastError
:
true
,
...
options
}
options
.
loadingText
&&
hooks
.
callHook
(
'showLoading'
,
options
.
loadingText
)
options
.
headers
=
{
'content-type'
:
options
.
contentType
,
...
options
.
headers
}
//https域名
options
.
url
=
(
options
.
url
.
indexOf
(
'http://'
)
===
0
||
options
.
url
.
indexOf
(
'https://'
)
===
0
)
?
options
.
url
:
(
config
[
options
.
domainKey
||
'baseUrl'
]
+
options
.
url
);
if
(
options
.
downloadFile
||
options
.
playAudio
)
{
// 下载文件
options
.
responseType
=
'blob'
;
}
if
(
options
.
method
===
'get'
)
{
options
.
params
=
options
.
data
;
}
else
{
if
(
options
.
contentType
===
'application/x-www-form-urlencoded'
)
{
let
form
=
new
FormData
();
let
keys
=
Object
.
keys
(
options
.
data
);
keys
.
forEach
(
key
=>
{
form
.
append
(
key
,
options
.
data
[
key
]);
});
options
.
data
=
form
;
}
}
await
hooks
.
callHook
(
'beforeHttp'
,
options
)
return
axios
(
options
).
then
(
res
=>
{
options
.
loadingText
&&
hooks
.
callHook
(
'hideLoading'
)
return
hooks
.
callHook
(
'resolveHttpSuccess'
,
res
,
options
)
}).
catch
(
err
=>
{
console
.
error
(
'request error'
,
err
)
options
.
toastError
&&
hooks
.
callHook
(
'toastError'
,
err
.
message
||
err
.
toString
())
return
hooks
.
callHook
(
'catchHttpError'
,
err
,
options
)
})
},
get
(
options
)
{
options
.
method
=
'get'
;
return
this
.
send
(
options
);
},
postJson
(
options
)
{
options
.
contentType
=
'application/json'
;
return
this
.
post
(
options
);
},
postForm
(
options
)
{
options
.
contentType
=
'application/x-www-form-urlencoded'
;
return
this
.
post
(
options
);
},
post
(
options
)
{
options
.
method
=
'post'
;
return
this
.
send
(
options
);
},
put
(
options
)
{
options
.
method
=
'put'
;
return
this
.
send
(
options
);
},
delete
(
options
)
{
options
.
method
=
'delete'
;
return
this
.
send
(
options
);
}
}
services/base.js
View file @
3e30b0a7
...
...
@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 10:04:50
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
09 11:18:12
* @LastEditTime: 2022-06-
10 17:19:11
*/
export
default
class
BaseService
extends
Service
{
...
...
@@ -66,12 +66,15 @@ export default class BaseService extends Service {
}
//获取用户学校列表
getUserAllSchList
(){
getUserAllSchList
(
param
=
{}
){
return
this
.
get
({
url
:
'/user/getSchList'
,
data
:{}
}).
then
(
res
=>
{
let
list
=
[]
if
(
param
.
all
){
list
.
unshift
({
name
:
'全部'
,
value
:
''
})
}
if
(
res
&&
res
.
length
){
res
.
forEach
(
v
=>
{
list
.
push
({
...
...
@@ -93,6 +96,33 @@ export default class BaseService extends Service {
data
:
param
})
}
//图片上传
upLoadImage
(
param
){
return
this
.
post
({
url
:
'/common/image'
,
data
:
param
})
}
//获取机构职位员工
getSchEmpList
(
param
){
return
this
.
get
({
url
:
'/common/getSchEmpList'
,
data
:
param
}).
then
(
res
=>
{
let
list
=
[]
res
&&
res
.
length
&&
res
.
forEach
(
e
=>
{
list
.
push
({
name
:
e
.
empName
,
value
:
e
.
id
,
empCode
:
e
.
empCode
,
empPosition
:
e
.
empPosition
})
})
return
list
})
}
}
services/course.js
View file @
3e30b0a7
...
...
@@ -3,19 +3,55 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:23:35
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
09 11:30:08
* @LastEditTime: 2022-06-
10 17:56:54
*/
import
service
from
'../plugins/framework/core/service'
export
default
class
CourseService
extends
Service
{
queryStudentList
(
param
){
return
service
.
get
({
url
:
'/student'
,
queryCourseList
(
param
){
return
this
.
get
({
url
:
'/course'
,
data
:
param
})
}
//新增课程
addCourse
(
param
){
return
this
.
post
({
url
:
'/course'
,
data
:
param
})
}
//发布课程
publishCourse
(
param
){
return
this
.
get
({
url
:
'/course/publishCourse'
,
data
:
param
})
}
//删除课程
deleteCourse
(
id
){
return
this
.
delete
({
url
:
`/course/
${
id
}
`
,
data
:
{}
})
}
//编辑课程
emitCourse
(
param
){
return
this
.
put
({
url
:
`/course`
,
data
:
param
})
}
queryCourseDetail
(
id
){
return
this
.
get
({
url
:
`/course/
${
id
}
`
,
data
:
{}
})
}
}
services/student.js
View file @
3e30b0a7
...
...
@@ -3,9 +3,9 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 09:23:35
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
09 15:12:00
* @LastEditTime: 2022-06-
11 14:08:51
*/
import
services
from
'../plugins/service'
export
default
class
StudentService
extends
Service
{
queryStudentList
(
param
){
...
...
@@ -65,5 +65,15 @@ export default class StudentService extends Service {
data
:
param
})
}
//学生导入
downloadRecordImport
(
param
,
config
=
{}){
return
services
.
post
({
url
:
'/student/studentImport'
,
data
:
param
,
progress
:
true
,
...
config
})
}
}
store/index.js
View file @
3e30b0a7
...
...
@@ -3,7 +3,7 @@
* @eMail: 932055106@qq.com
* @Date: 2022-02-11 15:54:33
* @LastEditors: tangjiale
* @LastEditTime: 2022-06-
09 11:03:11
* @LastEditTime: 2022-06-
10 11:28:53
*/
import
Vue
from
'vue'
//配置对象
...
...
@@ -31,7 +31,7 @@ export default {
logout
(
state
)
{
state
.
myUserInfo
=
null
;
sessionStorage
.
removeItem
(
'myUserInfo'
);
location
.
href
=
'/login'
;
location
.
href
=
'/
pxsys/
login'
;
},
//更新理由
updateRoute
(
state
,
list
){
...
...
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