Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
confucius
Project
Project
Details
Activity
Releases
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
罗超
confucius
Commits
fb1b8ce5
Commit
fb1b8ce5
authored
Jul 19, 2021
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
50cf4e48
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1294 additions
and
4 deletions
+1294
-4
student.js
src/api/teacher/student.js
+25
-0
temporaryClass-form.vue
src/components/flow/temporaryClass-form.vue
+355
-0
temporaryClassbill-form.vue
src/components/sale/temporaryClassbill-form.vue
+488
-0
provisionalInviteForm.vue
src/components/teacher/provisionalInviteForm.vue
+407
-0
prepareclassDetails.vue
src/pages/course/prepareclassDetails.vue
+0
-1
processSet.vue
src/pages/system/processSet.vue
+11
-1
changeClassManager.vue
src/pages/teacher/changeClassManager.vue
+0
-1
studentManager.vue
src/pages/teacher/studentManager.vue
+8
-1
No files found.
src/api/teacher/student.js
View file @
fb1b8ce5
...
...
@@ -23,3 +23,28 @@ export function setStopClassApply(data) {
data
})
}
/**
* 临时上课邀请,获取学员列表
* @param {JSON参数} data
*/
export
function
getNotClassStudentList
(
data
)
{
return
request
({
url
:
'/TeacherClass/GetNotClassStudentList'
,
method
:
'post'
,
data
})
}
/**
* 创建临时上课邀请申请单
* @param {JSON参数} data
*/
export
function
setStuInviteApply
(
data
)
{
return
request
({
url
:
'TempInvitationClass/SetStudentTempInvitation'
,
method
:
'post'
,
data
})
}
\ No newline at end of file
src/components/flow/temporaryClass-form.vue
0 → 100644
View file @
fb1b8ce5
<
style
>
.changeClassProcess
{
width
:
350px
;
}
.changeClassProcess
.processList
{
width
:
100%
;
height
:
auto
;
}
.changeClassProcess
.processTop
{
width
:
100%
;
height
:
54px
;
background-color
:
#F1F1F1
;
color
:
#000000
;
text-align
:
center
;
line-height
:
54px
;
border-radius
:
2px
;
cursor
:
pointer
;
position
:
relative
;
}
.changeClassProcess
.processLine
{
width
:
100%
;
height
:
54px
;
background-color
:
#fff
;
color
:
#bbb6b6
;
text-align
:
center
;
line-height
:
54px
;
}
.changeClassProcess
.processLine
i
{
font-size
:
25px
;
font-weight
:
bold
;
}
.changeClassProcess
.otherList
{
background-color
:
#2961FE
!important
;
color
:
#fff
;
font-weight
:
bold
;
}
.changeClassProcess
.process_TwoList
{
display
:
flex
;
background-color
:
#2961FE
!important
;
color
:
#fff
;
font-weight
:
bold
;
align-items
:
center
;
justify-content
:
center
;
}
.changeClassProcess
.process_He
{
width
:
36px
;
height
:
36px
;
background-color
:
#3FC4FF
;
text-align
:
center
;
line-height
:
36px
;
color
:
#fff
;
border-radius
:
50%
;
}
.changeClassProcess
.process_Left
{
width
:
40%
;
height
:
100%
;
text-align
:
right
;
}
.changeClassProcess
.process_center
{
width
:
20%
;
height
:
100%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.changeClassProcess
.process_Right
{
width
:
40%
;
height
:
100%
;
text-align
:
left
;
}
.changeClassProcess
.process_OR
{
background-color
:
#F28C1D
;
}
.changeClassProcess
.addProcessBtn
{
width
:
100%
;
height
:
45px
;
text-align
:
center
;
line-height
:
45px
;
color
:
#2961FE
;
border
:
1px
dashed
#2961FE
;
border-radius
:
2px
;
cursor
:
pointer
;
}
.changeClassProcess
.process_BtnList
{
margin-top
:
30px
;
width
:
100%
;
display
:
flex
;
justify-content
:
center
;
}
.changeClassProcess
.process_BtnOne
{
width
:
90px
;
height
:
38px
;
text-align
:
center
;
line-height
:
38px
;
border-radius
:
2px
;
border
:
1px
solid
#A1AAB2
;
color
:
#000000
;
cursor
:
pointer
;
margin-right
:
50px
;
}
.changeClassProcess
.SetShouSun
{
display
:
inline-block
;
border-radius
:
2px
;
background-color
:
#8175FB
;
color
:
#fff
;
position
:
absolute
;
right
:
10px
;
width
:
60px
;
height
:
27px
;
left
:
0
;
top
:
0
;
line-height
:
27px
;
font-size
:
13px
;
}
.changeClassProcess
.operationDiv
{
position
:
absolute
;
right
:
0
;
top
:
0
;
height
:
30px
;
line-height
:
30px
;
padding-right
:
10px
;
vertical-align
:
top
;
}
.changeClassProcess
.operationDiv
i
:first-child
{
font-size
:
13px
;
}
.changeClassProcess
.operationDiv
i
:hover
{
color
:
red
;
}
.changeClassProcess
.justTwoClass
{
margin-left
:
8px
;
}
</
style
>
<
template
>
<div
class=
"changeClassProcess"
>
<div
class=
"processList"
>
<div
class=
"processTop"
>
发起人
</div>
<div
class=
"processLine"
>
<i
class=
"iconfont icon-down"
></i>
</div>
</div>
<template
v-for=
"(item,index) in flowObj.FlowNodeList"
>
<div
class=
"processList"
@
click=
"getItem(index)"
>
<template
v-if=
"item.FlowAduitList&&item.FlowAduitList.length==1"
>
<div
class=
"processTop otherList"
>
{{
item
.
FlowAduitList
[
0
].
AduitName
}}
<template
v-if=
"item.FlowAduitList&&item.FlowAduitList.length>0 && item.FlowAduitList[0].IsSpecNode==1"
>
<span
class=
"SetShouSun"
>
设定收损
</span>
</
template
>
<div
class=
"operationDiv"
>
<i
class=
"iconfont icon-shanchu"
style=
"position:relative;top:-2px;"
@
click
.
stop=
"DeleteNode(index)"
></i>
<i
style=
"margin:0 8px;"
class=
"iconfont icon-shangyi2"
v-if=
"index!=0"
@
click
.
stop=
"moveDown(index,0)"
></i>
<i
class=
"iconfont icon-xiayi"
:class=
"{'justTwoClass':index==0}"
@
click
.
stop=
"moveDown(index,1)"
v-if=
"index!=flowObj.FlowNodeList.length-1"
></i>
</div>
</div>
<div
class=
"processLine"
v-if=
"index!=flowObj.FlowNodeList.length-1"
>
<i
class=
"iconfont icon-down"
></i>
</div>
</template>
<
template
v-else
>
<div
class=
"processTop process_TwoList"
>
<div
class=
"process_Left"
>
{{
item
.
FlowAduitList
[
0
].
AduitName
}}
</div>
<div
class=
"process_center"
>
<template
v-if=
"item.FlowAduitList[0].AuditWay==2"
>
<div
class=
"process_He"
>
和
</div>
</
template
>
<
template
v-if=
"item.FlowAduitList[0].AuditWay==3"
>
<div
class=
"process_He process_OR"
>
或者
</div>
</
template
>
</div>
<div
class=
"process_Right"
>
<
template
v-for=
"(subItem,subIndex) in item.FlowAduitList"
v-if=
"subIndex>0"
>
{{
subItem
.
AduitName
}}
</
template
>
</div>
<
template
v-if=
"item.FlowAduitList&&item.FlowAduitList.length>0 && item.FlowAduitList[0].IsSpecNode==1"
>
<span
class=
"SetShouSun"
>
设定收损
</span>
</
template
>
<div
class=
"operationDiv"
>
<i
class=
"iconfont icon-shanchu"
style=
"position:relative;top:-2px;"
@
click
.
stop=
"DeleteNode(index)"
></i>
<i
style=
"margin:0 8px;"
class=
"iconfont icon-shangyi2"
v-if=
"index!=0"
@
click
.
stop=
"moveDown(index,0)"
></i>
<i
class=
"iconfont icon-xiayi"
:class=
"{'justTwoClass':index==0}"
@
click
.
stop=
"moveDown(index,1)"
v-if=
"index!=flowObj.FlowNodeList.length-1"
></i>
</div>
</div>
<div
class=
"processLine"
v-if=
"index!=flowObj.FlowNodeList.length-1"
>
<i
class=
"iconfont icon-down"
></i>
</div>
</template>
</div>
</template>
<br
/>
<div
class=
"addProcessBtn"
@
click=
"AddNode"
>
新增节点
</div>
<div
class=
"process_BtnList"
>
<q-btn
label=
"保存"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
@
click=
"setBackClassFlow"
/>
</div>
<process-form
v-if=
"isShowProcess"
:save-obj=
"processObj"
:NodeIndex=
"ChooseNodeIndex"
@
close=
"closeProcessForm"
@
success=
"refreshPage"
:authObj=
"showObj"
>
</process-form>
</div>
</template>
<
script
>
import
processForm
from
'../../components/flow/process-form'
;
import
{
queryBackClassFlow
,
saveBackClassFlow
}
from
'../../api/system/index'
export
default
{
meta
:
{
title
:
""
},
components
:
{
processForm
},
data
()
{
return
{
msg
:
{
FlowId
:
4
},
isShowProcess
:
false
,
//显示旁边弹窗
processObj
:
{},
//传递子组件
flowObj
:
{
FlowId
:
4
,
FlowName
:
"临时上课邀请流程"
,
FlowNodeList
:
[],
//审核节点列表
},
//显示对象
showObj
:
{
isShowShouSun
:
0
,
//不显示收损
},
ChooseNodeIndex
:
0
,
}
},
created
()
{},
mounted
()
{
this
.
getBackClassFlow
();
},
methods
:
{
//新增节点
AddNode
()
{
this
.
flowObj
.
FlowNodeList
.
push
({
FlowId
:
0
,
NodeId
:
0
,
NodeName
:
"新增节点"
,
SortNum
:
0
,
FlowAduitList
:
[{
AduitName
:
"新增节点"
,
AuditType
:
2
,
AuditWay
:
2
,
CheckId
:
0
,
FlowId
:
0
,
IsSpecNode
:
0
,
NodeId
:
8
,
PostType
:
0
,
UserId
:
0
,
}]
});
},
//删除节点
DeleteNode
(
index
)
{
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除该流程'
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
this
.
flowObj
.
FlowNodeList
.
splice
(
index
,
1
);
}).
onCancel
(()
=>
{
});
},
getBackClassFlow
()
{
queryBackClassFlow
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
&&
res
.
Data
)
{
this
.
flowObj
=
res
.
Data
;
}
})
},
//点开旁边
getItem
(
nodeIndex
)
{
this
.
processObj
=
this
.
flowObj
;
this
.
ChooseNodeIndex
=
nodeIndex
;
this
.
isShowProcess
=
true
;
},
//关闭
closeProcessForm
()
{
this
.
isShowProcess
=
false
},
//成功刷新
refreshPage
()
{
this
.
isShowProcess
=
false
;
this
.
getBackClassFlow
();
},
//保存退课流程
setBackClassFlow
()
{
saveBackClassFlow
(
this
.
flowObj
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
'操作成功'
,
position
:
'top'
})
this
.
refreshPage
();
}
})
},
//下移下移
moveDown
(
index
,
IsUp
)
{
var
currentItem
=
this
.
flowObj
.
FlowNodeList
[
index
];
if
(
IsUp
==
0
)
{
if
(
index
>
0
)
{
var
upItem
=
this
.
flowObj
.
FlowNodeList
[
index
-
1
];
this
.
$set
(
this
.
flowObj
.
FlowNodeList
,
index
-
1
,
currentItem
);
this
.
$set
(
this
.
flowObj
.
FlowNodeList
,
index
,
upItem
);
}
}
else
{
if
(
index
!=
this
.
flowObj
.
FlowNodeList
.
length
-
1
)
{
var
downItem
=
this
.
flowObj
.
FlowNodeList
[
index
+
1
];
this
.
$set
(
this
.
flowObj
.
FlowNodeList
,
index
+
1
,
currentItem
);
this
.
$set
(
this
.
flowObj
.
FlowNodeList
,
index
,
downItem
);
}
}
}
}
}
</
script
>
src/components/sale/temporaryClassbill-form.vue
0 → 100644
View file @
fb1b8ce5
<!--临时上课邀请表单审核信息-->
<
style
>
.backbill-Dialog
.drawerTop
{
width
:
100%
;
height
:
50px
;
display
:
flex
;
justify-content
:
space-between
;
background-color
:
#F0F5FB
;
padding
:
5px
10px
;
align-items
:
center
;
}
.backbill-Dialog
.classFirst
{
color
:
#000000
;
font-weight
:
bold
;
}
.backbill-Dialog
.className
{
margin-left
:
10px
;
}
.backbill-Dialog
.classStatus
{
padding
:
3px
8px
;
background-color
:
#c8d7fc
;
color
:
#2961FE
;
font-size
:
12px
;
border-radius
:
2px
;
margin-left
:
20px
;
}
.backbill-Dialog
.normalName
{
color
:
#999999
;
}
.backbill-Dialog
.normalInner
{
color
:
#111111
;
}
.drop_NameDown
{
margin-top
:
20px
;
width
:
300px
;
}
.backinfoContent
{
margin
:
10px
;
padding-bottom
:
80px
;
}
.backinfoContent
.role_Line
{
width
:
3px
;
height
:
11px
;
margin-right
:
10px
;
background-color
:
#3FC4FF
;
display
:
inline-block
;
}
.backinfoContent
.backinfo_Item
{
color
:
#000000
;
font-weight
:
bold
;
}
.backinfoContent
.backInfo_One
{
margin
:
20px
0
;
}
.backinfoContent
.backOtherInfo
{
color
:
#111111
;
}
.backinfoContent
.backInfo_Title
{
display
:
inline-block
;
width
:
75px
;
text-align
:
left
;
color
:
#999999
;
}
.backinfoContent
.replayReason
{
width
:
100%
;
min-height
:
100px
;
background-color
:
#F0F5FB
;
border-radius
:
3px
;
padding
:
20px
;
margin
:
20px
0
;
}
.backinfoContent
.replay_Title
{
font-weight
:
bold
;
color
:
#111111
;
}
.backinfoContent
.chaosong_Peo
{
display
:
inline-block
;
padding
:
2px
3px
;
color
:
#fff
;
border-radius
:
3px
;
margin
:
0
5px
5px
0
;
background-color
:
#9cf
;
}
.backinfoContent
.topBaseInfo
{
/* height: 300px; */
overflow
:
auto
;
}
.topBaseInfo
::-webkit-scrollbar
{
width
:
3px
;
height
:
3px
;
background-color
:
#F5F5F5
;
}
/*!*定义滚动条轨道 内阴影+圆角*!*/
.topBaseInfo
::-webkit-scrollbar-track
{
-webkit-box-shadow
:
inset
0
0
6px
rgba
(
0
,
0
,
0
,
0.3
);
border-radius
:
10px
;
background-color
:
#F5F5F5
;
}
/*!*定义滑块 内阴影+圆角*!*/
.topBaseInfo
::-webkit-scrollbar-thumb
{
border-radius
:
10px
;
-webkit-box-shadow
:
-webkit-gradient
(
linear
,
0
0
,
0
100%
,
color-stop
(
.5
,
rgba
(
255
,
255
,
255
,
.2
)),
color-stop
(
.5
,
transparent
),
to
(
transparent
));
background-color
:
#0ae
;
}
</
style
>
<
template
>
<q-dialog
v-model=
"persistent"
maximized
full-height
seamless
position=
"right"
@
hide=
"closeShenheForm"
>
<q-card
style=
"margin-top:61px;width:850px"
class=
"no-border-radius backbill-Dialog"
>
<div
class=
"drawerTop"
>
<div
style=
"display:flex;align-items:center;"
>
<div
class=
"className"
>
<div
class=
"classFirst"
>
停课审批
</div>
</div>
</div>
</div>
<q-tabs
style=
"margin:15px;"
v-model=
"tabCheck"
narrow-indicator
dense
align=
"left"
class=
"text-primary"
>
<q-tab
:ripple=
"false"
name=
"first"
label=
"详细信息"
/>
<q-tab
:ripple=
"false"
name=
"second"
label=
"审批记录"
/>
</q-tabs>
<div
v-if=
"tabCheck=='first'"
style=
"margin:0 15px;"
>
<div
class=
"backinfoContent"
>
<div>
<div
class=
"topBaseInfo"
>
<div
class=
"backinfo_Item"
>
<span
class=
"role_Line"
></span>
基本信息
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
停课编号:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
Id
}}
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
申请人:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
CreateByName
}}
</span>
</div>
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
学员姓名:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
GuestName
}}
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
申请时间:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
CreateTime
}}
</span>
</div>
</div>
<div
class=
"backinfo_Item"
>
<span
class=
"role_Line"
style=
"background-color:#F28C1D"
></span>
教学信息
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
校区:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
SchoolName
}}
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
班级信息:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
ClassName
}}
<span
style=
"color:#2961FE;cursor:pointer;"
@
click=
"goClassManage(setingObj.DataObj.ClassName)"
>
{{
setingObj
.
ClassNo
}}
</span>
</span>
</div>
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
带班老师:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
TeacherName
}}
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
学习课程:
</span>
<span
class=
"backOtherInfo"
style=
"color:#2961FE;cursor:pointer;"
@
click=
"goCourse(setingObj.DataObj.Order_Guest_ViewModel.CourseName)"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
CourseName
}}
</span>
</div>
</div>
<div
class=
"backinfo_Item"
>
<span
class=
"role_Line"
style=
"background-color:#02C499"
></span>
学习信息
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
总课时:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
TotalPlanNum
}}
课时
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
已学课时:
</span>
<!--
<span
class=
"backOtherInfo"
style=
"color:#2961FE;cursor:pointer;"
@
click=
"goStudentsClassSee(setingObj.DataObj.Order_Guest_ViewModel)"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
Ranks
}}
课时
</span>
-->
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
Ranks
}}
课时
</span>
</div>
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
剩余课时:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
TotalPlanNum
-
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
Ranks
}}
课时
</span>
</div>
</div>
<div
class=
"backinfo_Item"
>
<span
class=
"role_Line"
style=
"background-color:#8175FB"
></span>
其他信息
</div>
<div
class=
"row backInfo_One"
>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
关联单号:
</span>
<span
class=
"backOtherInfo"
style=
"color:#2961FE;cursor:pointer"
@
click=
"goOrderStatic(setingObj.DataObj.Order_Guest_ViewModel.OrderId)"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
OrderId
}}
</span>
</div>
<div
class=
"col-6"
>
<span
class=
"backInfo_Title"
>
关联销售:
</span>
<span
class=
"backOtherInfo"
>
{{
setingObj
.
DataObj
.
Order_Guest_ViewModel
.
EnterName
}}
</span>
</div>
</div>
</div>
<div
class=
"replayReason"
>
<div
class=
"replay_Title"
>
生效日期
</div>
<div
style=
"color:#666666;margin-top:5px;"
class=
"q-mb-md"
>
{{
handleDate
(
setingObj
.
DataObj
.
TakeEffectTime
)
}}
</div>
<div
class=
"replay_Title"
>
停课原因
</div>
<div
style=
"color:#666666;margin-top:5px;"
>
{{
setingObj
.
DataObj
.
Remarks
}}
</div>
</div>
<!--
<template
v-if=
"setingObj.SpecialNode==1"
>
<span>
<q-input
filled
stack-label
:dense=
"false"
v-model=
"stopBillMsg.BackMoney"
class=
"col-12"
label=
"退课金额"
/>
</span>
<span>
系统计算课时费为:
{{
(
classPriceObj
.
ClassHours
-
classPriceObj
.
FinishHours
)
}}
(课时)*
{{
classPriceObj
.
classHourPrice
}}
(课单价)=
{{
classPriceObj
.
backMoney
}}
元,请你最终确认退款金额
</span>
</
template
>
-->
<div
v-if=
"showType==2"
>
<div
style=
"display:flex;justify-content:space-between;align-items:center;margin-top:20px;"
>
<div>
审批意见
</div>
<div>
<q-radio
v-model=
"stopBillMsg.AuditStatus"
:val=
"2"
label=
"通过"
/>
<q-radio
v-model=
"stopBillMsg.AuditStatus"
:val=
"3"
label=
"驳回"
/>
</div>
</div>
<q-input
filled
stack-label
:dense=
"false"
v-model=
"stopBillMsg.Description"
type=
"textarea"
label=
"审批意见"
/>
</div>
<div
style=
"margin-top:20px;"
>
<div
class=
"row"
>
<div
class=
"col-6"
style=
"display:flex;align-items:top;"
>
<
template
v-if=
"tempPeople.length>0"
>
<div
style=
"display:inline-block;width:45px;"
>
抄送:
</div>
<!-- RecipientIds -->
<div
style=
"display:inline-block;margin-left:5px;width:340px;"
>
<span
class=
"chaosong_Peo"
v-for=
"(childItem,cindex) in tempPeople"
>
{{
getName
(
childItem
)
}}
</span>
</div>
</
template
>
</div>
<div
class=
"col-6"
style=
"justify-content: flex-end;display:flex;align-items:center;"
>
<i
class=
"iconfont icon-aite"
style=
"font-size:20px;margin:7px 20px 0 0;cursor:pointer;"
v-if=
"showType==2"
>
<q-popup-proxy>
<q-banner>
<div
style=
"width:350px;"
>
<div
style=
"margin:10px 0 15px 0;"
>
抄送
</div>
<q-select
class=
"col-6 q-pb-lg q-pr-lg"
multiple
clearable
filled
stack-label
use-input
option-value=
"Id"
option-label=
"EmployeeName"
v-model=
"tempPeople"
ref=
"ManagerId"
:options=
"EmployeeList"
label=
"选择人员"
:dense=
"false"
emit-value
map-options
@
filter=
"filterFn"
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
</div>
</q-banner>
</q-popup-proxy>
</i>
<q-btn
class=
"q-mr-md"
label=
"关闭"
@
click=
"closeBackInfo"
/>
<q-btn
v-if=
"showType==2"
color=
"accent q-px-md"
label=
"确认"
@
click=
"saveBackClassInfo()"
/>
</div>
</div>
</div>
</div>
</div>
</div>
<div
v-if=
"tabCheck=='second'"
>
<flowinfoForm
:seting-obj=
"setingObj"
:showType=
"showType"
@
close=
"closeShenheForm"
@
success=
"refreshPage"
>
</flowinfoForm>
</div>
</q-card>
<div
class=
"dialog-out-close"
@
click=
"closeShenheForm"
style=
"height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;"
>
<q-icon
name=
"iconfont icon-jujue1"
size=
"26px"
/>
</div>
</q-dialog>
</template>
<
script
>
import
flowinfoForm
from
'../sale/flowinfo-form'
;
import
{
saveBackBillAduit
,
queryBackBillMoney
}
from
'../../api/sale/bill'
import
{
queryEmployee
}
from
'../../api/users/user'
export
default
{
props
:
{
setingObj
:
{
type
:
Object
,
default
:
null
},
showType
:
{
type
:
Number
,
default
:
1
},
},
components
:
{
flowinfoForm
,
},
data
()
{
return
{
persistent
:
true
,
tabCheck
:
'first'
,
//默认选第一个
stopBillMsg
:
{
Id
:
0
,
// BackMoney: 0, //实际退款金额
Description
:
""
,
//审批意见
AuditStatus
:
2
,
//审核状态
SpecialNode
:
0
,
//是否特殊节点
RecipientIds
:
""
,
//抄送人
},
classPriceObj
:
{},
//课程价格信息
EmployeeList
:
[],
AllemployeeList
:
[],
tempPeople
:
[],
//抄送人数组
}
},
created
()
{
this
.
getEmployee
();
},
mounted
()
{
this
.
stopBillMsg
.
Id
=
this
.
setingObj
.
Id
;
this
.
stopBillMsg
.
SpecialNode
=
this
.
setingObj
.
SpecialNode
;
if
(
this
.
stopBillMsg
.
SpecialNode
==
1
)
{
this
.
getBackBillMoney
();
}
},
methods
:
{
getBackBillMoney
()
{
queryBackBillMoney
({
BackId
:
this
.
setingObj
.
RelationId
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
classPriceObj
=
res
.
Data
;
}
});
},
closeBackInfo
()
{
this
.
persistent
=
false
;
this
.
$emit
(
'close'
);
},
//停课单据审核
saveBackClassInfo
()
{
var
str
=
""
;
if
(
this
.
tempPeople
&&
this
.
tempPeople
.
length
>
0
)
{
this
.
tempPeople
.
forEach
(
item
=>
{
str
+=
","
+
item
;
})
}
if
(
str
&&
str
!=
''
)
{
str
=
str
.
substr
(
1
);
}
this
.
stopBillMsg
.
RecipientIds
=
str
;
saveBackBillAduit
(
this
.
stopBillMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
'审核成功!'
,
position
:
'top'
})
//调用父页面成功方法
this
.
$emit
(
'success'
);
this
.
$emit
(
'close'
);
}
})
},
//获取员工列表
getEmployee
()
{
var
qMsg
=
{
EmployeeName
:
""
}
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
AllemployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
EmployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
}
})
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
EmployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
EmployeeList
=
this
.
AllemployeeList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
//获取员工姓名
getName
(
id
)
{
let
str
=
''
this
.
EmployeeList
.
forEach
(
x
=>
{
if
(
id
==
x
.
Id
)
{
str
=
x
.
EmployeeName
;
}
})
return
str
;
},
//跳转到班级管理
goClassManage
(
ClassName
)
{
this
.
OpenNewUrl
(
'/course/classManage'
,
{
'ClassName'
:
ClassName
})
},
//跳转到报名统计
goOrderStatic
(
OrderId
)
{
this
.
OpenNewUrl
(
'/sale/orderStatistics'
,
{
'OrderId'
:
OrderId
})
},
//跳转到课耗明细
goStudentsClassSee
(
item
){
this
.
OpenNewUrl
(
'/teacher/studentsClassSee'
,
{
StudentId
:
item
.
Id
,
TeacherId
:
item
.
Teacher_Id
,
ClassId
:
item
.
ClassId
,
})
},
//跳转到课程管理
goCourse
(
name
){
this
.
OpenNewUrl
(
'/course/course'
,
{
Name
:
name
})
},
refreshPage
()
{
this
.
persistent
=
false
;
this
.
$emit
(
'success'
);
},
closeShenheForm
()
{
this
.
persistent
=
false
;
this
.
$emit
(
'close'
);
},
handleDate
(
T
){
let
date
=
T
.
split
(
"T"
)
return
date
[
0
]
}
}
}
</
script
>
src/components/teacher/provisionalInviteForm.vue
0 → 100644
View file @
fb1b8ce5
<
style
>
.common_Style
{
display
:
inline-block
;
width
:
30px
;
height
:
30px
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
30px
;
}
.classForm_monday
{
background-color
:
#ced9f8
;
color
:
#2961FE
;
}
.classForm_tuesday
{
background-color
:
#d9f3ff
;
color
:
#3FC4FF
;
}
.classForm_wednesday
{
background-color
:
#f6e2cb
;
color
:
#F28C1D
;
}
.classForm_thursday
{
background-color
:
#ccf3eb
;
color
:
#02C499
;
}
.classForm_friday
{
background-color
:
#f7cfd6
;
color
:
#F72E52
;
}
.classForm_saturday
{
background-color
:
#fff5cc
;
color
:
#FFCC00
;
}
.classForm_sunday
{
background-color
:
#e6e3fe
;
color
:
#8175FB
;
}
.planTimeLi
tbody
::before
{
content
:
''
;
display
:
table-row
;
height
:
20px
;
}
</
style
>
<
template
>
<q-dialog
v-model=
"persistent"
content-class=
"bg-grey-1"
persistent
transition-show=
"scale"
transition-hide=
"scale"
>
<q-card
style=
"width: 1000px;max-width:1000px;"
>
<q-card-section>
<div
class=
"text-h6"
>
创建临时上课邀请申请单
</div>
</q-card-section>
<q-card-section
class=
"q-pt-none"
style=
"height: 80vh"
>
<q-scroll-area
:thumb-style=
"thumbStyle"
:content-style=
"contentStyle"
:content-active-style=
"contentActiveStyle"
class=
"full-width full-height"
>
<div
class=
"row q-col-gutter-lg"
>
<q-select
filled
stack-label
option-value=
"ClassId"
option-label=
"ClassName"
v-model=
"msg.ClassId"
:options=
"classList"
@
input=
"changeClass"
emit-value
map-options
label=
"班级"
class=
"col-6"
use-input
clearable
@
filter=
"filterFn"
>
<template
v-slot:option=
"
{ itemProps, itemEvents, opt, selected, toggleOption }">
<q-item
v-bind=
"itemProps"
v-on=
"itemEvents"
>
<q-item-section>
<q-item-label
v-html=
"opt.ClassName"
></q-item-label>
</q-item-section>
<q-item-section
side
>
<q-item-label
v-html=
"opt.OpenTime"
></q-item-label>
</q-item-section>
</q-item>
</
template
>
</q-select>
<q-input
filled
v-model=
"msg.GuestName"
clearable
class=
"col-6"
label=
"学员姓名"
maxlength=
"200"
>
<
template
v-slot:append
>
<q-icon
name=
"search"
@
click=
"getNotClassStudentList"
@
keyup
.
enter=
"getNotClassStudentList"
/>
</
template
>
</q-input>
</div>
<div
class=
"row items-center q-ma-sm"
>
</div>
<!-- <div class="text-caption q-mb-lg q-px-md text-grey-6">上课时间</div> -->
<q-expansion-item
expand-separator
label=
"上课时间"
:value=
"true"
>
<div
class=
"col"
>
<q-table
no-data-label=
"暂无相关数据"
flat
:pagination=
"pages"
class=
"sticky-column-table sticky-header-column-table"
separator=
"none"
:data=
"currentClass"
:columns=
"columns"
row-key=
"index"
selection=
"multiple"
:selected
.
sync=
"selected"
>
<
template
v-slot:body-cell-TimeList=
"props"
>
<q-td
auto-width
:props=
"props"
>
{{
props
.
row
.
StartTime
}}
-
{{
props
.
row
.
EndTime
}}
</q-td>
</
template
>
<
template
v-slot:bottom
></
template
>
</q-table>
</div>
</q-expansion-item>
<!-- <div class="text-caption q-mb-lg q-px-md text-grey-6">学员列表</div> -->
<q-expansion-item
expand-separator
label=
"学员列表"
:value=
"true"
>
<div
class=
"row items-center"
>
<div
class=
"col"
>
<q-table
no-data-label=
"暂无相关数据"
flat
:pagination=
"pages"
class=
"sticky-column-table sticky-header-column-table "
:data=
"stuList"
:columns=
"stuColumns"
row-key=
"Id"
selection=
"multiple"
:selected
.
sync=
"selectedStu"
>
<
template
v-slot:bottom
></
template
>
</q-table>
</div>
</div>
</q-expansion-item>
<q-input
filled
type=
"textarea"
:rows=
"3"
style=
"margin-top:20px;"
stack-label
maxlength=
"2000"
v-model=
"msg.Remarks"
:dense=
"false"
class=
"col-12 q-pb-lg"
label=
"备注"
/>
</q-scroll-area>
</q-card-section>
<q-separator
/>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
label=
"取消"
flat
color=
"grey-10"
style=
"font-weight:400 !important"
@
click=
"closeSaveForm"
/>
<q-btn
label=
"立即提交"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
:loading=
"saveLoading"
@
click=
"save"
/>
</q-card-actions>
</q-card>
</q-dialog>
</template>
<
script
>
import
{
getClassDropDownList
,
}
from
"../../api/school/index"
;
import
{
getNotClassStudentList
,
setStuInviteApply
}
from
'../../api/teacher/student'
import
Lockr
from
'lockr'
export
default
{
data
()
{
return
{
pages
:
{
rowsPerPage
:
0
},
persistent
:
true
,
saveLoading
:
false
,
contentStyle
:
{},
contentActiveStyle
:
{},
thumbStyle
:
{
right
:
'2px'
,
borderRadius
:
'5px'
,
backgroundColor
:
'#027be3'
,
width
:
'5px'
,
opacity
:
0.75
},
msg
:
{
ClassId
:
0
,
GuestName
:
""
,
Remarks
:
''
//备注
},
selected
:
[],
classList
:
[],
classListAll
:
[],
queryClass
:
{
CourseId
:
0
,
IsAddDefault
:
1
,
SchoolId
:
-
1
,
Teacher_Id
:
0
,
MoreStatus
:
"1,2"
,
IsQuerySurplusPlan
:
1
},
currentClass
:
[],
columns
:
[{
name
:
'RoomName'
,
label
:
'教室名称'
,
field
:
'RoomName'
,
align
:
'left'
,
},
{
name
:
'ClassDate'
,
label
:
'上课日期'
,
field
:
'ClassDate'
,
align
:
'left'
},
{
name
:
'TeacherName'
,
label
:
'老师'
,
field
:
'TeacherName'
,
align
:
'left'
},
{
name
:
'TimeList'
,
label
:
'上课时间'
,
field
:
'TimeList'
,
align
:
'left'
},
],
classSetMsg
:
{
OpenTime
:
''
,
//开班时间
ClassStyle
:
1
,
//排课方式(1-周,2-月,3-固定日期,4-约课)
ClassHours
:
''
,
ClassHourMinute
:
''
,
},
stuList
:
[],
selectedStu
:
[],
stuColumns
:
[{
name
:
'GuestName'
,
label
:
'姓名'
,
field
:
'GuestName'
,
align
:
'left'
},
{
name
:
'Mobile'
,
label
:
'电话'
,
field
:
'Mobile'
,
align
:
'left'
},
{
name
:
'ClassName'
,
label
:
'班级'
,
field
:
'ClassName'
,
align
:
'left'
},
{
name
:
'CourseName'
,
label
:
'课程'
,
field
:
'CourseName'
,
align
:
'left'
},
]
}
},
// watch: {
// selected: {
// handler(val) {
// console.log(302, val)
// },
// deep: true
// },
// selectedStu: {
// handler(val) {
// console.log(353, val)
// },
// deep: true
// }
// },
mounted
()
{
let
u
=
Lockr
.
get
(
"loginUserInfo"
)
if
(
u
)
{
this
.
queryClass
.
Teacher_Id
=
u
.
AccountId
}
this
.
getClass
()
},
methods
:
{
closeSaveForm
()
{
this
.
$emit
(
'close'
)
this
.
persistent
=
false
},
changeClass
(
val
)
{
if
(
!
val
)
{
return
}
this
.
currentClass
=
[]
let
list
=
this
.
classList
.
find
(
x
=>
{
return
x
.
ClassId
==
val
}).
PlanList
list
.
map
(
item
=>
{
item
.
TimeList
.
map
(
_item
=>
{
let
obj
=
JSON
.
parse
(
JSON
.
stringify
(
item
))
delete
obj
.
TimeList
obj
=
{
...
obj
,
...
_item
}
this
.
currentClass
.
push
(
obj
)
})
})
this
.
currentClass
.
forEach
((
e
,
i
)
=>
{
e
.
index
=
i
+
1
})
this
.
getNotClassStudentList
()
},
getClass
()
{
getClassDropDownList
(
this
.
queryClass
).
then
(
res
=>
{
this
.
classList
=
[];
this
.
msg
.
ClassId
=
0
if
(
res
.
Code
==
1
)
{
res
.
Data
.
forEach
(
x
=>
{
x
.
PlanList
.
forEach
(
y
=>
{
let
newPlan
=
JSON
.
parse
(
JSON
.
stringify
(
y
))
y
.
NewPlan
=
newPlan
})
})
this
.
classList
=
res
.
Data
;
this
.
classListAll
=
res
.
Data
;
var
obj
=
{
ClassName
:
'请选择'
,
ClassId
:
0
}
this
.
classList
.
unshift
(
obj
);
}
});
},
//筛选班级
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
classList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
classListAll
))
}
else
{
const
needle
=
val
.
toLowerCase
();
this
.
classList
=
this
.
classListAll
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
);
}
})
},
//获取除本班学生的列表
getNotClassStudentList
()
{
if
(
this
.
msg
.
ClassId
<
0
||
!
this
.
msg
.
ClassId
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
'top'
,
message
:
"请选择班级"
})
return
}
if
(
!
this
.
msg
.
GuestName
)
{
this
.
msg
.
GuestName
=
""
}
let
obj
=
{
ClassId
:
this
.
msg
.
ClassId
,
GuestName
:
this
.
msg
.
GuestName
}
getNotClassStudentList
(
obj
).
then
(
res
=>
{
if
(
res
.
Code
===
1
)
{
this
.
stuList
=
res
.
Data
}
})
},
//提交
save
()
{
if
(
this
.
msg
.
ClassId
<=
0
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
'top'
,
message
:
"请选择班级"
})
return
}
if
(
this
.
selected
.
length
===
0
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
'top'
,
message
:
"至少选择一次上课时间"
})
return
}
if
(
this
.
selectedStu
.
length
===
0
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
'top'
,
message
:
"至少选择一个学员"
})
return
}
let
timesIds
=
this
.
selected
.
map
(
e
=>
{
return
e
.
ClassTimeId
}).
toString
()
let
stuIds
=
this
.
selectedStu
.
map
(
e
=>
{
return
e
.
Id
}).
toString
()
let
obj
=
{
Id
:
0
,
ClassId
:
this
.
msg
.
ClassId
,
ClassTimeIds
:
timesIds
,
OrderGuestIds
:
stuIds
,
Remarks
:
this
.
msg
.
Remarks
}
console
.
log
(
366
,
obj
)
this
.
saveLoading
=
true
setStuInviteApply
(
obj
).
then
(
res
=>
{
this
.
saveLoading
=
false
if
(
res
.
Code
===
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
'操作成功!'
,
position
:
'top'
})
this
.
persistent
=
false
this
.
$emit
(
'success'
)
}
else
{
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
'top'
,
message
:
res
.
Message
})
}
}).
catch
(
err
=>
{
this
.
saveLoading
=
true
})
}
},
}
</
script
>
<
style
>
</
style
>
src/pages/course/prepareclassDetails.vue
View file @
fb1b8ce5
...
...
@@ -765,7 +765,6 @@
},
//修改评论
modifyComment
(
item
)
{
console
.
log
(
item
)
this
.
plmsg
.
LessonCommentId
=
item
.
LessonCommentId
this
.
plmsg
.
Comment
=
item
.
Comment
this
.
plmsg
.
Score
=
item
.
Score
...
...
src/pages/system/processSet.vue
View file @
fb1b8ce5
...
...
@@ -23,6 +23,10 @@
<!-- 转班流程 -->
<transfer-form></transfer-form>
</
template
>
<
template
v-if=
"tabCheck=='5'"
>
<!-- 临时上课邀请流程 -->
<temporaryClass-form></temporaryClass-form>
</
template
>
</div>
</div>
</template>
...
...
@@ -31,6 +35,7 @@
import
changeclassflowForm
from
'../../components/flow/changeclassflow-form'
;
import
stopclassflowForm
from
'../../components/flow/stopclassflow-form'
;
import
transferForm
from
'../../components/flow/transfer-form'
;
import
temporaryClassForm
from
'../../components/flow/temporaryClass-form'
;
export
default
{
meta
:
{
title
:
"流程设置"
...
...
@@ -39,7 +44,8 @@
backclassflowForm
,
changeclassflowForm
,
stopclassflowForm
,
transferForm
transferForm
,
temporaryClassForm
},
data
()
{
return
{
...
...
@@ -58,6 +64,10 @@
{
name
:
"4"
,
label
:
"转班流程"
},
{
name
:
"5"
,
label
:
"临时上课邀请流程"
}
],
tabCheck
:
'1'
,
...
...
src/pages/teacher/changeClassManager.vue
View file @
fb1b8ce5
...
...
@@ -137,7 +137,6 @@
import
stopbillForm
from
'../../components/sale/stopbill-form'
;
import
createbackbillForm
from
'../../components/sale/createbackbill-form'
;
import
ordertransForm
from
'../../components/sale/ordertrans-form'
;
export
default
{
meta
:
{
title
:
"退课单据"
...
...
src/pages/teacher/studentManager.vue
View file @
fb1b8ce5
...
...
@@ -74,6 +74,8 @@
<
template
v-slot:top=
"props"
>
<div
class=
"col-2 q-table__title"
>
学员管理
</div>
<q-space
/>
<q-btn
color=
"accent"
size=
"sm"
class=
"q-mr-md"
label=
"临时上课邀请"
@
click=
"isShowProvisionalInvite=true"
/>
</
template
>
<!--课时-->
<
template
v-slot:body-cell-TotalPlanNum=
"props"
>
...
...
@@ -109,6 +111,7 @@
</
template
>
</q-table>
<StopLesson-form
v-if=
"isShowStopLesson"
:setObj=
"stuObj"
@
success=
"reloadPage"
@
close=
"closeMenuSaveForm"
/>
<ProvisionalInvite-form
v-if=
"isShowProvisionalInvite"
@
close=
"closeMenuSaveForm"
/>
</div>
...
...
@@ -134,6 +137,7 @@
// import classinfoForm from '../../components/course/classinfo-form';
// import othercourseForm from '../../components/course/othercourse-form';
import
StopLessonForm
from
'../../components/teacher/stopLessonForm'
import
ProvisionalInviteForm
from
'../../components/teacher/provisionalInviteForm'
export
default
{
meta
:
{
title
:
"班级管理"
...
...
@@ -142,7 +146,8 @@
// classForm,
// classinfoForm,
// othercourseForm,
StopLessonForm
StopLessonForm
,
ProvisionalInviteForm
},
data
()
{
return
{
...
...
@@ -228,6 +233,7 @@
allClassList
:
[],
isShowStopLesson
:
false
,
stuObj
:{},
isShowProvisionalInvite
:
false
,
}
},
created
()
{
...
...
@@ -381,6 +387,7 @@
//关闭弹窗
closeMenuSaveForm
()
{
this
.
isShowStopLesson
=
false
;
this
.
isShowProvisionalInvite
=
false
;
},
//刷新页面
reloadPage
()
{
...
...
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