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
3fb561df
Commit
3fb561df
authored
Jul 08, 2022
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面修改
parent
5516e5e9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1396 additions
and
1605 deletions
+1396
-1605
stulist.vue
src/components/school/student/stulist.vue
+658
-812
index.vue
src/components/todolist/index.vue
+0
-1
payee.vue
src/components/todolist/payee.vue
+70
-99
Work.vue
src/pages/Work.vue
+0
-1
Scheduling.vue
src/pages/classroom/Scheduling.vue
+187
-231
marketStatistics.vue
src/pages/financial/market/marketStatistics.vue
+450
-447
classPlan.vue
src/pages/stuMan/classPlan.vue
+1
-1
classRecord.vue
src/pages/stuMan/classRecord.vue
+26
-10
assessmentType.vue
src/pages/teacher/assessmentType.vue
+4
-3
No files found.
src/components/school/student/stulist.vue
View file @
3fb561df
<
style
lang=
"scss"
>
.stuList
.q-table__bottom
{
min-height
:
0
;
}
.stuList
.q-table__bottom
{
min-height
:
0
;
}
.stulistNum
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
text-align
:
center
;
line-height
:
23px
;
border
:
1px
solid
#2961fe
;
border-radius
:
50%
;
cursor
:
pointer
;
color
:
#2961fe
;
}
.stulistNum
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
text-align
:
center
;
line-height
:
23px
;
border
:
1px
solid
#2961fe
;
border-radius
:
50%
;
cursor
:
pointer
;
color
:
#2961fe
;
}
.stuListTable
{
width
:
200px
;
text-align
:
center
;
}
.stuListTable
{
width
:
200px
;
text-align
:
center
;
}
.stuListTable
tr
td
{
height
:
40px
;
}
.stuListTable
tr
td
{
height
:
40px
;
}
.stuListTable
tr
th
{
height
:
40px
;
background-color
:
rgb
(
238
,
238
,
239
);
}
.stuListTable
tr
th
{
height
:
40px
;
background-color
:
rgb
(
238
,
238
,
239
);
}
.stulistNumber
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
text-align
:
center
;
line-height
:
22px
;
border
:
1px
solid
#2961fe
;
border-radius
:
50%
;
cursor
:
pointer
;
color
:
#2961fe
;
}
.stulistNumber
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
text-align
:
center
;
line-height
:
22px
;
border
:
1px
solid
#2961fe
;
border-radius
:
50%
;
cursor
:
pointer
;
color
:
#2961fe
;
}
.OCourseTable
{
width
:
600px
;
text-align
:
center
;
}
.OCourseTable
{
width
:
600px
;
text-align
:
center
;
}
.OCourseTable
tr
td
{
height
:
40px
;
}
.OCourseTable
tr
td
{
height
:
40px
;
}
.OCourseTable
tr
th
{
height
:
40px
;
background-color
:
rgb
(
238
,
238
,
239
);
}
.OCourseTable
tr
th
{
height
:
40px
;
background-color
:
rgb
(
238
,
238
,
239
);
}
</
style
>
<
template
>
<div
class=
"stuList"
:style=
"
{ height: height }">
<q-table
:pagination=
"pageMsg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
:selection=
"noSelect ? 'none' : pushMode ? 'multiple' : 'single'"
:selected
.
sync=
"selection"
:style=
"
{ height: height }"
class="sticky-right-column-table sticky-tow-column-table"
:class="{ 'my-sticky-header-table': height != 'unset' }"
separator="none"
:data="dataList"
:columns="columns"
row-key="StuId"
hide-bottom
>
<q-table
:pagination=
"pageMsg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
:selection=
"noSelect ? 'none' : pushMode ? 'multiple' : 'single'"
:selected
.
sync=
"selection"
:style=
"
{ height: height }" class="sticky-right-column-table sticky-tow-column-table"
:class="{ 'my-sticky-header-table': height != 'unset' }" separator="none" :data="dataList" :columns="columns"
row-key="StuId" hide-bottom>
<template
v-if=
"showHeader"
v-slot:top
>
<div
class=
"col-2 q-table__title"
>
学员信息
</div>
<q-space
/>
<div
class=
"page-option"
v-if=
"!pushMode"
>
<q-btn
color=
"accent"
v-if=
"IsTrasferAll()"
outline
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"批量转交"
@
click=
"pushMode = true"
/>
<q-btn
color=
"accent"
outline
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"推送课程顾问"
v-if=
"userInfo.IsCourseConsultant == 0"
@
click=
"pushMode = true"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转订单"
:disable=
"selection.length === 0"
@
click=
"transferOrder"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转留学"
:disable=
"selection.length === 0"
@
click=
"transferAbroad"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"add"
label=
"新增学员"
@
click=
"EditStudent(null)"
/>
<q-btn
v-if=
"authObj && authObj.isShowDownload"
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"download"
label=
"下载"
@
click=
"downloadStudent"
/>
<q-btn
color=
"accent"
v-if=
"IsTrasferAll()"
outline
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"批量转交"
@
click=
"pushMode = true"
/>
<q-btn
color=
"accent"
outline
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"推送课程顾问"
v-if=
"userInfo.IsCourseConsultant == 0"
@
click=
"pushMode = true"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转订单"
:disable=
"selection.length === 0"
@
click=
"transferOrder"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转留学"
:disable=
"selection.length === 0"
@
click=
"transferAbroad"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"add"
label=
"新增学员"
@
click=
"EditStudent(null)"
/>
<q-btn
v-if=
"authObj && authObj.isShowDownload"
color=
"accent"
class=
"q-mr-md"
size=
"sm"
icon=
"download"
label=
"下载"
@
click=
"downloadStudent"
/>
</div>
<div
class=
"page-option"
v-if=
"pushMode"
>
<q-btn
color=
"accent"
unelevated
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转交"
@
click=
"isShowTrans = true"
>
<q-btn
color=
"accent"
unelevated
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"转交"
@
click=
"isShowTrans = true"
>
<q-popup-proxy
:offset=
"[10, 10]"
>
<q-banner
v-if=
"isShowTrans"
>
<q-select
style=
"margin-top:20px;"
filled
v-model=
"transMsg.CreateBy"
@
filter=
"filterEmployee"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
option-value=
"Id"
emit-value
map-options
/>
<q-btn
label=
"保存"
style=
"float:right;margin-top:15px"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"saveTransForm"
/>
<q-select
style=
"margin-top:20px;"
filled
v-model=
"transMsg.CreateBy"
@
filter=
"filterEmployee"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
option-value=
"Id"
emit-value
map-options
/>
<q-btn
label=
"保存"
style=
"float:right;margin-top:15px"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"saveTransForm"
/>
</q-banner>
</q-popup-proxy>
</q-btn>
<q-btn
color=
"accent"
unelevated
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"立即推送"
:loading=
"pushing"
@
click=
"assistBatchHandler"
/>
<q-btn
color=
"accent"
outline
size=
"sm"
label=
"退出"
:disable=
"pushing"
@
click=
"
<q-btn
color=
"accent"
unelevated
class=
"q-mr-md"
size=
"sm"
icon=
"swap_horiz"
label=
"立即推送"
:loading=
"pushing"
@
click=
"assistBatchHandler"
/>
<q-btn
color=
"accent"
outline
size=
"sm"
label=
"退出"
:disable=
"pushing"
@
click=
"
pushMode = false;
selection = [];
"
/>
"
/>
</div>
</
template
>
<
template
v-slot:body-cell-StuIcon=
"props"
>
...
...
@@ -195,32 +103,20 @@
<q-avatar
size=
"md"
v-if=
"props.value"
>
<img
:src=
"props.value"
/>
</q-avatar>
<q-avatar
size=
"md"
color=
"teal-10"
text-color=
"white"
v-if=
"!props.value"
>
{{
props
.
row
.
StuName
.
substring
(
0
,
1
)
}}
</q-avatar
>
<q-avatar
size=
"md"
color=
"teal-10"
text-color=
"white"
v-if=
"!props.value"
>
{{
props
.
row
.
StuName
.
substring
(
0
,
1
)
}}
</q-avatar>
</q-td>
</
template
>
<
template
v-slot:body-cell-StuName=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row, 1)"
>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row, 1)"
>
{{
props
.
value
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-StuSex=
"props"
>
<q-td
:props=
"props"
>
<q-badge
:color=
"props.value == 1 ? 'negative' : 'primary'"
:label=
"props.value == 1 ? '女' : '男'"
/>
<q-badge
:color=
"props.value == 1 ? 'negative' : 'primary'"
:label=
"props.value == 1 ? '女' : '男'"
/>
</q-td>
</
template
>
<
template
v-slot:body-cell-CreateTypeStr=
"props"
>
...
...
@@ -236,9 +132,7 @@
<
template
v-slot:body-cell-StuSourceIdName=
"props"
>
<q-td
:props=
"props"
>
<div
v-if=
"IsShowStuSourceIdName(props.row)"
>
<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>
<div
v-else
>
...
...
@@ -268,21 +162,15 @@
{{
props
.
row
.
AdvisorList
.
length
}}
<q-popup-proxy>
<q-banner>
<table
class=
"OCourseTable"
style=
"border-collapse:collapse;"
>
<table
class=
"OCourseTable"
style=
"border-collapse:collapse;"
>
<tr>
<th>
跟进状态
</th>
<th>
跟进日期
</th>
<th>
跟进比例
</th>
<th>
跟进备注
</th>
</tr>
<tr
v-for=
"(sItem, sIndex) in props.row.AdvisorList"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
<tr
v-for=
"(sItem, sIndex) in props.row.AdvisorList"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
<td>
{{
sItem
.
AdvisorStatusName
}}
</td>
<td>
{{
sItem
.
AdvisorDate
}}
</td>
<td>
{{
sItem
.
AdvisorRate
}}
</td>
...
...
@@ -305,21 +193,10 @@
<q-td
:props=
"props"
v-html=
"getCurseManager(props.row)"
></q-td>
</
template
>
<
template
v-slot:body-cell-OrderCount=
"props"
>
<q-td
:props=
"props"
v-if=
"!props.row.OrderCount || props.row.OrderCount == 0"
class=
"text-grey-4"
>
未报名
</q-td
>
<q-td
:props=
"props"
v-if=
"props.row.OrderCount > 0"
class=
"bg-negative text-white"
style=
"cursor:pointer;text-decoration:underline;"
@
click=
"getStuRight(props.row, 3)"
>
已报名
{{
props
.
row
.
OrderCount
}}
单
</q-td
>
<q-td
:props=
"props"
v-if=
"!props.row.OrderCount || props.row.OrderCount == 0"
class=
"text-grey-4"
>
未报名
</q-td>
<q-td
:props=
"props"
v-if=
"props.row.OrderCount > 0"
class=
"bg-negative text-white"
style=
"cursor:pointer;text-decoration:underline;"
@
click=
"getStuRight(props.row, 3)"
>
已报名
{{
props
.
row
.
OrderCount
}}
单
</q-td>
</
template
>
<
template
v-slot:body-cell-TeacherManager=
"props"
>
<q-td
:props=
"props"
v-html=
"getTeacherManager(props.row)"
></q-td>
...
...
@@ -337,21 +214,14 @@
<q-popup-proxy>
<q-banner>
<div
style=
"max-height:600px;overflow-y:auto;"
>
<table
class=
"stuListTable"
style=
"border-collapse:collapse;"
>
<table
class=
"stuListTable"
style=
"border-collapse:collapse;"
>
<tr>
<th>
角色
</th>
<th>
协同人
</th>
</tr>
<tr
v-for=
"(sItem, sIndex) in assistListFormat[
<tr
v-for=
"(sItem, sIndex) in assistListFormat[
props.pageIndex
]"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
]"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
<td>
{{
sItem
.
AssistTypeName
}}
</td>
<td>
{{
sItem
.
AssistName
}}
</td>
</tr>
...
...
@@ -368,384 +238,430 @@
</q-td>
</template>
</q-table>
<student-form
v-if=
"isShowStuForm"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
<student-form
v-if=
"isShowStuForm"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
</student-form>
<studentRight-form
v-if=
"isShowStuRight"
:isJudgeTrans=
"isJudgeTrans"
:BelongType=
"BelongType"
:checkType=
"checkType"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
@
reload=
"referDataHandler"
>
<studentRight-form
v-if=
"isShowStuRight"
:isJudgeTrans=
"isJudgeTrans"
:BelongType=
"BelongType"
:checkType=
"checkType"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
@
reload=
"referDataHandler"
>
</studentRight-form>
<studentAdd-form
v-if=
"isShowAdd"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
<studentAdd-form
v-if=
"isShowAdd"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
</studentAdd-form>
<transfer-order
v-if=
"isShowTransfer"
:select=
"selection"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
<transfer-order
v-if=
"isShowTransfer"
:select=
"selection"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
</transfer-order>
<abroad-form
v-if=
"isShowAbroad"
:select=
"selection"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
></abroad-form>
<abroad-form
v-if=
"isShowAbroad"
:select=
"selection"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
></abroad-form>
</div>
</template>
<
script
>
import
studentForm
from
"./student-form"
;
import
studentRightForm
from
"./studentRight-form"
;
import
studentAddForm
from
"./studentAdd-form"
;
import
transferOrder
from
"./transfer-order"
;
import
abroadForm
from
"./abroad-form"
;
import
{
mapGetters
}
from
"vuex"
;
import
{
SetStudentAssistBatch
,
BatchForwardStudent
}
from
"../../../api/sale/sale"
;
import
{
EduDownLoad
}
from
"../../../api/common/common"
;
import
{
queryEmployee
}
from
"../../../api/users/user"
;
import
studentForm
from
"./student-form"
;
import
studentRightForm
from
"./studentRight-form"
;
import
studentAddForm
from
"./studentAdd-form"
;
import
transferOrder
from
"./transfer-order"
;
import
abroadForm
from
"./abroad-form"
;
import
{
mapGetters
}
from
"vuex"
;
import
{
SetStudentAssistBatch
,
BatchForwardStudent
}
from
"../../../api/sale/sale"
;
import
{
EduDownLoad
}
from
"../../../api/common/common"
;
import
{
queryEmployee
}
from
"../../../api/users/user"
;
export
default
{
props
:
{
//数据列表
dataList
:
{
type
:
Array
,
default
:
null
export
default
{
props
:
{
//数据列表
dataList
:
{
type
:
Array
,
default
:
null
},
//是否显示转交按钮
isJudgeTrans
:
{
type
:
Number
,
default
:
null
},
loading
:
{
type
:
Boolean
,
default
:
false
},
//权限验证
authObj
:
{
type
:
Object
,
default
:
null
},
//查询参数
queryMsg
:
{
type
:
Object
,
default
:
null
},
showHeader
:
{
type
:
Boolean
,
default
:
true
},
height
:
{
type
:
String
,
default
:
"unset"
},
noSelect
:
{
type
:
Boolean
,
default
:
false
}
},
//是否显示转交按钮
isJudgeTrans
:
{
type
:
Number
,
default
:
null
components
:
{
studentForm
,
studentRightForm
,
studentAddForm
,
transferOrder
,
abroadForm
},
loading
:
{
type
:
Boolean
,
default
:
false
data
()
{
return
{
columns
:
[{
name
:
"StuIcon"
,
label
:
""
,
field
:
"StuIcon"
,
align
:
"left"
},
{
name
:
"StuName"
,
required
:
true
,
label
:
"昵称"
,
align
:
"left"
,
field
:
row
=>
row
.
StuName
},
{
name
:
"CurseManager"
,
label
:
"课程顾问"
,
align
:
"left"
},
{
name
:
"TeacherManager"
,
label
:
"协助老师"
,
align
:
"left"
},
{
name
:
"OrderCount"
,
label
:
"是否报名"
,
align
:
"left"
},
{
name
:
"VisitCount"
,
label
:
"到访次数"
,
field
:
"VisitCount"
,
align
:
"left"
},
{
name
:
"TrialLessonCount"
,
label
:
"试听次数"
,
field
:
"TrialLessonCount"
,
align
:
"left"
},
{
name
:
"StuSex"
,
label
:
"性别"
,
field
:
"StuSex"
,
align
:
"left"
},
{
name
:
"StuTel"
,
label
:
"电话"
,
field
:
"StuTel"
,
align
:
"left"
},
{
name
:
"QQ"
,
label
:
"QQ"
,
field
:
"QQ"
,
align
:
"left"
},
{
name
:
"WeChatNo"
,
label
:
"微信"
,
field
:
"WeChatNo"
,
align
:
"left"
},
{
name
:
"StuTypeName"
,
label
:
"客户类型"
,
field
:
"StuTypeName"
,
align
:
"left"
},
{
name
:
"StuStageName"
,
label
:
"客户阶段"
,
field
:
"StuStageName"
,
align
:
"left"
},
{
name
:
"StuNeedsName"
,
label
:
"客户需求"
,
field
:
"StuNeedsName"
,
align
:
"left"
},
{
name
:
"AdvisorExpectDate"
,
label
:
"期望达成协议日期"
,
field
:
"AdvisorExpectDate"
,
align
:
"left"
},
{
name
:
"AdvisorStatusName"
,
label
:
"目前状态"
,
field
:
"AdvisorStatusName"
,
align
:
"left"
},
{
name
:
"AdvisorWinRate"
,
label
:
"胜率"
,
field
:
"AdvisorWinRate"
,
align
:
"left"
},
{
name
:
"AdvisorList"
,
label
:
"跟踪记录"
,
field
:
"AdvisorList"
,
align
:
"left"
},
{
name
:
"StuProfession"
,
label
:
"职业"
,
field
:
"StuProfession"
,
align
:
"left"
},
{
name
:
"StuEducationName"
,
label
:
"学历"
,
field
:
"StuEducationName"
,
align
:
"left"
},
{
name
:
"StuPurposeName"
,
label
:
"目的"
,
field
:
"StuPurposeName"
,
align
:
"left"
},
{
name
:
"AssistList"
,
label
:
"其他服务人员"
,
align
:
"left"
,
field
:
"AssistList"
},
{
name
:
"CreateTypeStr"
,
label
:
"客户来源"
,
field
:
"CreateTypeStr"
,
align
:
"left"
},
{
name
:
"StuSourceIdName"
,
label
:
"来源关联人"
,
field
:
"StuSourceIdName"
,
align
:
"left"
},
{
name
:
"StuChannelName"
,
label
:
"收客渠道"
,
field
:
"StuChannelName"
,
align
:
"left"
},
{
name
:
"CreateTimeStr"
,
label
:
"创建时间"
,
field
:
"CreateTimeStr"
,
align
:
"left"
},
{
name
:
"CreateByName"
,
label
:
"负责人"
,
align
:
"left"
,
field
:
"CreateByName"
}
],
pageMsg
:
{
rowsPerPage
:
12
},
isShowStuForm
:
false
,
resetLoading
:
false
,
isShowStuRight
:
false
,
stuOption
:
null
,
isShowAdd
:
false
,
selection
:
[],
isShowTransfer
:
false
,
//是否显示转订单弹窗
BelongType
:
1
,
pushMode
:
false
,
//是否显示推送按钮
pushing
:
false
,
assistListFormat
:
[],
checkType
:
1
,
//打开右侧弹窗类型
isShowAbroad
:
false
,
//是否显示转留学就业订单弹窗
userInfo
:
{},
//当前登录人员
isShowTrans
:
false
,
transMsg
:
{
StuIds
:
""
,
CreateBy
:
""
},
//员工列表
employeeList
:
[],
myEmployeeList
:
[]
};
},
//权限验证
authObj
:
{
type
:
Object
,
default
:
null
watch
:
{
dataList
:
{
handler
(
val
)
{
this
.
selection
=
[];
this
.
formatAssistList
();
},
deep
:
true
}
},
//查询参数
queryMsg
:
{
type
:
Object
,
default
:
null
created
()
{
this
.
userInfo
=
this
.
getLocalStorage
();
this
.
formatAssistList
();
},
showHeader
:
{
type
:
Boolean
,
default
:
true
mounted
()
{
this
.
getEmployeeList
();
},
height
:
{
type
:
String
,
default
:
"unset"
computed
:
{
...
mapGetters
([
"logo"
,
"name"
])
},
noSelect
:
{
type
:
Boolean
,
default
:
false
}
},
components
:
{
studentForm
,
studentRightForm
,
studentAddForm
,
transferOrder
,
abroadForm
},
data
()
{
return
{
columns
:
[
{
name
:
"StuIcon"
,
label
:
""
,
field
:
"StuIcon"
,
align
:
"left"
},
{
name
:
"StuName"
,
required
:
true
,
label
:
"昵称"
,
align
:
"left"
,
field
:
row
=>
row
.
StuName
},
{
name
:
"CurseManager"
,
label
:
"课程顾问"
,
align
:
"left"
},
{
name
:
"TeacherManager"
,
label
:
"协助老师"
,
align
:
"left"
},
{
name
:
"OrderCount"
,
label
:
"是否报名"
,
align
:
"left"
},
{
name
:
"VisitCount"
,
label
:
"到访次数"
,
field
:
"VisitCount"
,
align
:
"left"
},
{
name
:
"TrialLessonCount"
,
label
:
"试听次数"
,
field
:
"TrialLessonCount"
,
align
:
"left"
},
{
name
:
"StuSex"
,
label
:
"性别"
,
field
:
"StuSex"
,
align
:
"left"
},
{
name
:
"StuTel"
,
label
:
"电话"
,
field
:
"StuTel"
,
align
:
"left"
},
{
name
:
"QQ"
,
label
:
"QQ"
,
field
:
"QQ"
,
align
:
"left"
},
{
name
:
"WeChatNo"
,
label
:
"微信"
,
field
:
"WeChatNo"
,
align
:
"left"
},
{
name
:
"StuTypeName"
,
label
:
"客户类型"
,
field
:
"StuTypeName"
,
align
:
"left"
},
{
name
:
"StuStageName"
,
label
:
"客户阶段"
,
field
:
"StuStageName"
,
align
:
"left"
},
{
name
:
"StuNeedsName"
,
label
:
"客户需求"
,
field
:
"StuNeedsName"
,
align
:
"left"
},
{
name
:
"AdvisorExpectDate"
,
label
:
"期望达成协议日期"
,
field
:
"AdvisorExpectDate"
,
align
:
"left"
},
{
name
:
"AdvisorStatusName"
,
label
:
"目前状态"
,
field
:
"AdvisorStatusName"
,
align
:
"left"
},
{
name
:
"AdvisorWinRate"
,
label
:
"胜率"
,
field
:
"AdvisorWinRate"
,
align
:
"left"
},
{
name
:
"AdvisorList"
,
label
:
"跟踪记录"
,
field
:
"AdvisorList"
,
align
:
"left"
},
{
name
:
"StuProfession"
,
label
:
"职业"
,
field
:
"StuProfession"
,
align
:
"left"
},
{
name
:
"StuEducationName"
,
label
:
"学历"
,
field
:
"StuEducationName"
,
align
:
"left"
},
{
name
:
"StuPurposeName"
,
label
:
"目的"
,
field
:
"StuPurposeName"
,
align
:
"left"
},
{
name
:
"AssistList"
,
label
:
"其他服务人员"
,
align
:
"left"
,
field
:
"AssistList"
},
{
name
:
"CreateTypeStr"
,
label
:
"客户来源"
,
field
:
"CreateTypeStr"
,
align
:
"left"
},
{
name
:
"StuSourceIdName"
,
label
:
"来源关联人"
,
field
:
"StuSourceIdName"
,
align
:
"left"
},
{
name
:
"StuChannelName"
,
label
:
"收客渠道"
,
field
:
"StuChannelName"
,
align
:
"left"
},
{
name
:
"CreateTimeStr"
,
label
:
"创建时间"
,
field
:
"CreateTimeStr"
,
align
:
"left"
},
{
name
:
"CreateByName"
,
label
:
"负责人"
,
align
:
"left"
,
field
:
"CreateByName"
methods
:
{
//是否有查看客户来源和来源关联人权限
IsShowStuSourceIdName
(
item
)
{
var
isHaveAuth
=
false
;
if
(
this
.
userInfo
&&
this
.
userInfo
.
ActionMenuList
&&
this
.
userInfo
.
ActionMenuList
.
length
>
0
)
{
this
.
userInfo
.
ActionMenuList
.
forEach
(
x
=>
{
if
(
x
.
FunctionCode
==
"Look_StuSourceId"
)
{
isHaveAuth
=
true
;
}
});
}
if
(
item
.
CreateBy
==
this
.
userInfo
.
Id
||
isHaveAuth
)
{
return
true
;
}
else
{
return
false
;
}
],
pageMsg
:
{
rowsPerPage
:
12
},
isShowStuForm
:
false
,
resetLoading
:
false
,
isShowStuRight
:
false
,
stuOption
:
null
,
isShowAdd
:
false
,
selection
:
[],
isShowTransfer
:
false
,
//是否显示转订单弹窗
BelongType
:
1
,
pushMode
:
false
,
//是否显示推送按钮
pushing
:
false
,
assistListFormat
:
[],
checkType
:
1
,
//打开右侧弹窗类型
isShowAbroad
:
false
,
//是否显示转留学就业订单弹窗
userInfo
:
{},
//当前登录人员
isShowTrans
:
false
,
transMsg
:
{
StuIds
:
""
,
CreateBy
:
""
//是否有批量转移权限
IsTrasferAll
()
{
var
isHaveAuth
=
false
;
if
(
this
.
userInfo
&&
this
.
userInfo
.
ActionMenuList
&&
this
.
userInfo
.
ActionMenuList
.
length
>
0
)
{
this
.
userInfo
.
ActionMenuList
.
forEach
(
x
=>
{
if
(
x
.
FunctionCode
==
"IsTranserAll"
)
{
isHaveAuth
=
true
;
}
});
}
return
isHaveAuth
;
},
//员工列表
employeeList
:
[],
myEmployeeList
:
[]
};
},
watch
:
{
dataList
:
{
handler
(
val
)
{
this
.
selection
=
[];
this
.
formatAssistList
();
//下载文件
downloadStudent
()
{
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
queryMsg
));
EduDownLoad
(
"/User/DownLoadStudent"
,
msg
,
"客户资料.xls"
);
},
deep
:
true
}
},
created
()
{
this
.
userInfo
=
this
.
getLocalStorage
();
this
.
formatAssistList
();
},
mounted
()
{
this
.
getEmployeeList
();
},
computed
:
{
...
mapGetters
([
"logo"
,
"name"
])
},
methods
:
{
//是否有查看客户来源和来源关联人权限
IsShowStuSourceIdName
(
item
)
{
var
isHaveAuth
=
false
;
if
(
this
.
userInfo
&&
this
.
userInfo
.
ActionMenuList
&&
this
.
userInfo
.
ActionMenuList
.
length
>
0
)
{
this
.
userInfo
.
ActionMenuList
.
forEach
(
x
=>
{
if
(
x
.
FunctionCode
==
"Look_StuSourceId"
)
{
isHaveAuth
=
true
;
//服务人员转化
formatAssistList
()
{
this
.
assistListFormat
=
[];
this
.
dataList
.
forEach
(
x
=>
{
let
tempArr
=
[];
if
(
x
.
AssistList
&&
x
.
AssistList
.
length
>
0
)
{
x
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
!=
2
&&
y
.
AssistType
!=
4
)
{
tempArr
.
push
(
y
);
}
});
}
this
.
assistListFormat
.
push
(
tempArr
);
});
}
if
(
item
.
CreateBy
==
this
.
userInfo
.
Id
||
isHaveAuth
)
{
return
true
;
}
else
{
return
false
;
}
},
//是否有批量转移权限
IsTrasferAll
()
{
var
isHaveAuth
=
false
;
if
(
this
.
userInfo
&&
this
.
userInfo
.
ActionMenuList
&&
this
.
userInfo
.
ActionMenuList
.
length
>
0
)
{
this
.
userInfo
.
ActionMenuList
.
forEach
(
x
=>
{
if
(
x
.
FunctionCode
==
"IsTranserAll"
)
{
isHaveAuth
=
true
;
}
},
//创建账号
createAccount
(
id
)
{
let
that
=
this
;
createStudentAccount
({
StuId
:
id
}).
then
(
res
=>
{
that
.
$q
.
dialog
({
title
:
"创建账号"
,
message
:
res
.
Message
,
persistent
:
true
,
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
}
})
.
onOk
(()
=>
{
that
.
getStudent
();
})
.
onCancel
(()
=>
{
that
.
getStudent
();
});
});
}
return
isHaveAuth
;
},
//下载文件
downloadStudent
()
{
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
queryMsg
));
EduDownLoad
(
"/User/DownLoadStudent"
,
msg
,
"客户资料.xls"
);
},
//服务人员转化
formatAssistList
()
{
this
.
assistListFormat
=
[];
this
.
dataList
.
forEach
(
x
=>
{
let
tempArr
=
[];
if
(
x
.
AssistList
&&
x
.
AssistList
.
length
>
0
)
{
x
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
!=
2
&&
y
.
AssistType
!=
4
)
{
tempArr
.
push
(
y
);
},
resetPw
(
id
)
{
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"重置密码"
,
message
:
"你正在进行重置密码行为,是否确认执行"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认重置"
,
flat
:
true
,
focus
:
true
}
})
.
onOk
(()
=>
{
that
.
resetLoading
=
true
;
resetPassword
({
AccountType
:
4
,
AccountId
:
id
})
.
then
(
res
=>
{
that
.
resetLoading
=
false
;
that
.
$q
.
dialog
({
title
:
"密码重置成功"
,
message
:
res
.
Message
,
persistent
:
true
,
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
}
});
})
.
catch
(()
=>
{
that
.
resetLoading
=
false
;
});
});
}
this
.
assistListFormat
.
push
(
tempArr
);
});
},
//创建账号
createAccount
(
id
)
{
let
that
=
this
;
createStudentAccount
({
StuId
:
id
}).
then
(
res
=>
{
that
.
$q
},
//删除客户资料
deleteStudentInfo
(
obj
)
{
let
that
=
this
;
var
str
=
obj
.
Status
==
1
?
"【禁用】"
:
"【启用】"
;
this
.
$q
.
dialog
({
title
:
"创建账号
"
,
message
:
res
.
Message
,
title
:
str
+
"学员
"
,
message
:
"你正在进行"
+
str
+
"学员行为,一旦执行无法找回,是否确认执行?"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认"
,
flat
:
true
,
...
...
@@ -753,266 +669,196 @@ export default {
}
})
.
onOk
(()
=>
{
that
.
getStudent
();
that
.
resetLoading
=
true
;
deleteStudent
({
StuId
:
obj
.
StuId
,
Status
:
obj
.
Status
}).
then
(
res
=>
{
this
.
$q
.
notify
({
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
"数据操作成功!"
,
position
:
"top"
});
this
.
getStudent
();
});
})
.
onCancel
(()
=>
{
that
.
getStudent
()
;
obj
.
Status
=
obj
.
Status
==
1
?
0
:
1
;
});
});
},
resetPw
(
id
)
{
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"重置密码"
,
message
:
"你正在进行重置密码行为,是否确认执行"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认重置"
,
flat
:
true
,
focus
:
true
}
})
.
onOk
(()
=>
{
that
.
resetLoading
=
true
;
resetPassword
({
AccountType
:
4
,
AccountId
:
id
})
.
then
(
res
=>
{
that
.
resetLoading
=
false
;
that
.
$q
.
dialog
({
title
:
"密码重置成功"
,
message
:
res
.
Message
,
persistent
:
true
,
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
},
//刷新列表
refreshStuList
()
{
this
.
$emit
(
"success"
);
this
.
selection
=
[];
},
EditStudent
(
obj
)
{
if
(
obj
)
{
this
.
stuOption
=
obj
;
}
else
{
this
.
stuOption
=
null
;
}
this
.
isShowAdd
=
true
;
},
closeStuForm
()
{
this
.
isShowStuForm
=
false
;
this
.
isShowStuRight
=
false
;
this
.
isShowAdd
=
false
;
this
.
isShowTransfer
=
false
;
this
.
isShowAbroad
=
false
;
},
//点击学生姓名弹出
getStuRight
(
obj
,
type
)
{
if
(
obj
)
{
this
.
stuOption
=
obj
;
this
.
BelongType
=
obj
.
BelongType
;
this
.
checkType
=
type
;
}
else
{
this
.
stuOption
=
null
;
}
this
.
isShowStuRight
=
true
;
},
//转订单
transferOrder
()
{
const
firstId
=
this
.
selection
[
0
].
CustomerId
;
const
flag
=
this
.
selection
.
every
(
e
=>
{
return
e
.
CustomerId
==
firstId
;
});
if
(
!
flag
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
`所属同行不一致,请重新选择`
});
return
;
}
this
.
isShowTransfer
=
true
;
},
//转留学
transferAbroad
()
{
this
.
isShowAbroad
=
true
;
},
getCurseManager
(
row
)
{
let
managerName
=
"<span class='text-grey-4'>暂未推送</span>"
;
if
(
row
.
AssistList
&&
row
.
AssistList
.
length
>
0
)
{
row
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
2
)
{
managerName
=
`<span class='text-dark'>
${
y
.
AssistName
}
</span>`
;
}
});
}
return
managerName
;
},
getTeacherManager
(
row
)
{
let
managerName
=
"<span class='text-grey-4'>暂无</span>"
;
if
(
row
.
AssistList
&&
row
.
AssistList
.
length
>
0
)
{
row
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
4
)
{
managerName
=
`<span class='text-dark'>
${
y
.
AssistName
}
</span>`
;
}
});
}
return
managerName
;
},
assistBatchHandler
()
{
if
(
this
.
pushing
)
return
;
this
.
pushing
=
true
;
if
(
this
.
selection
.
length
>
0
)
{
let
msg
=
""
;
let
parameter
=
{
stuIds
:
""
};
this
.
selection
.
forEach
(
x
=>
{
parameter
.
stuIds
+=
","
+
x
.
StuId
;
if
(
x
.
AssistList
&&
x
.
AssistList
.
length
>
0
)
{
x
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
2
)
{
msg
=
`客户
${
x
.
StuName
}
:已存在课程顾问:
${
y
.
AssistName
}
,无法再次推送。`
;
}
});
})
.
catch
(()
=>
{
that
.
resetLoading
=
false
;
});
});
},
//删除客户资料
deleteStudentInfo
(
obj
)
{
let
that
=
this
;
var
str
=
obj
.
Status
==
1
?
"【禁用】"
:
"【启用】"
;
this
.
$q
.
dialog
({
title
:
str
+
"学员"
,
message
:
"你正在进行"
+
str
+
"学员行为,一旦执行无法找回,是否确认执行?"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
}
})
.
onOk
(()
=>
{
that
.
resetLoading
=
true
;
deleteStudent
({
StuId
:
obj
.
StuId
,
Status
:
obj
.
Status
}).
then
(
res
=>
{
this
.
$q
.
notify
({
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
"数据操作成功!"
,
position
:
"top"
});
this
.
getStudent
();
}
});
})
.
onCancel
(()
=>
{
obj
.
Status
=
obj
.
Status
==
1
?
0
:
1
;
});
},
//刷新列表
refreshStuList
()
{
console
.
log
(
"change......"
);
this
.
$emit
(
"success"
);
this
.
selection
=
[];
},
EditStudent
(
obj
)
{
if
(
obj
)
{
this
.
stuOption
=
obj
;
}
else
{
this
.
stuOption
=
null
;
}
this
.
isShowAdd
=
true
;
},
closeStuForm
()
{
this
.
isShowStuForm
=
false
;
this
.
isShowStuRight
=
false
;
this
.
isShowAdd
=
false
;
this
.
isShowTransfer
=
false
;
this
.
isShowAbroad
=
false
;
},
//点击学生姓名弹出
getStuRight
(
obj
,
type
)
{
if
(
obj
)
{
this
.
stuOption
=
obj
;
this
.
BelongType
=
obj
.
BelongType
;
this
.
checkType
=
type
;
}
else
{
this
.
stuOption
=
null
;
}
this
.
isShowStuRight
=
true
;
},
//转订单
transferOrder
()
{
const
firstId
=
this
.
selection
[
0
].
CustomerId
;
const
flag
=
this
.
selection
.
every
(
e
=>
{
return
e
.
CustomerId
==
firstId
;
});
if
(
!
flag
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
`所属同行不一致,请重新选择`
});
return
;
}
this
.
isShowTransfer
=
true
;
},
//转留学
transferAbroad
()
{
this
.
isShowAbroad
=
true
;
},
getCurseManager
(
row
)
{
let
managerName
=
"<span class='text-grey-4'>暂未推送</span>"
;
if
(
row
.
AssistList
&&
row
.
AssistList
.
length
>
0
)
{
row
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
2
)
{
managerName
=
`<span class='text-dark'>
${
y
.
AssistName
}
</span>`
;
}
});
}
return
managerName
;
},
getTeacherManager
(
row
)
{
let
managerName
=
"<span class='text-grey-4'>暂无</span>"
;
if
(
row
.
AssistList
&&
row
.
AssistList
.
length
>
0
)
{
row
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
4
)
{
managerName
=
`<span class='text-dark'>
${
y
.
AssistName
}
</span>`
;
}
});
}
return
managerName
;
},
assistBatchHandler
()
{
if
(
this
.
pushing
)
return
;
this
.
pushing
=
true
;
if
(
this
.
selection
.
length
>
0
)
{
let
msg
=
""
;
let
parameter
=
{
stuIds
:
""
};
this
.
selection
.
forEach
(
x
=>
{
parameter
.
stuIds
+=
","
+
x
.
StuId
;
if
(
x
.
AssistList
&&
x
.
AssistList
.
length
>
0
)
{
x
.
AssistList
.
forEach
(
y
=>
{
if
(
y
.
AssistType
==
2
)
{
msg
=
`客户
${
x
.
StuName
}
:已存在课程顾问:
${
y
.
AssistName
}
,无法再次推送。`
;
}
if
(
msg
==
""
)
{
SetStudentAssistBatch
(
parameter
).
then
(
r
=>
{
this
.
refreshStuList
();
this
.
selection
=
[];
this
.
pushMode
=
false
;
});
}
else
{
this
.
pushing
=
false
;
this
.
errorMsg
(
msg
);
}
});
if
(
msg
==
""
)
{
SetStudentAssistBatch
(
parameter
).
then
(
r
=>
{
this
.
refreshStuList
();
this
.
selection
=
[];
this
.
pushMode
=
false
;
});
}
else
{
this
.
pushing
=
false
;
this
.
errorMsg
(
msg
);
this
.
errorMsg
(
"请选择要推送的学员"
);
}
}
else
{
this
.
pushing
=
false
;
this
.
errorMsg
(
"请选择要推送的学员"
);
}
},
referDataHandler
()
{
this
.
$emit
(
"reload"
);
},
errorMsg
(
msg
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
msg
});
},
//获取员工列表
getEmployeeList
()
{
queryEmployee
({
IsLeave
:
1
}).
then
(
res
=>
{
this
.
employeeList
=
res
.
Data
;
this
.
myEmployeeList
=
res
.
Data
;
});
},
//筛选员工
filterEmployee
(
val
,
update
,
abort
)
{
update
(()
=>
{
this
.
myEmployeeList
=
this
.
employeeList
.
filter
(
v
=>
v
.
EmployeeName
.
indexOf
(
val
)
>
-
1
);
});
},
//保存批量转交
saveTransForm
()
{
if
(
this
.
selection
.
length
==
0
)
{
},
referDataHandler
()
{
this
.
$emit
(
"reload"
);
},
errorMsg
(
msg
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
"请选择推送学员"
message
:
msg
});
return
;
}
if
(
this
.
transMsg
.
CreateBy
==
""
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
"请选择接收人员!"
},
//获取员工列表
getEmployeeList
()
{
queryEmployee
({
IsLeave
:
1
}).
then
(
res
=>
{
this
.
employeeList
=
res
.
Data
;
this
.
myEmployeeList
=
res
.
Data
;
});
return
;
}
let
newArr
=
[];
this
.
selection
.
forEach
(
x
=>
{
newArr
.
push
(
x
.
StuId
);
});
this
.
transMsg
.
StuIds
=
newArr
.
toString
();
BatchForwardStudent
(
this
.
transMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
refreshStuList
();
this
.
selection
=
[];
this
.
transMsg
.
StuIds
=
""
;
this
.
transMsg
.
CreateBy
=
""
;
this
.
pushMode
=
false
;
},
//筛选员工
filterEmployee
(
val
,
update
,
abort
)
{
update
(()
=>
{
this
.
myEmployeeList
=
this
.
employeeList
.
filter
(
v
=>
v
.
EmployeeName
.
indexOf
(
val
)
>
-
1
);
});
},
//保存批量转交
saveTransForm
()
{
if
(
this
.
selection
.
length
==
0
)
{
this
.
$q
.
notify
({
type
:
"
iconfont icon-chenggong
"
,
type
:
"
negative
"
,
position
:
"top"
,
message
:
r
.
Message
message
:
"请选择推送学员"
});
return
;
}
});
if
(
this
.
transMsg
.
CreateBy
==
""
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
"请选择接收人员!"
});
return
;
}
let
newArr
=
[];
this
.
selection
.
forEach
(
x
=>
{
newArr
.
push
(
x
.
StuId
);
});
this
.
transMsg
.
StuIds
=
newArr
.
toString
();
BatchForwardStudent
(
this
.
transMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
refreshStuList
();
this
.
selection
=
[];
this
.
transMsg
.
StuIds
=
""
;
this
.
transMsg
.
CreateBy
=
""
;
this
.
pushMode
=
false
;
this
.
$q
.
notify
({
type
:
"iconfont icon-chenggong"
,
position
:
"top"
,
message
:
r
.
Message
});
}
});
}
}
}
};
</
script
>
};
</
script
>
\ No newline at end of file
src/components/todolist/index.vue
View file @
3fb561df
...
...
@@ -193,7 +193,6 @@ export default {
},
mounted
()
{
this
.
currentMenu
=
this
.
menulist
[
0
].
id
.
toString
();
//console.log(this.todoTipList);
},
methods
:
{}
};
...
...
src/components/todolist/payee.vue
View file @
3fb561df
<
template
>
<div
class=
"full-height"
>
<div
class=
"row items-center"
>
<q-avatar
size=
"40px"
font-size=
"20px"
color=
"primary"
class=
"q-mr-md"
text-color=
"white"
rounded
:icon=
"`iconfont $
{node.icon}`"
/>
<q-avatar
size=
"40px"
font-size=
"20px"
color=
"primary"
class=
"q-mr-md"
text-color=
"white"
rounded
:icon=
"`iconfont $
{node.icon}`" />
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
</div>
<div
class=
"q-my-md row"
>
<q-input
standout
v-model=
"msg.KeyWords"
dense
type=
"text"
style=
"width:250px;"
label=
"关键字(名称/微信/手机号)"
class=
"q-mr-md"
/>
<q-btn
color=
"primary"
class=
"q-px-md"
label=
"查询"
unelevated
dense
@
click=
"searchKeyHandler"
/>
<q-input
standout
v-model=
"msg.KeyWords"
dense
type=
"text"
style=
"width:250px;"
label=
"关键字(名称/微信/手机号)"
class=
"q-mr-md"
/>
<q-btn
color=
"primary"
class=
"q-px-md"
label=
"查询"
unelevated
dense
@
click=
"searchKeyHandler"
/>
<div
class=
"col text-right text-grey-6 f12"
>
TIPS:创建订单后,请及时完成订单款项的入账动作,收款单据点击“修改-选择学员-制单”完成此项任务。
</div>
</div>
<div
style=
"height:calc(100% - 158px);overflow-y:auto;"
>
<orderlist
:dataList=
"stus"
@
success=
"refreshPage"
:loading=
"loading"
:authObj=
"authObj"
></orderlist>
<orderlist
:dataList=
"stus"
@
success=
"refreshPage"
:loading=
"loading"
:authObj=
"authObj"
></orderlist>
</div>
<div
class=
"row"
style=
"justify-content: flex-end;padding: 5px 20px"
>
<q-pagination
v-model=
"msg.PageIndex"
:max=
"pageCount"
@
input=
"changePage"
class=
"full-width justify-end"
color=
"primary"
:input=
"true"
>
<q-pagination
v-model=
"msg.PageIndex"
:max=
"pageCount"
@
input=
"changePage"
class=
"full-width justify-end"
color=
"primary"
:input=
"true"
>
</q-pagination>
</div>
</div>
</
template
>
<
script
>
import
orderlist
from
"../sale/orderlist.vue"
;
import
{
getMyOrderNotBalance
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
orderlist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
10
,
KeyWords
:
""
},
//权限判断
authObj
:
{
isShowGuestBtn
:
1
,
//显示新增学员名单按钮
isShowFinanceBtn
:
true
,
//显示财务单据按钮
isShowTransOrder
:
true
,
//显示转交订单按钮
isShowSaleRemark
:
true
,
//显示修改销售备注
isShowBackClass
:
true
,
//显示退课按钮
isShowRenewClass
:
true
,
//显示续课按钮
isShowTransClassOrder
:
true
,
//现在转班按钮
isShowSeparater
:
true
//显示分拆按钮
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getMyOrderNotBalance
(
this
.
msg
)
.
then
(
r
=>
{
this
.
stus
=
r
.
Data
.
PageData
;
this
.
pageCount
=
r
.
Data
.
PageCount
;
console
.
log
(
this
.
stus
);
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
1000
);
})
.
catch
(
e
=>
{
this
.
loading
=
false
;
});
import
orderlist
from
"../sale/orderlist.vue"
;
import
{
getMyOrderNotBalance
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
orderlist
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
10
,
KeyWords
:
""
},
//权限判断
authObj
:
{
isShowGuestBtn
:
1
,
//显示新增学员名单按钮
isShowFinanceBtn
:
true
,
//显示财务单据按钮
isShowTransOrder
:
true
,
//显示转交订单按钮
isShowSaleRemark
:
true
,
//显示修改销售备注
isShowBackClass
:
true
,
//显示退课按钮
isShowRenewClass
:
true
,
//显示续课按钮
isShowTransClassOrder
:
true
,
//现在转班按钮
isShowSeparater
:
true
//显示分拆按钮
}
};
},
changePage
()
{
mounted
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getMyOrderNotBalance
(
this
.
msg
)
.
then
(
r
=>
{
this
.
stus
=
r
.
Data
.
PageData
;
this
.
pageCount
=
r
.
Data
.
PageCount
;
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
1000
);
})
.
catch
(
e
=>
{
this
.
loading
=
false
;
});
},
refreshPage
()
{
this
.
getStudent
();
this
.
$root
.
$emit
(
"updateTodoList"
);
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
}
};
};
</
script
>
<
style
><
/
style
>
<
style
>
</
style
>
\ No newline at end of file
src/pages/Work.vue
View file @
3fb561df
...
...
@@ -225,7 +225,6 @@ export default {
methods
:
{
initTodoList
()
{
getTodayStatic
().
then
(
r
=>
{
console
.
log
(
r
);
let
d
=
r
.
Data
;
this
.
todoList
.
result
=
d
;
let
tempCount
=
0
;
...
...
src/pages/classroom/Scheduling.vue
View file @
3fb561df
<
template
>
<div
class=
"page-body room-list"
v-loading=
"loading"
>
<div
v-for=
"(item, i) in classdata"
:key=
"item.Key"
>
<template
v-if=
"
<template
v-if=
"
item.SchoolName.indexOf('武侯') == -1 &&
item.SchoolName.indexOf('眉山') == -1
"
>
"
>
<div
class=
"row items-center"
>
<div
class=
"text-h6 col"
>
{{
item
.
SchoolName
}}
</div>
<div
v-if=
"i == 0"
class=
"f12"
>
只看在线:
</div>
<div
v-if=
"i == 0"
>
<el-switch
v-model=
"queryStatus"
@
change=
"changeViewStatusHandler"
></el-switch>
<el-switch
v-model=
"queryStatus"
@
change=
"changeViewStatusHandler"
></el-switch>
</div>
</div>
<div
class=
"q-mt-md q-mb-lg row"
>
<template
v-for=
"(x, xi) in item.RoomList"
>
<div
class=
"class-room"
style=
"width:calc(20% - 10px);margin-right:10px;margin-bottom:10px;"
v-if=
"queryStatus == 0 || (queryStatus == 1 && x.StatusInfo)"
:key=
"xi"
>
<div
class=
"class-room"
style=
"width:calc(20% - 10px);margin-right:10px;margin-bottom:10px;"
v-if=
"queryStatus == 0 || (queryStatus == 1 && x.StatusInfo)"
:key=
"xi"
>
<div
class=
"img-box"
>
<q-img
:src=
"x.RoomPicList[0]"
height=
"100%"
fit=
"fill"
spinner-color=
"primary"
spinner-size=
"30px"
v-if=
"x.RoomPicList && x.RoomPicList.length > 0"
/>
<q-img
src=
"../../assets/images/classroom/bg-img.jpg"
fit=
"fill"
height=
"100%"
spinner-color=
"primary"
spinner-size=
"30px"
v-else
/>
<q-img
:src=
"x.RoomPicList[0]"
height=
"100%"
fit=
"fill"
spinner-color=
"primary"
spinner-size=
"30px"
v-if=
"x.RoomPicList && x.RoomPicList.length > 0"
/>
<q-img
src=
"../../assets/images/classroom/bg-img.jpg"
fit=
"fill"
height=
"100%"
spinner-color=
"primary"
spinner-size=
"30px"
v-else
/>
</div>
<div
class=
"xuhua"
></div>
<div
class=
"q-pa-md"
>
...
...
@@ -58,37 +37,19 @@
</div>
<div
class=
"q-mt-lg f12 row items-center"
>
<div
class=
"text-grey-6 f12 col"
>
<span
class=
"q-px-xs text-white q-mr-md inline-block text-weight-bold"
style=
"border-radius:4px;font-size:15;"
:class=
"
{
<span
class=
"q-px-xs text-white q-mr-md inline-block text-weight-bold"
style=
"border-radius:4px;font-size:15;"
:class=
"
{
'bg-grey-3': !x.StatusInfo,
'bg-negative': x.StatusInfo
}"
>
}">
LIVE
</span>
<span
class=
"text-grey-6"
v-if=
"!x.StatusInfo"
>
设备离线
</span
>
<span
class=
"text-grey-6"
v-else-if=
"x.StatusInfo.UnLockUserName == 'lock'"
>
设备在线,未解锁
</span
>
<span
class=
"text-grey-6"
v-else
>
{{
x
.
StatusInfo
.
UnLockUserName
}}
正在使用
</span
>
<span
class=
"text-grey-6"
v-if=
"!x.StatusInfo"
>
设备离线
</span>
<span
class=
"text-grey-6"
v-else-if=
"x.StatusInfo.UnLockUserName == 'lock'"
>
设备在线,未解锁
</span>
<span
class=
"text-grey-6"
v-else
>
{{
x
.
StatusInfo
.
UnLockUserName
}}
正在使用
</span>
</div>
<div
v-if=
"x.StatusInfo"
>
<q-btn
color=
"primary"
dense
class=
"f12"
flat
label=
"链接"
@
click=
"openVideo(x)"
/>
<q-btn
color=
"primary"
dense
class=
"f12"
flat
label=
"链接"
@
click=
"openVideo(x)"
/>
</div>
</div>
</div>
...
...
@@ -98,200 +59,195 @@
</template>
</div>
<q-dialog
v-model=
"showVideo"
@
hide=
"clearVideo"
>
<q-card
class=
"my-card"
style=
"width:64vw !important;max-width:64vw !important;max-height:32vw !important;height:32vw !important;"
flat
>
<div
id=
"player-con"
style=
"width:100%;height:100%;overflow:hidden;"
></div>
<q-card
class=
"my-card"
style=
"width:64vw !important;max-width:64vw !important;max-height:32vw !important;height:32vw !important;"
flat
>
<div
id=
"player-con"
style=
"width:100%;height:100%;overflow:hidden;"
></div>
</q-card>
</q-dialog>
</div>
</template>
<
script
>
import
{
getUseClassRoomList
}
from
"../../api/classroom/index"
;
import
*
as
signalR
from
"@aspnet/signalr"
;
export
default
{
meta
:
{
title
:
"教室状态"
},
data
()
{
return
{
classdata
:
[],
loading
:
true
,
showVideo
:
false
,
videoObj
:
null
,
currentRoom
:
null
,
queryStatus
:
0
,
player
:
null
,
connection
:
""
,
//signalr连接
roomStatusList
:
[]
//返回消息
};
},
created
()
{
let
thisVue
=
this
;
console
.
log
(
process
.
env
.
API_SIG
);
this
.
connection
=
new
signalR
.
HubConnectionBuilder
()
.
withUrl
(
process
.
env
.
API_SIG
,
{
skipNegotiation
:
true
,
transport
:
signalR
.
HttpTransportType
.
WebSockets
})
.
configureLogging
(
signalR
.
LogLevel
.
Information
)
.
build
();
this
.
connection
.
on
(
"RoomStatusChange"
,
function
(
message
)
{
thisVue
.
roomStatusList
=
JSON
.
parse
(
message
);
console
.
log
(
thisVue
.
roomStatusList
);
thisVue
.
changeStatus
();
});
this
.
connection
.
onclose
(
async
()
=>
{
setTimeout
(()
=>
{
thisVue
.
linkHub
();
},
3000
);
});
this
.
linkHub
();
},
mounted
()
{
this
.
getList
();
//this.openVideo();
},
methods
:
{
changeViewStatusHandler
()
{},
clearVideo
()
{
this
.
player
.
stop
();
this
.
player
.
dispose
();
this
.
showVideo
=
false
;
import
{
getUseClassRoomList
}
from
"../../api/classroom/index"
;
import
*
as
signalR
from
"@aspnet/signalr"
;
export
default
{
meta
:
{
title
:
"教室状态"
},
data
()
{
return
{
classdata
:
[],
loading
:
true
,
showVideo
:
false
,
videoObj
:
null
,
currentRoom
:
null
,
queryStatus
:
0
,
player
:
null
,
connection
:
""
,
//signalr连接
roomStatusList
:
[]
//返回消息
};
},
openVideo
(
item
)
{
this
.
showVideo
=
true
;
this
.
currentRoom
=
item
;
let
url
=
`http://47.96.12.235:5000/live/
${
item
.
RoomId
}
.m3u8`
;
this
.
$nextTick
(()
=>
{
this
.
initPlayer
(
url
);
created
()
{
let
thisVue
=
this
;
this
.
connection
=
new
signalR
.
HubConnectionBuilder
()
.
withUrl
(
process
.
env
.
API_SIG
,
{
skipNegotiation
:
true
,
transport
:
signalR
.
HttpTransportType
.
WebSockets
})
.
configureLogging
(
signalR
.
LogLevel
.
Information
)
.
build
();
this
.
connection
.
on
(
"RoomStatusChange"
,
function
(
message
)
{
thisVue
.
roomStatusList
=
JSON
.
parse
(
message
);
thisVue
.
changeStatus
();
});
this
.
connection
.
onclose
(
async
()
=>
{
setTimeout
(()
=>
{
thisVue
.
linkHub
();
},
3000
);
});
this
.
linkHub
();
},
initPlayer
(
url
)
{
this
.
player
=
new
Aliplayer
(
{
id
:
"player-con"
,
source
:
url
,
width
:
"100%"
,
height
:
"100%"
,
autoplay
:
true
,
isLive
:
true
,
rePlay
:
false
,
playsinline
:
true
,
preload
:
true
,
controlBarVisibility
:
"hover"
,
useH5Prism
:
true
},
function
(
player
)
{}
);
mounted
()
{
this
.
getList
();
//this.openVideo();
},
changeStatus
()
{
this
.
initStatus
();
if
(
this
.
roomStatusList
&&
this
.
roomStatusList
.
length
>
0
)
{
this
.
roomStatusList
.
forEach
(
x
=>
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
if
(
z
.
RoomId
==
x
.
RoomId
)
{
z
.
StatusInfo
=
x
;
}
});
});
methods
:
{
changeViewStatusHandler
()
{},
clearVideo
()
{
this
.
player
.
stop
();
this
.
player
.
dispose
();
this
.
showVideo
=
false
;
},
openVideo
(
item
)
{
this
.
showVideo
=
true
;
this
.
currentRoom
=
item
;
let
url
=
`http://47.96.12.235:5000/live/
${
item
.
RoomId
}
.m3u8`
;
this
.
$nextTick
(()
=>
{
this
.
initPlayer
(
url
);
});
}
this
.
$forceUpdate
();
},
initStatus
()
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
z
.
StatusInfo
=
null
;
},
initPlayer
(
url
)
{
this
.
player
=
new
Aliplayer
({
id
:
"player-con"
,
source
:
url
,
width
:
"100%"
,
height
:
"100%"
,
autoplay
:
true
,
isLive
:
true
,
rePlay
:
false
,
playsinline
:
true
,
preload
:
true
,
controlBarVisibility
:
"hover"
,
useH5Prism
:
true
},
function
(
player
)
{}
);
},
changeStatus
()
{
this
.
initStatus
();
if
(
this
.
roomStatusList
&&
this
.
roomStatusList
.
length
>
0
)
{
this
.
roomStatusList
.
forEach
(
x
=>
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
if
(
z
.
RoomId
==
x
.
RoomId
)
{
z
.
StatusInfo
=
x
;
}
});
});
});
});
});
this
.
$forceUpdate
();
},
linkHub
()
{
let
thatVue
=
this
;
this
.
connection
.
start
()
.
then
(()
=>
{
console
.
log
(
"linke success"
);
thatVue
.
connection
.
invoke
(
"RegistErp"
,
"IMERP"
);
})
.
catch
(
e
=>
{
console
.
log
(
e
);
setTimeout
(()
=>
{
thatVue
.
linkHub
();
},
3000
);
});
},
goUrl
(
x
,
y
)
{
this
.
$router
.
push
({
path
:
"/classroom/useRecord"
,
query
:
{
key
:
x
.
Key
,
roomId
:
y
.
RoomId
}
});
},
getList
()
{
getUseClassRoomList
({})
.
then
(
res
=>
{
this
.
loading
=
false
;
if
(
res
.
Code
===
1
)
{
res
.
Data
.
forEach
(
e
=>
{
e
.
RoomList
.
forEach
(
_e
=>
{
_e
.
slide
=
0
;
this
.
$forceUpdate
();
},
initStatus
()
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
this
.
classdata
.
forEach
(
y
=>
{
y
.
RoomList
.
forEach
(
z
=>
{
z
.
StatusInfo
=
null
;
});
});
this
.
classdata
=
res
.
Data
;
this
.
changeStatus
();
});
});
this
.
$forceUpdate
();
},
linkHub
()
{
let
thatVue
=
this
;
this
.
connection
.
start
()
.
then
(()
=>
{
thatVue
.
connection
.
invoke
(
"RegistErp"
,
"IMERP"
);
})
.
catch
(
e
=>
{
setTimeout
(()
=>
{
thatVue
.
linkHub
();
},
3000
);
});
},
goUrl
(
x
,
y
)
{
this
.
$router
.
push
({
path
:
"/classroom/useRecord"
,
query
:
{
key
:
x
.
Key
,
roomId
:
y
.
RoomId
}
})
.
catch
(()
=>
{
this
.
loading
=
false
;
});
},
getList
()
{
getUseClassRoomList
({})
.
then
(
res
=>
{
this
.
loading
=
false
;
if
(
res
.
Code
===
1
)
{
res
.
Data
.
forEach
(
e
=>
{
e
.
RoomList
.
forEach
(
_e
=>
{
_e
.
slide
=
0
;
});
});
this
.
classdata
=
res
.
Data
;
this
.
changeStatus
();
}
})
.
catch
(()
=>
{
this
.
loading
=
false
;
});
}
}
}
};
};
</
script
>
<
style
>
.class-room
{
border
:
1px
solid
#f5f5f5
;
border-radius
:
10px
;
position
:
relative
;
overflow
:
hidden
;
}
.class-room
.img-box
{
height
:
80px
;
}
.class-room
.xuhua
{
position
:
absolute
;
top
:
0
;
height
:
80px
;
left
:
0
;
right
:
0
;
backdrop-filter
:
blur
(
4px
);
}
.class-room
:hover
.xuhua
{
backdrop-filter
:
none
;
}
.no-data
{
height
:
75px
;
font-size
:
14px
;
color
:
#000000
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
</
style
>
.class-room
{
border
:
1px
solid
#f5f5f5
;
border-radius
:
10px
;
position
:
relative
;
overflow
:
hidden
;
}
.class-room
.img-box
{
height
:
80px
;
}
.class-room
.xuhua
{
position
:
absolute
;
top
:
0
;
height
:
80px
;
left
:
0
;
right
:
0
;
backdrop-filter
:
blur
(
4px
);
}
.class-room
:hover
.xuhua
{
backdrop-filter
:
none
;
}
.no-data
{
height
:
75px
;
font-size
:
14px
;
color
:
#000000
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
</
style
>
\ No newline at end of file
src/pages/financial/market/marketStatistics.vue
View file @
3fb561df
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.cycleOrderList
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.cycleOrderList
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.cycleOrderList
._icon_btn
i
.icon-sousuo
{
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.cycleOrderList
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.cycleOrderList
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.cycleOrderList
._icon_btn
i
.icon-sousuo
{
background-color
:
#47BF8C
;
}
.cycleOrderList
._icon_btn
i
{
.cycleOrderList
._icon_btn
i
{
width
:
30px
;
height
:
30px
;
display
:
inline-block
;
...
...
@@ -27,462 +33,459 @@
cursor
:
pointer
;
outline
:
none
;
}
.cycleOrderList
.el-table
td
,
.el-table
th
{
.cycleOrderList
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
</
style
>
<
template
>
<div
class=
"page-body cycleOrderList"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"getDepartList(msg.School_Id),resetSearch()"
option-value=
"SId"
option-label=
"SName"
v-model=
"msg.School_Id"
ref=
"School_Id"
:options=
"schoolList"
label=
"校区"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<selectTree
:treeData=
'DeptList'
:defaultArray=
"returnString"
nodeKey=
"DeptId"
:multiple=
"false"
labelKey=
"DeptName"
childrenKey=
"ChildList"
tipText=
"选择部门"
@
getChild=
"getChild"
></selectTree>
</div>
<q-select
@
input=
"resetSearch"
filled
stack-label
option-value=
"Id"
option-label=
"EmployeeName"
use-input
v-model=
"msg.UserId"
ref=
"DeptTier"
:options=
"PersionList"
label=
"销售"
:dense=
"false"
class=
"col-3 "
emit-value
map-options
@
filter=
"filterFn2"
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
<div
class=
"col-3"
>
<q-select
filled
stack-label
use-input
input-debounce=
"0"
option-value=
"ClassId"
@
input=
"getList"
option-label=
"ClassName"
v-model=
"msg.ClassId"
:options=
"ClassList"
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>
</div>
</div>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"resetSearch()"
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.PeriodId"
:options=
"PeriodsList"
label=
"周期"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<q-input
filled
v-model=
"msg.OrderId"
@
keyup
.
enter
.
native=
"resetSearch()"
label=
"订单号"
/>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.UserType"
:options=
"UserTypeList"
label=
"类型"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.IsDept"
:options=
"IsDeptList"
label=
"业绩方式"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
</div>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"getDepartList(msg.School_Id),resetSearch()"
option-value=
"SId"
option-label=
"SName"
v-model=
"msg.School_Id"
ref=
"School_Id"
:options=
"schoolList"
label=
"校区"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<selectTree
:treeData=
'DeptList'
:defaultArray=
"returnString"
nodeKey=
"DeptId"
:multiple=
"false"
labelKey=
"DeptName"
childrenKey=
"ChildList"
tipText=
"选择部门"
@
getChild=
"getChild"
></selectTree>
</div>
<q-select
@
input=
"resetSearch"
filled
stack-label
option-value=
"Id"
option-label=
"EmployeeName"
use-input
v-model=
"msg.UserId"
ref=
"DeptTier"
:options=
"PersionList"
label=
"销售"
:dense=
"false"
class=
"col-3 "
emit-value
map-options
@
filter=
"filterFn2"
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
<div
class=
"col-3"
>
<q-select
filled
stack-label
use-input
input-debounce=
"0"
option-value=
"ClassId"
@
input=
"getList"
option-label=
"ClassName"
v-model=
"msg.ClassId"
:options=
"ClassList"
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>
</div>
<div
class=
"page-search row items-center"
style=
"justify-content: space-between;"
>
<span
style=
"font-size: 20px;font-weight: 400;"
>
提成统计
<span
style=
"font-size: 16px;"
>
(提成总计:{{TotalCommission}})
</span>
</span>
<q-btn
color=
"primary"
size=
"11px"
label=
"导出"
@
click=
"tcexport"
style=
"margin-left:10px"
/>
</div>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"resetSearch()"
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.PeriodId"
:options=
"PeriodsList"
label=
"周期"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<q-input
filled
v-model=
"msg.OrderId"
@
keyup
.
enter
.
native=
"resetSearch()"
label=
"订单号"
/>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.UserType"
:options=
"UserTypeList"
label=
"类型"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.IsDept"
:options=
"IsDeptList"
label=
"业绩方式"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
</div>
<
template
>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading =
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}"
border
style="width: 100%">
<el-table-column
prop=
"SchoolName"
label=
"校区"
width=
'150'
></el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
></el-table-column>
<el-table-column
prop=
"UserType"
label=
"类型"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.UserType==1"
>
市场
</span>
<span
v-if=
"scope.row.UserType==2"
>
顾问
</span>
<span
v-if=
"scope.row.UserType==3"
>
教师
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"人员"
>
</el-table-column>
<el-table-column
prop=
"IsDept"
label=
"业绩方式"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.IsDept==1"
>
部门
</span>
<span
v-if=
"scope.row.IsDept==2"
>
个人
</span>
</
template
>
</el-table-column>
<el-table-column
width=
'170'
prop=
"ClassName"
label=
"班级信息"
>
<
template
slot-scope=
"scope"
>
<div><span
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlclass('/course/classManage',scope.row.ClassName)"
>
{{
scope
.
row
.
ClassName
}}
</span>
{{
scope
.
row
.
ClassTypeName
}}
<span
style=
"color: #409EFF;"
v-if=
'scope.row.IsContinueClass==1'
>
(续)
</span></div>
<div>
学生数量:
{{
scope
.
row
.
StudentCount
}}
人
</div
>
<div>
班号:
{{
scope
.
row
.
ClassNo
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
prop=
"OrderId"
label=
"订单号"
>
<
template
slot-scope=
"scope"
>
<div
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics',scope.row)"
>
{{
scope
.
row
.
OrderId
}}
</div
>
</
template
>
</el-table-column>
<el-table-column
width=
'130'
prop=
"TotalCommissionMoney"
label=
"订单发放信息"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(255, 156, 0);cursor: pointer;text-decoration: underline;"
@
click=
"getmingxi(scope.row)"
>
应发:
{{
scope
.
row
.
TotalCommissionMoney
}}
<q-popup-proxy
transition-show=
"flip-up"
transition-hide=
"flip-down
"
>
<div
style=
"padding: 10px;border-radius: 4px;background: #FFF;max-width: 500px;
"
>
{{
ChangeLog
}}
</div
>
</q-popup-proxy>
</div
>
<div>
累计已发:
{{
scope
.
row
.
GiveOutMoney
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
prop=
"IsFirstCommission"
label=
"首次发放"
>
<
template
slot-scope=
"scope"
>
<div>
{{
scope
.
row
.
IsFirstCommission
==
1
?
'是'
:
'否'
}}
</div
>
</
template
>
</el-table-column
>
<
el-table-column
prop=
"TotalHours"
label=
"课时统计"
width=
'160'
>
<
template
slot-scope=
"scope"
>
<div>
总计课时:
{{
scope
.
row
.
TotalHours
}}
</div
>
<div>
学习课时:
{{
scope
.
row
.
TotalLearn
}}
</div
>
<div>
当期课时:
{{
scope
.
row
.
CurrentHours
>=
0
?
scope
.
row
.
CurrentHours
:
'-'
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
width=
'160'
prop=
"CurrentPeriodMoney"
label=
"当期发放信息"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
CurrentPeriodMoney
}}
</div
>
<div>
抵扣:
{{
scope
.
row
.
DeductionMoney
}}
</div
>
</
template
>
</el-table-column
>
<
el-table-column
prop=
"YFMoney"
label=
"最终发放"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(233, 82, 82);"
>
{{
scope
.
row
.
YFMoney
}}
</div
>
<
/
template
>
</el-table-column>
<el-table-column
width=
'85'
prop=
"Periods"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"Remark"
width=
'160'
label=
"备注"
>
</el-table-column>
<
/div
>
<div
class=
"page-search row items-center"
style=
"justify-content: space-between;"
>
<span
style=
"font-size: 20px;font-weight: 400;"
>
提成统计
<span
style=
"font-size: 16px;"
>
(提成总计:{{TotalCommission}})
</span>
</span>
<q-btn
color=
"primary"
size=
"11px"
label=
"导出"
@
click=
"tcexport"
style=
"margin-left:10px"
/>
</div>
<
template
>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading=
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border
style="width: 100%">
<el-table-column
prop=
"SchoolName"
label=
"校区"
width=
'150'
></el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
></el-table-column>
<el-table-column
prop=
"UserType"
label=
"类型"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.UserType==1"
>
市场
</span>
<span
v-if=
"scope.row.UserType==2"
>
顾问
</span>
<span
v-if=
"scope.row.UserType==3"
>
教师
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"人员"
>
</el-table-column>
<el-table-column
prop=
"IsDept"
label=
"业绩方式"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.IsDept==1"
>
部门
</span>
<span
v-if=
"scope.row.IsDept==2"
>
个人
</span>
</
template
>
</el-table-column>
<el-table-column
width=
'170'
prop=
"ClassName"
label=
"班级信息"
>
<
template
slot-scope=
"scope"
>
<div><span
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlclass('/course/classManage',scope.row.ClassName)"
>
{{
scope
.
row
.
ClassName
}}
</span
>
{{
scope
.
row
.
ClassTypeName
}}
<span
style=
"color: #409EFF;"
v-if=
'scope.row.IsContinueClass==1'
>
(续)
</span
>
</div
>
<div>
学生数量:
{{
scope
.
row
.
StudentCount
}}
人
</div
>
<div>
班号:
{{
scope
.
row
.
ClassNo
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
prop=
"OrderId"
label=
"订单号"
>
<
template
slot-scope=
"scope"
>
<div
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics',scope.row)"
>
{{
scope
.
row
.
OrderId
}}
</div
>
</
template
>
</el-table-column>
<el-table-column
width=
'130'
prop=
"TotalCommissionMoney"
label=
"订单发放信息
"
>
<
template
slot-scope=
"scope
"
>
<div
style=
"color: rgb(255, 156, 0);cursor: pointer;text-decoration: underline;"
@
click=
"getmingxi(scope.row)"
>
应发:
{{
scope
.
row
.
TotalCommissionMoney
}}
<q-popup-proxy
transition-show=
"flip-up"
transition-hide=
"flip-down"
>
<div
style=
"padding: 10px;border-radius: 4px;background: #FFF;max-width: 500px;"
>
{{
ChangeLog
}}
</div>
</q-popup-proxy
>
</div>
<div>
累计已发:
{{
scope
.
row
.
GiveOutMoney
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
prop=
"IsFirstCommission"
label=
"首次发放"
>
<
template
slot-scope=
"scope"
>
<div>
{{
scope
.
row
.
IsFirstCommission
==
1
?
'是'
:
'否'
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
prop=
"TotalHours"
label=
"课时统计"
width=
'160'
>
<
template
slot-scope=
"scope"
>
<div>
总计课时:
{{
scope
.
row
.
TotalHours
}}
</div
>
<div>
学习课时:
{{
scope
.
row
.
TotalLearn
}}
</div>
<div>
当期课时:
{{
scope
.
row
.
CurrentHours
>=
0
?
scope
.
row
.
CurrentHours
:
'-'
}}
</div
>
</
template
>
</el-table-column
>
<el-table-column
width=
'160'
prop=
"CurrentPeriodMoney"
label=
"当期发放信息"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
CurrentPeriodMoney
}}
</div
>
<div>
抵扣:
{{
scope
.
row
.
DeductionMoney
}}
</div>
<
/
template
>
</el-table-column
>
<el-table-column
prop=
"YFMoney"
label=
"最终发放"
>
<
template
slot-scope=
"scope"
>
<
div
style=
"color: rgb(233, 82, 82);"
>
{{
scope
.
row
.
YFMoney
}}
</div
>
</
template
>
</el-table-column>
<el-table-column
width=
'85'
prop=
"Periods"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"Remark"
width=
'160'
label=
"备注"
>
</el-table-column>
</el-table>
<div
style=
"margin-top: 10px;text-align: center;"
>
<el-pagination
background
@
current-change=
"handleCurrentChanges"
layout=
"total,prev, pager, next, jumper"
:current-page
.
sync=
"msg.PageIndex
"
:page-size=
"msg.PageSize"
:total=
'total'
>
</el-pagination>
</div>
<el-pagination
background
@
current-change=
"handleCurrentChanges"
layout=
"total,prev, pager, next, jumper
"
:current-page
.
sync=
"msg.PageIndex"
:page-size=
"msg.PageSize"
:total=
'total'
>
</el-pagination>
</div>
</template>
</div>
</template>
<
script
>
import
{
getSchoolDropdown
}
from
'../../../api/school/index'
import
{
queryEmployee
}
from
'../../../api/users/user'
import
{
getDeptTree
}
from
'../../../api/system/dept.js'
import
{
getSellAchievementsStatistics
,
getSellAchievementsPeriodsList
,
getSellAchievementsChangeLog
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
import
selectTree
from
'../../../components/common/select-tree'
import
{
EduDownLoad
,
}
from
'../../../api/common/common'
;
import
{
number
}
from
'echarts'
export
default
{
meta
:
{
title
:
"业绩提成统计"
},
props
:
{},
components
:
{
selectTree
},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PageIndex
:
1
,
PageSize
:
10
,
School_Id
:
'-1'
,
Depart_Id
:
0
,
PeriodId
:
0
,
UserId
:
0
,
ClassId
:
0
,
OrderId
:
''
,
UserType
:
0
,
//类型 1市场、2顾问、3教师
IsDept
:
0
,
//业绩方式 1部门 2个人
},
UserTypeList
:[{
Id
:
0
,
Name
:
'不限'
},{
Id
:
1
,
Name
:
'市场'
},{
Id
:
2
,
Name
:
'顾问'
},{
Id
:
3
,
Name
:
'教师'
},],
IsDeptList
:[{
Id
:
0
,
Name
:
'不限'
},{
Id
:
1
,
Name
:
'部门'
},{
Id
:
2
,
Name
:
'个人'
}],
pageCount
:
0
,
persistent
:
false
,
listData
:{},
tableData
:[],
total
:
0
,
company
:[],
department
:[],
ClassList
:[],
allClassList
:[],
returnString
:
[],
//默认岗位
see_tcdetailed
:
false
,
schoolList
:[],
DeptList
:
[],
// 部门下拉
PersionList
:
[],
//员工列表
AllemployeeList
:
[],
//所有员工
PeriodsList
:[],
//周期列表
TotalCommission
:
0
,
ChangeLog
:
''
,
<
script
>
import
{
getSchoolDropdown
}
from
'../../../api/school/index'
import
{
queryEmployee
}
from
'../../../api/users/user'
import
{
getDeptTree
}
from
'../../../api/system/dept.js'
import
{
getSellAchievementsStatistics
,
getSellAchievementsPeriodsList
,
getSellAchievementsChangeLog
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
import
selectTree
from
'../../../components/common/select-tree'
import
{
EduDownLoad
,
}
from
'../../../api/common/common'
;
import
{
number
}
from
'echarts'
export
default
{
meta
:
{
title
:
"业绩提成统计"
},
props
:
{},
components
:
{
selectTree
},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PageIndex
:
1
,
PageSize
:
10
,
School_Id
:
'-1'
,
Depart_Id
:
0
,
PeriodId
:
0
,
UserId
:
0
,
ClassId
:
0
,
OrderId
:
''
,
UserType
:
0
,
//类型 1市场、2顾问、3教师
IsDept
:
0
,
//业绩方式 1部门 2个人
},
UserTypeList
:
[{
Id
:
0
,
Name
:
'不限'
},
{
Id
:
1
,
Name
:
'市场'
},
{
Id
:
2
,
Name
:
'顾问'
},
{
Id
:
3
,
Name
:
'教师'
},
],
IsDeptList
:
[{
Id
:
0
,
Name
:
'不限'
},
{
Id
:
1
,
Name
:
'部门'
},
{
Id
:
2
,
Name
:
'个人'
}],
pageCount
:
0
,
persistent
:
false
,
listData
:
{},
tableData
:
[],
total
:
0
,
company
:
[],
department
:
[],
ClassList
:
[],
allClassList
:
[],
returnString
:
[],
//默认岗位
see_tcdetailed
:
false
,
schoolList
:
[],
DeptList
:
[],
// 部门下拉
PersionList
:
[],
//员工列表
AllemployeeList
:
[],
//所有员工
PeriodsList
:
[],
//周期列表
TotalCommission
:
0
,
ChangeLog
:
''
,
}
},
created
()
{
let
userinfo
=
this
.
getLocalStorage
();
userinfo
.
ActionMenuList
.
map
(
x
=>
{
//判断权限
if
(
x
.
FunctionCode
==
"see_tcdetailed"
)
{
//判断是否可以查看其他明细
this
.
see_tcdetailed
=
true
;
}
})
if
(
this
.
see_tcdetailed
==
false
)
{
this
.
msg
.
UserId
=
userinfo
.
Id
}
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
OrderId
)
{
this
.
msg
.
OrderId
=
this
.
$route
.
query
.
OrderId
}
// 从业绩表跳转带参
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
UserId
)
{
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
this
.
msg
.
UserId
=
this
.
$route
.
query
.
UserId
-
0
}
this
.
getList
()
this
.
getEmployee
();
//销售
this
.
getPeriodList
()
//周期
this
.
setClass
()
//班级
this
.
getBranchList
()
//校区
this
.
getDepartList
(
0
);
},
methods
:
{
resetSearch
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getList
()
},
created
()
{
let
userinfo
=
this
.
getLocalStorage
();
userinfo
.
ActionMenuList
.
map
(
x
=>
{
//判断权限
if
(
x
.
FunctionCode
==
"see_tcdetailed"
){
//判断是否可以查看其他明细
this
.
see_tcdetailed
=
true
;
getList
()
{
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsStatistics
(
this
.
msg
).
then
(
res
=>
{
this
.
loading
=
false
;
if
(
res
.
Code
==
1
)
{
this
.
tableData
=
res
.
Data
.
PageData
.
List
this
.
TotalCommission
=
res
.
Data
.
PageData
.
TotalCommission
this
.
total
=
res
.
Data
.
Count
}
})
if
(
this
.
see_tcdetailed
==
false
){
this
.
msg
.
UserId
=
userinfo
.
Id
}
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
OrderId
){
this
.
msg
.
OrderId
=
this
.
$route
.
query
.
OrderId
}
// 从业绩表跳转带参
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
UserId
){
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
this
.
msg
.
UserId
=
this
.
$route
.
query
.
UserId
-
0
}
unique
(
arr
,
Name
)
{
//数组去重
const
res
=
new
Map
();
return
arr
.
filter
(
(
list
)
=>
!
res
.
has
(
list
.
text
)
&&
res
.
set
(
list
.
text
,
1
)
);
},
handleCurrentChanges
(
val
)
{
this
.
msg
.
PageIndex
=
val
;
this
.
getList
()
this
.
getEmployee
();
//销售
this
.
getPeriodList
()
//周期
this
.
setClass
()
//班级
this
.
getBranchList
()
//校区
this
.
getDepartList
(
0
);
},
methods
:
{
resetSearch
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getList
()
},
getList
(){
console
.
log
(
this
.
msg
,
'02222222222'
)
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsStatistics
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
.
PageData
.
List
this
.
TotalCommission
=
res
.
Data
.
PageData
.
TotalCommission
this
.
total
=
res
.
Data
.
Count
//选择班级
setClass
(
item
)
{
this
.
isShowClass
=
true
;
getClassDropDownList
({
CourseId
:
0
,
IsAddDefault
:
1
,
//添加默认选项
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
let
obj
=
{
ClassId
:
0
,
ClassName
:
'不限'
}
})
},
unique
(
arr
,
Name
){
//数组去重
const
res
=
new
Map
();
return
arr
.
filter
(
(
list
)
=>
!
res
.
has
(
list
.
text
)
&&
res
.
set
(
list
.
text
,
1
)
);
},
handleCurrentChanges
(
val
){
this
.
msg
.
PageIndex
=
val
;
this
.
getList
()
},
//选择班级
setClass
(
item
)
{
this
.
isShowClass
=
true
;
getClassDropDownList
({
CourseId
:
0
,
IsAddDefault
:
1
,
//添加默认选项
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
let
obj
=
{
ClassId
:
0
,
ClassName
:
'不限'
}
jsonData
.
unshift
(
obj
)
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
allClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
jsonData
.
unshift
(
obj
)
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
allClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
});
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allClassList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
ClassList
=
this
.
allClassList
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
getBranchList
(){
//获取校区
getSchoolDropdown
({}).
then
(
res
=>
{
this
.
schoolList
=
res
.
Data
;
var
obj
=
{
SName
:
'全部'
,
SId
:
'-1'
}
this
.
schoolList
.
unshift
(
obj
);
}).
catch
(()
=>
{
}
});
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allClassList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
ClassList
=
this
.
allClassList
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
getBranchList
()
{
//获取校区
getSchoolDropdown
({}).
then
(
res
=>
{
this
.
schoolList
=
res
.
Data
;
var
obj
=
{
SName
:
'全部'
,
SId
:
'-1'
}
this
.
schoolList
.
unshift
(
obj
);
}).
catch
(()
=>
{
})
},
//获取部门下拉数据
getDepartList
(
id
)
{
if
(
id
==-
1
){
id
=
0
}
let
msg
=
{
School_Id
:
id
}
getDeptTree
(
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
DeptList
=
res
.
Data
;
}
})
},
getChild
(
deptArray
)
{
var
tempStr
=
""
;
if
(
deptArray
&&
deptArray
!=
''
)
{
tempStr
=
deptArray
;
}
if
(
tempStr
)
{
this
.
msg
.
Depart_Id
=
tempStr
;
}
else
{
this
.
msg
.
Depart_Id
=
0
;
})
},
//获取部门下拉数据
getDepartList
(
id
)
{
if
(
id
==
-
1
)
{
id
=
0
}
let
msg
=
{
School_Id
:
id
}
getDeptTree
(
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
DeptList
=
res
.
Data
;
}
})
},
getChild
(
deptArray
)
{
var
tempStr
=
""
;
if
(
deptArray
&&
deptArray
!=
''
)
{
tempStr
=
deptArray
;
}
if
(
tempStr
)
{
this
.
msg
.
Depart_Id
=
tempStr
;
}
else
{
this
.
msg
.
Depart_Id
=
0
;
}
this
.
resetSearch
();
},
//筛选员工
filterFn2
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
PersionList
=
this
.
AllemployeeList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
//获取员工列表
getEmployee
()
{
var
qMsg
=
{
EmployeeName
:
""
}
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
let
obj
=
{
EmployeeName
:
'不限'
,
Id
:
0
}
this
.
resetSearch
();
},
//筛选员工
filterFn2
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
PersionList
=
this
.
AllemployeeList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
res
.
Data
.
unshift
(
obj
)
var
jsonData
=
res
.
Data
;
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
AllemployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
})
},
//获取员工列表
getEmployee
()
{
var
qMsg
=
{
EmployeeName
:
""
}
})
},
getPeriodList
()
{
//获取周期下拉列表
getSellAchievementsPeriodsList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
PeriodsList
=
res
.
Data
let
obj
=
{
Name
:
'不限'
,
Id
:
0
}
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
let
obj
=
{
EmployeeName
:
'不限'
,
Id
:
0
}
res
.
Data
.
unshift
(
obj
)
var
jsonData
=
res
.
Data
;
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
AllemployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
this
.
PeriodsList
.
unshift
(
obj
)
// 从业绩表跳转带参
if
(
this
.
$route
.
query
.
Periods
)
{
this
.
PeriodsList
.
forEach
(
item
=>
{
if
(
item
.
Periods
==
this
.
$route
.
query
.
Periods
)
{
this
.
msg
.
PeriodId
=
item
.
Id
}
})
},
getPeriodList
(){
//获取周期下拉列表
getSellAchievementsPeriodsList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
PeriodsList
=
res
.
Data
let
obj
=
{
Name
:
'不限'
,
Id
:
0
}
this
.
PeriodsList
.
unshift
(
obj
)
// 从业绩表跳转带参
if
(
this
.
$route
.
query
.
Periods
){
this
.
PeriodsList
.
forEach
(
item
=>
{
if
(
item
.
Periods
==
this
.
$route
.
query
.
Periods
){
this
.
msg
.
PeriodId
=
item
.
Id
}
})
}
}
})
},
tcexport
(){
//导出
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
msg
));
EduDownLoad
(
"/SellAchievements/GetSellAchievementsStatisticsToExcel"
,
msg
,
"业绩提成统计.xls"
)
},
goUrlclass
(
path
,
Names
){
//班级
let
Name
=
encodeURI
(
Names
)
this
.
OpenNewUrl
(
path
,
{
ClassName
:
Name
,
});
},
goUrlorderList
(
path
,
row
){
//订单跳转
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
// EnterID:row.UserId
});
},
getmingxi
(
row
){
//明细
getSellAchievementsChangeLog
({
OrderId
:
row
.
OrderId
,
UserId
:
row
.
UserId
,
UserType
:
row
.
UserType
,
IsDept
:
row
.
IsDept
,
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
ChangeLog
=
res
.
Data
})
}
}
);
}
}
}
)
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
\ No newline at end of file
tcexport
()
{
//导出
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
msg
));
EduDownLoad
(
"/SellAchievements/GetSellAchievementsStatisticsToExcel"
,
msg
,
"业绩提成统计.xls"
)
},
goUrlclass
(
path
,
Names
)
{
//班级
let
Name
=
encodeURI
(
Names
)
this
.
OpenNewUrl
(
path
,
{
ClassName
:
Name
,
});
},
goUrlorderList
(
path
,
row
)
{
//订单跳转
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
});
},
getmingxi
(
row
)
{
//明细
getSellAchievementsChangeLog
({
OrderId
:
row
.
OrderId
,
UserId
:
row
.
UserId
,
UserType
:
row
.
UserType
,
IsDept
:
row
.
IsDept
,
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
ChangeLog
=
res
.
Data
}
});
}
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
\ No newline at end of file
src/pages/stuMan/classPlan.vue
View file @
3fb561df
...
...
@@ -34,7 +34,7 @@
<el-option
:key=
"0"
label=
"全部"
:value=
"0"
>
</el-option>
<el-option
:key=
"1"
label=
"跟班课"
:value=
"1"
>
</el-option>
<el-option
:key=
"2"
label=
"试听课"
:value=
"2"
>
</el-option>
<el-option
:key=
"
2
"
label=
"预约课"
:value=
"3"
>
</el-option>
<el-option
:key=
"
3
"
label=
"预约课"
:value=
"3"
>
</el-option>
<div
slot=
"prefix"
class=
"full-height flex items-center"
style=
"color: #000; padding-right: 10px"
>
类型:
</div>
...
...
src/pages/stuMan/classRecord.vue
View file @
3fb561df
...
...
@@ -2,8 +2,7 @@
<div
class=
"page-body MainPlan xg"
>
<div
class=
"col row wrap q-col-gutter-md"
>
<div
class=
"col-2"
>
<el-select
v-model=
"msg.TeacherId"
style=
"width: 100%"
placeholder=
"教师"
size=
"small"
@
change=
"getTypeWay()"
>
<el-select
v-model=
"msg.TeacherId"
style=
"width: 100%"
placeholder=
"教师"
size=
"small"
@
change=
"getTypeWay()"
>
<el-option
v-for=
"item in TeacherList"
:key=
"item.TeacherName"
:label=
"item.TeacherName"
:value=
"item.TId"
>
</el-option>
<div
slot=
"prefix"
class=
"full-height flex items-center"
style=
"color: #000; padding-right: 10px"
>
...
...
@@ -36,13 +35,18 @@
<el-option
:key=
"0"
label=
"全部"
:value=
"0"
>
</el-option>
<el-option
:key=
"1"
label=
"跟班课"
:value=
"1"
>
</el-option>
<el-option
:key=
"2"
label=
"试听课"
:value=
"2"
>
</el-option>
<el-option
:key=
"
2
"
label=
"预约课"
:value=
"3"
>
</el-option>
<el-option
:key=
"
3
"
label=
"预约课"
:value=
"3"
>
</el-option>
<div
slot=
"prefix"
class=
"full-height flex items-center"
style=
"color: #000; padding-right: 10px"
>
状态:
</div>
</el-select>
</div>
<div
class=
"col-2"
>
<el-input
v-model=
"msg.StuName"
style=
"width: 100%"
placeholder=
"学员姓名"
size=
"small"
@
input=
"getTypeWay()"
clearable
>
<div
slot=
"prefix"
class=
"full-height flex items-center"
style=
"color: #000; padding-right: 10px"
>
学员:
</div>
</el-input>
</div>
</div>
<teachTable
v-if=
"commonType == 2"
:tableData=
"tableData"
:PageCount=
"PageCount"
:setMsg=
"tabMsg"
:showCZ=
"true"
...
...
@@ -54,11 +58,13 @@
import
{
getTeacherDropDownList
,
queryClassRoomList
,
getStudentDorpDownList
,
}
from
"../../api/school/index"
;
import
{
GetClassPlanStatistical
,
GetClassPlanStatisticalPage
,
}
from
"../../api/teacher/index"
;
import
classmateForm
from
"../../components/course/classmate-form"
;
import
teachTable
from
"../teacher/components/teachTable"
;
import
changeClassForm
from
"../../components/teacher/changeClassForm.vue"
;
...
...
@@ -81,13 +87,15 @@
TeacherId
:
0
,
ClassRoomId
:
0
,
dataList
:
{},
loading
:
false
,
loading
:
false
,
msg
:
{
StartTime
:
""
,
EndTime
:
""
,
TeacherId
:
0
,
ClassRoomId
:
0
,
ClassType
:
0
,
Student_Id
:
""
,
StuName
:
""
,
},
commonType
:
2
,
//1日历模式 2列表模式
typeName
:
"列表模式"
,
...
...
@@ -101,6 +109,7 @@
ClassRoomId
:
0
,
ClassType
:
0
,
OrderBy
:
1
,
StuName
:
""
,
},
tableData
:
[],
//表格数据
PageCount
:
0
,
...
...
@@ -121,6 +130,7 @@
},
},
today
:
""
,
StuList
:
[],
//学员列表
};
},
created
()
{
...
...
@@ -148,6 +158,13 @@
this
.
getTableList
();
},
methods
:
{
queryStuList
()
{
getStudentDorpDownList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
StuList
=
res
.
Data
;
}
});
},
refreshPage
()
{
this
.
getPlanList
();
},
...
...
@@ -212,10 +229,11 @@
this
.
tabMsg
.
EndTime
=
this
.
msg
.
EndTime
;
this
.
tabMsg
.
ClassRoomId
=
this
.
msg
.
ClassRoomId
;
this
.
tabMsg
.
ClassType
=
this
.
msg
.
ClassType
;
this
.
tabMsg
.
TeacherId
=
this
.
msg
.
TeacherId
;
this
.
loading
=
true
;
this
.
tabMsg
.
TeacherId
=
this
.
msg
.
TeacherId
;
this
.
tabMsg
.
StuName
=
this
.
msg
.
StuName
;
this
.
loading
=
true
;
GetClassPlanStatisticalPage
(
this
.
tabMsg
).
then
((
res
)
=>
{
this
.
loading
=
false
;
this
.
loading
=
false
;
if
(
res
.
Code
==
1
)
{
this
.
tableData
=
res
.
Data
.
PageData
;
this
.
PageCount
=
res
.
Data
.
PageCount
;
...
...
@@ -235,11 +253,9 @@
},
},
};
</
script
>
<
style
lang=
"scss"
>
.xg
.el-input--prefix
.el-input__inner
{
padding-left
:
50px
;
}
</
style
>
</
style
>
\ No newline at end of file
src/pages/teacher/assessmentType.vue
View file @
3fb561df
...
...
@@ -38,7 +38,8 @@
</q-td>
<template
v-for=
"(subItem,subIndex) in props.row.SubtypeList[cIndex].OptionList"
>
<q-td
:key=
"subIndex+200000"
class=
"assessmentType_td"
>
<div
style=
"width:150px;white-space:normal; "
>
{{
subItem
.
LevelDesc
}}
<q-badge
color=
"green"
v-if=
"subItem.LevelScore>0"
>
<div
style=
"width:150px;white-space:normal; "
>
{{
subItem
.
LevelDesc
}}
<q-badge
color=
"green"
v-if=
"subItem.LevelScore>0"
>
{{
subItem
.
LevelScore
}}
分
</q-badge>
</div>
...
...
@@ -60,7 +61,8 @@
</q-td>
<template
v-for=
"(subItem,subIndex) in props.row.SubtypeList[cIndex].OptionList"
>
<q-td
:key=
"subIndex+400000"
class=
"assessmentType_td"
>
<div
style=
"width:150px;white-space:normal; "
>
{{
subItem
.
LevelDesc
}}
<q-badge
color=
"green"
v-if=
"subItem.LevelScore>0"
>
<div
style=
"width:150px;white-space:normal; "
>
{{
subItem
.
LevelDesc
}}
<q-badge
color=
"green"
v-if=
"subItem.LevelScore>0"
>
{{
subItem
.
LevelScore
}}
分
</q-badge>
</div>
...
...
@@ -113,7 +115,6 @@
this
.
columns
=
[];
queryAssessmentTypeList
(
this
.
msg
).
then
(
res
=>
{
this
.
loading
=
false
;
console
.
log
(
"res"
,
res
);
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
result
;
this
.
columns
=
res
.
Data
.
header
;
...
...
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