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
dfd0be6e
Commit
dfd0be6e
authored
May 17, 2022
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增待办消息气泡和动态切换消息通知功能
parent
4cf4355a
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1365 additions
and
968 deletions
+1365
-968
business.vue
src/components/todolist/business.vue
+4
-0
contract.vue
src/components/todolist/contract.vue
+1
-0
distribution.vue
src/components/todolist/distribution.vue
+1
-0
graduation.vue
src/components/todolist/graduation.vue
+7
-11
index.vue
src/components/todolist/index.vue
+47
-11
payee.vue
src/components/todolist/payee.vue
+1
-0
students.vue
src/components/todolist/students.vue
+1
-0
todayFollow.vue
src/components/todolist/todayFollow.vue
+2
-0
todoStu.vue
src/components/todolist/todoStu.vue
+1
-0
todoToday.vue
src/components/todolist/todoToday.vue
+1
-0
Work.vue
src/pages/Work.vue
+47
-3
stuList.vue
src/pages/stuMan/stuList.vue
+1249
-943
changeClassManager.vue
src/pages/teacher/changeClassManager.vue
+3
-0
No files found.
src/components/todolist/business.vue
View file @
dfd0be6e
...
...
@@ -50,6 +50,7 @@
:isComponents=
"true"
:billId=
"msg.billId"
:receipt=
"msg.receipt"
@
success=
"refreshPage"
></changeClassManager>
</div>
</div>
...
...
@@ -82,6 +83,9 @@ export default {
}
})
.
catch
(()
=>
{});
},
refreshPage
()
{
this
.
$root
.
$emit
(
"updateTodoList"
);
}
}
};
...
...
src/components/todolist/contract.vue
View file @
dfd0be6e
...
...
@@ -282,6 +282,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
}
}
};
...
...
src/components/todolist/distribution.vue
View file @
dfd0be6e
...
...
@@ -106,6 +106,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/components/todolist/graduation.vue
View file @
dfd0be6e
...
...
@@ -41,15 +41,10 @@
</div>
<div
style=
"height:calc(100% - 158px)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
:outData=
"stus"
:outLoading=
"loading"
:pageSize=
"msg.pageSize"
:isComponent=
"true"
></stulist>
</div>
<div
class=
"row"
style=
"justify-content: flex-end;padding: 5px 20px"
>
...
...
@@ -67,7 +62,7 @@
</
template
>
<
script
>
import
stulist
from
"../
school/student/stulist
"
;
import
stulist
from
"../
../pages/stuMan/stuList.vue
"
;
import
{
getGraduateStudent
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
...
...
@@ -80,7 +75,7 @@ export default {
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
1
2
,
pageSize
:
1
5
,
KeyWords
:
""
}
};
...
...
@@ -110,6 +105,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/components/todolist/index.vue
View file @
dfd0be6e
...
...
@@ -14,7 +14,22 @@
:name=
"x.id.toString()"
:icon=
"`iconfont $
{x.icon}`"
:label="x.name"
>
</q-tab>
content-class="todo-box-tab-class"
>
<div
class=
"col row justify-end"
v-if=
"
childTodoTipList[`$
{x.value}`]
&&
childTodoTipList[`${x.value}`] != 0
"
>
<q-badge
rounded
color=
"red"
:label=
"childTodoTipList[`$
{x.value}`]"
/>
</div>
</q-tab>
</q-tabs>
</div>
<div
class=
"col bg-white rounded-borders full-height"
>
...
...
@@ -80,6 +95,7 @@ import payee from "./payee.vue";
import
business
from
"./business.vue"
;
import
financialDocuments
from
"../../pages/financial/financalDocument/FinancialDocuments.vue"
;
export
default
{
inject
:
[
"todoTipList"
],
components
:
{
todoToday
,
todoStu
,
...
...
@@ -101,67 +117,83 @@ export default {
id
:
1
,
name
:
"今日需联系线索"
,
msg
:
0
,
icon
:
"icon-xiansuo"
icon
:
"icon-xiansuo"
,
value
:
"TodayClueCount"
},
{
id
:
2
,
name
:
"今日需联系学员"
,
msg
:
0
,
icon
:
"icon-xueyuan2"
icon
:
"icon-xueyuan2"
,
value
:
"TodayConnectCount"
},
{
id
:
3
,
name
:
"分配给我的线索"
,
msg
:
0
,
icon
:
"icon-fenpei"
icon
:
"icon-fenpei"
,
value
:
"MyClueCount"
},
{
id
:
4
,
name
:
"分配给我的学员"
,
msg
:
0
,
icon
:
"icon-fenpeijiaose"
icon
:
"icon-fenpeijiaose"
,
value
:
"MyStudentCount"
},
{
id
:
5
,
name
:
"待申领合同"
,
msg
:
0
,
icon
:
"icon-hetong"
icon
:
"icon-hetong"
,
value
:
"MyOrderNotReceiveContractCount"
},
{
id
:
6
,
name
:
"待收款提醒"
,
msg
:
0
,
icon
:
"icon-shoukuan"
icon
:
"icon-shoukuan"
,
value
:
"MyOrderNotBalanceCount"
},
{
id
:
7
,
name
:
"今日被跟进学员"
,
msg
:
0
,
icon
:
"icon-genjin"
icon
:
"icon-genjin"
,
value
:
"TodayFollowCount"
},
{
id
:
8
,
name
:
"即将毕业学员"
,
msg
:
0
,
icon
:
"icon-biyejieye"
icon
:
"icon-biyejieye"
,
value
:
"GraduateStudentCount"
},
{
id
:
9
,
name
:
"待审核财务单据"
,
msg
:
0
,
icon
:
"icon-caiwu1"
icon
:
"icon-caiwu1"
,
value
:
"todoFincal"
},
{
id
:
10
,
name
:
"待审核业务单据"
,
msg
:
0
,
icon
:
"icon-yewu"
icon
:
"icon-yewu"
,
value
:
"NotBusinessBillCount"
}
]
};
},
computed
:
{
childTodoTipList
()
{
return
this
.
todoTipList
.
result
;
}
},
mounted
()
{
this
.
currentMenu
=
this
.
menulist
[
0
].
id
.
toString
();
//console.log(this.todoTipList);
},
methods
:
{}
};
...
...
@@ -175,5 +207,9 @@ export default {
.q-tabs--vertical
.justify-center
,
.q-tabs--vertical
.flex-center
{
justify-content
:
unset
!important
;
width
:
100%
;
}
.todo-box-tab-class
{
width
:
100%
;
}
</
style
>
src/components/todolist/payee.vue
View file @
dfd0be6e
...
...
@@ -108,6 +108,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/components/todolist/students.vue
View file @
dfd0be6e
...
...
@@ -106,6 +106,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/components/todolist/todayFollow.vue
View file @
dfd0be6e
...
...
@@ -87,6 +87,8 @@ export default {
},
mounted
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
//@TODO:添加查询条件
},
methods
:
{
getStudent
()
{
...
...
src/components/todolist/todoStu.vue
View file @
dfd0be6e
...
...
@@ -106,6 +106,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/components/todolist/todoToday.vue
View file @
dfd0be6e
...
...
@@ -106,6 +106,7 @@ export default {
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
...
...
src/pages/Work.vue
View file @
dfd0be6e
...
...
@@ -20,7 +20,15 @@
:color=
"chosenMenu == 7 ? 'primary' : 'blue-grey-14'"
:class=
"[chosenMenu == 7 ? 'text-weight-bold' : '']"
label=
"待办工作"
></q-btn>
>
<q-badge
rounded
color=
"red"
:label=
"todoCount"
v-if=
"todoCount > 0"
floating
/>
</q-btn>
<q-btn
flat
@
click=
"changeMenu(5)"
...
...
@@ -125,7 +133,7 @@
<
script
>
import
{
GetMyNoticePageList
}
from
"../api/course/index"
;
import
{
getTodayStatic
}
from
"../api/stuMan/index"
;
import
teachplan
from
"./course/teacherLesson"
;
import
okr
from
"./okr/index"
;
import
alignView
from
"./okr/okr-align-view"
;
...
...
@@ -164,12 +172,21 @@ export default {
pageSize
:
1
,
LookTime
:
""
},
todoList
:
{
result
:
null
},
todoCount
:
0
,
isShowNotice
:
false
,
noticeObj
:
{},
autoSendTodo
:
null
,
TimeList
:
[]
//存放时间作为比较
};
},
created
()
{},
created
()
{
this
.
$root
.
$on
(
"updateTodoList"
,
this
.
initTodoList
);
},
beforeDestroy
()
{
this
.
$root
.
$off
(
"updateTodoList"
,
this
.
initTodoList
);
clearInterval
(
this
.
autoSendTodo
);
},
mounted
()
{
let
userInfo
=
this
.
getLocalStorage
();
this
.
AccountType
=
userInfo
.
AccountType
;
...
...
@@ -195,8 +212,35 @@ export default {
this
.
noticeMsg
.
LookTime
=
notifyTime
;
}
this
.
getNoticeList
();
this
.
initTodoList
();
this
.
autoSendTodo
=
setInterval
(()
=>
{
this
.
initTodoList
();
},
60
*
1000
);
},
provide
()
{
return
{
todoTipList
:
this
.
todoList
};
},
methods
:
{
initTodoList
()
{
getTodayStatic
().
then
(
r
=>
{
console
.
log
(
r
);
let
d
=
r
.
Data
;
this
.
todoList
.
result
=
d
;
let
tempCount
=
0
;
tempCount
+=
d
.
GraduateStudentCount
;
tempCount
+=
d
.
MyClueCount
;
tempCount
+=
d
.
MyOrderNotBalanceCount
;
tempCount
+=
d
.
MyOrderNotReceiveContractCount
;
tempCount
+=
d
.
MyStudentCount
;
tempCount
+=
d
.
NotBusinessBillCount
;
tempCount
+=
d
.
TodayClueCount
;
tempCount
+=
d
.
TodayConnectCount
;
tempCount
+=
d
.
TodayFollowCount
;
this
.
todoCount
=
tempCount
;
});
},
changeMenu
(
i
)
{
if
(
i
==
1
)
{
this
.
okrMenu
=
1
;
...
...
src/pages/stuMan/stuList.vue
View file @
dfd0be6e
<
style
>
li
{
li
{
list-style-type
:
none
;
}
}
.stuList
ul
{
.stuList
ul
{
padding
:
0px
;
}
}
.stuList
li
{
.stuList
li
{
background
:
rgba
(
221
,
222
,
224
,
0.2
);
border-radius
:
4px
;
margin-top
:
15px
;
}
}
.stuList
li
.dline
{
.stuList
li
.dline
{
display
:
table
;
width
:
100%
;
display
:
flex
;
flex-direction
:
row
;
}
}
.stuList
li
.d1
,
.stuList
li
.d2
,
.stuList
li
.d3
,
.stuList
li
.d4
,
.stuList
li
.d5
{
.stuList
li
.d1
,
.stuList
li
.d2
,
.stuList
li
.d3
,
.stuList
li
.d4
,
.stuList
li
.d5
{
width
:
18%
;
padding
:
20px
20px
10px
;
}
}
.stuList
li
.d7
{
.stuList
li
.d7
{
flex
:
1
;
width
:
1px
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
center
;
}
}
.stuList
li
.d1
.di-title
{
.stuList
li
.d1
.di-title
{
font-size
:
16px
;
color
:
#111111
;
}
}
.stuList
li
.d1
.di-c
{
.stuList
li
.d1
.di-c
{
font-size
:
14px
;
display
:
flex
;
line-height
:
28px
;
color
:
#111111
;
}
}
.stuList
li
.d6
{
.stuList
li
.d6
{
padding
:
10px
20px
;
width
:
100%
;
height
:
inherit
;
position
:
relative
;
border-top
:
1px
solid
#dddee0
;
}
}
.stuList
li
.d6
.progress
{
.stuList
li
.d6
.progress
{
width
:
100%
;
height
:
5px
;
position
:
absolute
;
left
:
0
;
bottom
:
0
;
}
}
.stuList
li
.d2
div
{
.stuList
li
.d2
div
{
margin
:
2px
0
;
font-size
:
14px
;
color
:
#111111
;
}
}
.stuList
li
.d2-n
{
.stuList
li
.d2-n
{
font-size
:
12px
;
color
:
#999999
;
margin-right
:
20px
;
}
}
.stuList
li
.d3
.d3-s
{
.stuList
li
.d3
.d3-s
{
color
:
var
(
--q-color-negative
);
font-weight
:
bold
;
}
}
.stuList
li
.d3
div
{
.stuList
li
.d3
div
{
margin
:
2px
0
;
font-size
:
14px
;
}
}
.stuList
li
.d4
div
{
.stuList
li
.d4
div
{
font-size
:
14px
;
color
:
#111111
;
margin
:
2px
0
;
}
}
.stuList
li
.d5
div
{
.stuList
li
.d5
div
{
font-size
:
14px
;
color
:
#111111
;
margin
:
2px
0
;
}
}
.stuList
.myCourseNName
{
.stuList
.myCourseNName
{
width
:
25px
;
height
:
25px
;
border-radius
:
50%
;
...
...
@@ -108,45 +108,45 @@
text-align
:
center
;
line-height
:
25px
;
background-color
:
#004d40
;
}
}
.stuList
.app-image
{
.stuList
.app-image
{
background-position
:
center
center
;
width
:
50px
;
height
:
50px
;
border-radius
:
0%
;
float
:
left
;
margin-right
:
8px
;
}
}
.Sysuser_Date
.el-input
{
.Sysuser_Date
.el-input
{
width
:
100%
;
border
:
none
;
background-color
:
transparent
;
}
}
.Sysuser_Date
.el-input__inner
{
.Sysuser_Date
.el-input__inner
{
width
:
100%
;
border
:
none
;
background-color
:
transparent
;
}
}
.Sysuser_Date
.el-range-editor
.el-range-input
{
.Sysuser_Date
.el-range-editor
.el-range-input
{
width
:
100%
;
border
:
none
;
background-color
:
transparent
;
}
}
.el-picker-panel
{
.el-picker-panel
{
z-index
:
99999
!important
;
}
}
.syster_qDropdown
.q-btn__wrapper
{
.syster_qDropdown
.q-btn__wrapper
{
padding
:
0
3px
;
min-height
:
0
!important
;
}
}
.editOrderDrawerTop
{
.editOrderDrawerTop
{
width
:
100%
;
height
:
50px
;
display
:
flex
;
...
...
@@ -154,44 +154,77 @@
background-color
:
#f0f5fb
;
padding
:
5px
10px
;
align-items
:
center
;
}
.stics
{
}
.stics
{
padding
:
10px
20px
;
background
:
#DDDEE
0
;
background
:
#dddee
0
;
border-radius
:
4px
;
font-size
:
13px
;
color
:
#000000
;
font-weight
:
bold
}
font-weight
:
bold
;
}
.stics
.stics-name
{
color
:
#2D2D2D
;
.stics
.stics-name
{
color
:
#2d2d2d
;
font-weight
:
600
;
margin-right
:
10px
}
margin-right
:
10px
;
}
</
style
>
<
template
>
<div
class=
"page-body stuList"
>
<div
class=
"row q-mb-md"
v-if=
"source!=1"
>
<div
:class=
"[
{ 'page-body stuList': !isComponent },
{ 'full-height': isComponent }
]"
>
<div
class=
"row q-mb-md"
v-if=
"source != 1 && !isComponent"
>
<q-space></q-space>
<div
style=
"position: relative"
>
<q-btn
color=
"accent"
label=
"高级查询"
@
click=
"IsShowQuery = true"
></q-btn>
<q-btn
color=
"accent"
label=
"高级查询"
@
click=
"IsShowQuery = true"
></q-btn>
<q-badge
floating
rounded
color=
"red"
>
{{
queryNum
}}
</q-badge>
</div>
</div>
<div
v-else
class=
"q-mb-sm"
style=
"font-size:20px"
>
{{
courseName
}}
</div>
<div
class=
"page-search row items-center flex"
>
<div
v-else-if=
"!isComponent"
class=
"q-mb-sm"
style=
"font-size:20px"
>
{{
courseName
}}
</div>
<div
class=
"page-search row items-center flex"
v-if=
"!isComponent"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
@
input=
"changeSchool"
dense
filled
v-model=
"msg.School_Id"
class=
"col-6"
option-label=
"SName"
option-value=
"SId"
:options=
"SchoolList"
emit-value
map-options
label=
"校区"
/>
<q-select
@
input=
"changeSchool"
dense
filled
v-model=
"msg.School_Id"
class=
"col-6"
option-label=
"SName"
option-value=
"SId"
:options=
"SchoolList"
emit-value
map-options
label=
"校区"
/>
</div>
<div
class=
"col-3"
v-if=
"source!=1"
>
<q-select
@
input=
"changeCourse"
dense
filled
v-model=
"msg.CourseId"
class=
"col-6"
option-label=
"CourseName"
option-value=
"CourseId"
use-input
:options=
"CourseList"
@
filter=
"filterCourse"
emit-value
map-options
label=
"课程"
clearable
>
<div
class=
"col-3"
v-if=
"source != 1"
>
<q-select
@
input=
"changeCourse"
dense
filled
v-model=
"msg.CourseId"
class=
"col-6"
option-label=
"CourseName"
option-value=
"CourseId"
use-input
:options=
"CourseList"
@
filter=
"filterCourse"
emit-value
map-options
label=
"课程"
clearable
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
...
...
@@ -202,16 +235,31 @@
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.ClassId"
class=
"col-6"
use-input
@
filter=
"filterClass"
option-label=
"ClassName"
option-value=
"ClassId"
:options=
"classList"
emit-value
map-options
label=
"班级"
clearable
>
<
template
v-slot:option=
"{
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.ClassId"
class=
"col-6"
use-input
@
filter=
"filterClass"
option-label=
"ClassName"
option-value=
"ClassId"
:options=
"classList"
emit-value
map-options
label=
"班级"
clearable
>
<
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>
...
...
@@ -231,12 +279,33 @@
</q-select>
</div>
<div
class=
"col-3"
>
<q-input
@
keyup
.
enter
.
native=
"resetSearch"
clearable
dense
filled
v-model=
"msg.GuestName"
label=
"学员姓名"
@
clear=
"resetSearch"
maxlength=
"20"
/>
<q-input
@
keyup
.
enter
.
native=
"resetSearch"
clearable
dense
filled
v-model=
"msg.GuestName"
label=
"学员姓名"
@
clear=
"resetSearch"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.GuestState"
class=
"col-6"
option-label=
"Name"
option-value=
"Id"
use-input
:options=
"GuestStateList"
emit-value
map-options
label=
"学员状态"
clearable
>
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.GuestState"
class=
"col-6"
option-label=
"Name"
option-value=
"Id"
use-input
:options=
"GuestStateList"
emit-value
map-options
label=
"学员状态"
clearable
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
...
...
@@ -247,13 +316,37 @@
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"getShaixuanFrom()"
dense
filled
clearable
filled
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.CreateType"
:options=
"customFromList"
emit-value
map-options
label=
"客户来源"
/>
<q-select
@
input=
"getShaixuanFrom()"
dense
filled
clearable
filled
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.CreateType"
:options=
"customFromList"
emit-value
map-options
label=
"客户来源"
/>
</div>
<div
class=
"col-3"
v-if=
"msg.CreateType == 1"
>
<q-select
filled
v-model=
"msg.StuChannelId"
@
input=
"resetSearch"
label=
"收客渠道"
:dense=
"false"
:options=
"StuChannelList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
use-input
clearable
@
filter=
"filterStuChannel"
>
<q-select
filled
v-model=
"msg.StuChannelId"
@
input=
"resetSearch"
label=
"收客渠道"
:dense=
"false"
:options=
"StuChannelList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
use-input
clearable
@
filter=
"filterStuChannel"
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
...
...
@@ -264,9 +357,21 @@
</q-select>
</div>
<div
class=
"col-3"
v-if=
"msg.CreateType == 2"
>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
:options=
"customList"
use-input
label=
"关联同行"
@
filter=
"filterFn"
option-label=
"CustomerName"
@
input=
"resetSearch"
clearable
option-value=
"CustomerId"
emit-value
map-options
>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
:options=
"customList"
use-input
label=
"关联同行"
@
filter=
"filterFn"
option-label=
"CustomerName"
@
input=
"resetSearch"
clearable
option-value=
"CustomerId"
emit-value
map-options
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
...
...
@@ -277,52 +382,104 @@
</q-select>
</div>
<div
class=
"col-3"
v-if=
"msg.CreateType == 3"
>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
@
filter=
"filterEmployee"
label=
"介绍人"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
@
input=
"resetSearch"
clearable
option-value=
"Id"
emit-value
map-options
/>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
@
filter=
"filterEmployee"
label=
"介绍人"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
@
input=
"resetSearch"
clearable
option-value=
"Id"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
v-if=
"msg.CreateType == 4"
>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
use-input
@
filter=
"filterStudent"
label=
"转介人"
:options=
"MyTransListData"
option-label=
"StuName"
@
input=
"resetSearch"
clearable
option-value=
"StuId"
emit-value
map-options
/>
<q-select
filled
v-model=
"msg.StuSourceId"
:dense=
"false"
use-input
@
filter=
"filterStudent"
label=
"转介人"
:options=
"MyTransListData"
option-label=
"StuName"
@
input=
"resetSearch"
clearable
option-value=
"StuId"
emit-value
map-options
/>
</div>
</div>
</div>
<div
class=
"col row wrap q-gutter-x-md"
v-if=
"staticObj"
>
<div
class=
"col row wrap q-gutter-x-md"
v-if=
"staticObj
&& !isComponent
"
>
<div
class=
"col stics"
>
<span
class=
"stics-name"
>
正常学员数量
</span>
<span>
{{
staticObj.NormalNum?staticObj.NormalNum:0
}}人
</span>
<span>
{{
staticObj.NormalNum ? staticObj.NormalNum : 0
}}人
</span>
</div>
<div
class=
"col stics"
>
<span
class=
"stics-name"
>
退课学员数量
</span>
<span
style=
"color: #F72E52"
>
{{staticObj.DropOutNum?staticObj.DropOutNum:0}}人
</span>
<span
style=
"color: #F72E52"
>
{{ staticObj.DropOutNum ? staticObj.DropOutNum : 0 }}人
</span
>
</div>
<div
class=
"col stics"
>
<span
class=
"stics-name"
>
停课学员数量
</span>
<span
style=
"color:#2961FE;"
>
{{staticObj.StopClassesNum?staticObj.StopClassesNum:0}}人
</span>
<span
style=
"color:#2961FE;"
>
{{ staticObj.StopClassesNum ? staticObj.StopClassesNum : 0 }}人
</span
>
</div>
<div
class=
"col stics"
>
<span
class=
"stics-name"
>
毕业学员数量
</span>
<span>
{{
staticObj.GraduateNum?staticObj.GraduateNum:0
}}人
</span>
<span>
{{
staticObj.GraduateNum ? staticObj.GraduateNum : 0
}}人
</span>
</div>
</div>
<div
class=
"page-content"
>
<q-table
:pagination=
"msg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-tow-column-table sticky-right-column-table"
separator=
"none"
:data=
"data"
:columns=
"columns"
row-key=
"name"
>
<div
:class=
"[
{ 'page-content': !isComponent },
{ 'full-height': isComponent }
]"
>
<q-table
:pagination=
"msg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-tow-column-table"
:class=
"[
{ 'my-sticky-header-table full-height': isComponent },
{ 'sticky-right-column-table': !isComponent }
]"
separator=
"none"
:data=
"data"
:columns=
"columns"
row-key=
"name"
:hide-bottom=
"isComponent"
>
<
template
v-slot:top
>
<!--
<div
class=
"col-2 q-table__title"
>
学员名单
</div>
-->
</
template
>
<
template
v-slot:body-cell-ContractNo=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeContract(props.row)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeContract(props.row)"
>
{{
props
.
row
.
ContractNo
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-GuestName=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row)"
>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row)"
>
{{
props
.
value
}}
</div>
</q-td>
...
...
@@ -331,70 +488,99 @@
<
template
v-slot:body-cell-StuSourceIdName=
"props"
>
<q-td
:props=
"props"
>
<div>
<span
v-if=
"props.row.CreateType == 2 && props.row.EnterpriseName"
>
{{
props
.
row
.
EnterpriseName
}}
:
</span>
<span
v-if=
"props.row.CreateType == 2 && props.row.EnterpriseName"
>
{{
props
.
row
.
EnterpriseName
}}
:
</span
>
{{
props
.
row
.
StuSourceIdName
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-ClassName=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeClassDetail(props.row)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeClassDetail(props.row)"
>
{{
props
.
row
.
ClassName
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-OrderId=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 1)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 1)"
>
{{
props
.
row
.
OrderId
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-Income=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 4)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 4)"
>
{{
props
.
row
.
Income
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-Refund=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 4)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showOrderDetail(props.row, 4)"
>
{{
props
.
row
.
Refund
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-CompleteHours=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeStudentsClassUse(props.row)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"seeStudentsClassUse(props.row)"
>
{{
props
.
row
.
CompleteHours
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-MakeUpHours=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 1)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 1)"
>
{{
props
.
row
.
MakeUpHours
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-AbsenceNum=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 2)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 2)"
>
{{
props
.
row
.
AbsenceNum
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-LeaveNum=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 3)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showList(props.row, 3)"
>
{{
props
.
row
.
LeaveNum
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-EventlogNum=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showEventLog(props.row)"
>
<div
style=
"color: #f00; cursor: pointer"
@
click=
"showEventLog(props.row)"
>
{{
props
.
row
.
EventlogNum
}}
</div>
</q-td>
...
...
@@ -405,16 +591,41 @@
<
template
v-slot:body-cell-TeacherManager=
"props"
>
<q-td
:props=
"props"
v-html=
"getTeacherManager(props.row)"
></q-td>
</
template
>
<
template
v-slot:body-cell-optioned=
"props"
>
<
template
v-slot:body-cell-optioned=
"props"
v-if=
"!isComponent"
>
<q-td
:props=
"props"
>
<div>
<q-btn
flat
size=
"xs"
color=
"accent"
style=
"font-weight: 400"
label=
"停课"
v-if=
"props.row.GuestState === 1"
@
click=
"ShowStopLesson(props.row)"
/>
<q-btn
flat
size=
"xs"
color=
"accent"
style=
"font-weight: 400"
label=
"转班"
v-if=
"props.row.GuestState === 1"
@
click=
"transferClass(props.row, 1)"
/>
<q-btn-dropdown
flat
size=
"xs"
color=
"dark"
label=
"更多"
style=
"margin-left: 10px"
>
<q-btn
flat
size=
"xs"
color=
"accent"
style=
"font-weight: 400"
label=
"停课"
v-if=
"props.row.GuestState === 1"
@
click=
"ShowStopLesson(props.row)"
/>
<q-btn
flat
size=
"xs"
color=
"accent"
style=
"font-weight: 400"
label=
"转班"
v-if=
"props.row.GuestState === 1"
@
click=
"transferClass(props.row, 1)"
/>
<q-btn-dropdown
flat
size=
"xs"
color=
"dark"
label=
"更多"
style=
"margin-left: 10px"
>
<q-list>
<q-item
dense
clickable
v-close-popup
@
click=
"showAddEvent(props.row)"
>
<q-item
dense
clickable
v-close-popup
@
click=
"showAddEvent(props.row)"
>
<q-item-section>
<q-item-label
overline
>
添加事件
</q-item-label>
</q-item-section>
...
...
@@ -429,72 +640,143 @@
</div>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
<
template
v-if=
"!isComponent"
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</q-table>
</div>
<!-- 高级查询 -->
<MoreQuery
v-if=
"IsShowQuery"
:typeEnum=
"typeEnum"
:warnEnum=
"warnEnum"
:saveQuery=
"msg"
@
close=
"closeHandle"
@
success=
"morequery"
>
<MoreQuery
v-if=
"IsShowQuery"
:typeEnum=
"typeEnum"
:warnEnum=
"warnEnum"
:saveQuery=
"msg"
@
close=
"closeHandle"
@
success=
"morequery"
>
</MoreQuery>
<!-- 停课申请 -->
<StopLesson-form
v-if=
"isShowStopLesson"
:setObj=
"stuObj"
@
success=
"resetSearch"
@
close=
"closeHandle"
/>
<StopLesson-form
v-if=
"isShowStopLesson"
:setObj=
"stuObj"
@
success=
"resetSearch"
@
close=
"closeHandle"
/>
<!-- 转班申请 -->
<transferclass-form
v-if=
"isShowTransferClass"
:save-obj=
"orderObj"
:ChangeType=
"ChangeType"
@
close=
"closeHandle"
@
success=
"resetSearch"
></transferclass-form>
<transferclass-form
v-if=
"isShowTransferClass"
:save-obj=
"orderObj"
:ChangeType=
"ChangeType"
@
close=
"closeHandle"
@
success=
"resetSearch"
></transferclass-form>
<!-- 添加事件 -->
<AddEvent-form
v-if=
"isShowAddEvent"
:setObj=
"eventObj"
@
success=
"resetSearch"
@
close=
"closeHandle"
/>
<AddEvent-form
v-if=
"isShowAddEvent"
:setObj=
"eventObj"
@
success=
"resetSearch"
@
close=
"closeHandle"
/>
<!-- 班级详情 -->
<classinfo-form
v-if=
"isShowClassInfo"
:seting-obj=
"eventObj"
@
close=
"closeHandle"
@
success=
"refreshPage"
/>
<classinfo-form
v-if=
"isShowClassInfo"
:seting-obj=
"eventObj"
@
close=
"closeHandle"
@
success=
"refreshPage"
/>
<!-- 订单详情 -->
<myOrder-form
v-if=
"isShowmyorderForm"
:save-obj=
"eventObj"
@
close=
"closeHandle"
></myOrder-form>
<myOrder-form
v-if=
"isShowmyorderForm"
:save-obj=
"eventObj"
@
close=
"closeHandle"
></myOrder-form>
<!-- 可补课课时,缺勤次数,请假次数 -->
<list
v-if=
"isShowList"
:type=
"showType"
:set-obj=
"eventObj"
@
close=
"closeHandle"
/>
<list
v-if=
"isShowList"
:type=
"showType"
:set-obj=
"eventObj"
@
close=
"closeHandle"
/>
<!-- 事件记录 -->
<eventLog
v-if=
"isShowEventLog"
:set-obj=
"eventObj"
@
modify=
"modifyEvent"
@
close=
"closeHandle"
/>
<studentRight-form
v-if=
"isShowStuRight"
:isJudgeTrans=
"isJudgeTrans"
:BelongType=
"BelongType"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
@
reload=
"refreshStuList"
>
<eventLog
v-if=
"isShowEventLog"
:set-obj=
"eventObj"
@
modify=
"modifyEvent"
@
close=
"closeHandle"
/>
<studentRight-form
v-if=
"isShowStuRight"
:isJudgeTrans=
"isJudgeTrans"
:BelongType=
"BelongType"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
@
reload=
"refreshStuList"
>
</studentRight-form>
<!-- 跳课 -->
<JumpCourse
v-model=
"isShowChangeCourse"
:saveObj=
"ChangeCourseObj"
@
success=
"refreshPage"
></JumpCourse>
<JumpCourse
v-model=
"isShowChangeCourse"
:saveObj=
"ChangeCourseObj"
@
success=
"refreshPage"
></JumpCourse>
</div>
</template>
<
script
>
import
{
import
{
getSchoolDropdown
,
getClassDropDownList
,
getStudentDorpDownList
}
from
"../../api/school/index"
;
import
{
queryCourseDropdownList
}
from
"../../api/course/index"
;
import
{
}
from
"../../api/school/index"
;
import
{
queryCourseDropdownList
}
from
"../../api/course/index"
;
import
{
getStuList
,
getEarlyWarningEnum
,
getTypeEnum
}
from
"../../api/stuMan/index.js"
;
import
{
}
from
"../../api/stuMan/index.js"
;
import
{
queryGuestStateList
,
CreateTypeList
,
GetStuChannelList
,
GetCustomerList
}
from
"../../api/sale/sale.js"
;
import
MoreQuery
from
"../../components/stuMan/moreQuery.vue"
;
import
StopLessonForm
from
"../../components/teacher/stopLessonForm"
;
import
transferclassForm
from
"../../components/sale/transferclass-form"
;
//转班信息
import
AddEventForm
from
"../../components/stuMan/addEvent-form.vue"
;
//转班信息
import
classinfoForm
from
"../../components/course/classinfo-form"
;
//班级详情
import
myOrderForm
from
"../../components/sale/myOrder-form"
;
//订单详情
import
list
from
"../../components/stuMan/makeUpHours.vue"
;
//可补课课时,缺勤次数,请假次数
import
eventLog
from
"../../components/stuMan/eventRecord.vue"
;
//事件记录
import
studentRightForm
from
"../../components/school/student/studentRight-form"
;
import
JumpCourse
from
"../../components/stuMan/jumpCourse"
import
{
queryEmployee
}
from
"../../api/users/user"
;
export
default
{
}
from
"../../api/sale/sale.js"
;
import
MoreQuery
from
"../../components/stuMan/moreQuery.vue"
;
import
StopLessonForm
from
"../../components/teacher/stopLessonForm"
;
import
transferclassForm
from
"../../components/sale/transferclass-form"
;
//转班信息
import
AddEventForm
from
"../../components/stuMan/addEvent-form.vue"
;
//转班信息
import
classinfoForm
from
"../../components/course/classinfo-form"
;
//班级详情
import
myOrderForm
from
"../../components/sale/myOrder-form"
;
//订单详情
import
list
from
"../../components/stuMan/makeUpHours.vue"
;
//可补课课时,缺勤次数,请假次数
import
eventLog
from
"../../components/stuMan/eventRecord.vue"
;
//事件记录
import
studentRightForm
from
"../../components/school/student/studentRight-form"
;
import
JumpCourse
from
"../../components/stuMan/jumpCourse"
;
import
{
queryEmployee
}
from
"../../api/users/user"
;
export
default
{
props
:
{
isComponent
:
{
type
:
Boolean
,
default
:
false
},
outData
:
{
type
:
Array
,
default
:
()
=>
[]
},
pageSize
:
{
type
:
Number
,
default
:
10
},
outLoading
:
{
type
:
Boolean
,
default
:
false
}
},
meta
:
{
title
:
"学员名单"
},
...
...
@@ -538,7 +820,8 @@
StuSourceId
:
""
},
pageCount
:
0
,
columns
:
[{
columns
:
[
{
name
:
"Id"
,
label
:
"编号"
,
field
:
"Id"
,
...
...
@@ -737,13 +1020,6 @@
label
:
"类型"
,
field
:
"JoinTypeStr"
,
align
:
"left"
},
{
name
:
"optioned"
,
label
:
"操作"
,
required
:
true
,
align
:
"left"
}
],
SchoolList
:
[],
...
...
@@ -796,7 +1072,7 @@
courseName
:
""
,
isShowChangeCourse
:
false
,
ChangeCourseObj
:
{},
staticObj
:
{},
//学生统计信息
staticObj
:
{}
//学生统计信息
};
},
created
()
{
...
...
@@ -811,7 +1087,32 @@
this
.
courseName
=
decodeURIComponent
(
this
.
$route
.
query
.
CourseName
);
}
},
watch
:
{
outData
:
{
handler
:
function
(
val
)
{
if
(
this
.
isComponent
)
{
this
.
data
=
val
;
}
},
deep
:
true
},
outLoading
:
{
handler
:
function
(
val
)
{
if
(
this
.
isComponent
)
{
this
.
loading
=
val
;
}
},
deep
:
true
}
},
mounted
()
{
if
(
!
this
.
isComponent
)
{
this
.
columns
.
push
({
name
:
"optioned"
,
label
:
"操作"
,
required
:
true
,
align
:
"left"
});
this
.
getSchool
();
this
.
getCourseList
();
this
.
getClass
();
...
...
@@ -823,6 +1124,11 @@
this
.
GetStuChannelList
();
this
.
GetCustomerList
();
this
.
getEmployeeList
();
}
else
{
this
.
msg
.
rowsPerPage
=
this
.
pageSize
;
this
.
loading
=
this
.
outLoading
;
this
.
data
=
this
.
outData
;
}
},
methods
:
{
//获取收客渠道
...
...
@@ -901,12 +1207,12 @@
},
//筛选客户来源
getShaixuanFrom
()
{
this
.
msg
.
StuSourceId
=
''
this
.
msg
.
StuChannelId
=
''
this
.
msg
.
StuSourceId
=
""
;
this
.
msg
.
StuChannelId
=
""
;
if
(
this
.
msg
.
CreateType
==
4
)
{
this
.
getStudentDorpDown
();
}
this
.
resetSearch
()
this
.
resetSearch
();
},
//获取转介人下拉
getStudentDorpDown
()
{
...
...
@@ -1217,12 +1523,12 @@
this
.
getList
();
},
showChangeCourse
(
item
)
{
this
.
isShowChangeCourse
=
true
this
.
ChangeCourseObj
=
item
this
.
isShowChangeCourse
=
true
;
this
.
ChangeCourseObj
=
item
;
}
}
};
};
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
@import
url('~assets/css/table.sass')
</
style
>
src/pages/teacher/changeClassManager.vue
View file @
dfd0be6e
...
...
@@ -648,6 +648,9 @@ export default {
this
.
isShowAssessmentForm
=
false
;
this
.
billObj
=
{};
this
.
getStuBackBill
();
if
(
this
.
isComponents
)
{
this
.
$emit
(
"success"
);
}
},
//获取下拉数据
getEducationType
()
{
...
...
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