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
3d713c9f
Commit
3d713c9f
authored
May 17, 2022
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增待办工作功能
parent
7d947a57
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
6231 additions
and
3274 deletions
+6231
-3274
quasar.conf.js
quasar.conf.js
+2
-2
App.vue
src/App.vue
+1
-1
index.js
src/api/stuMan/index.js
+70
-2
font.css
src/assets/css/font.css
+4
-0
table.sass
src/assets/css/table.sass
+34
-11
student-genjin.vue
src/components/school/student/student-genjin.vue
+1
-0
student-yuefang.vue
src/components/school/student/student-yuefang.vue
+264
-198
stulist.vue
src/components/school/student/stulist.vue
+825
-655
business.vue
src/components/todolist/business.vue
+90
-0
contract.vue
src/components/todolist/contract.vue
+290
-0
distribution.vue
src/components/todolist/distribution.vue
+121
-0
graduation.vue
src/components/todolist/graduation.vue
+125
-0
index.vue
src/components/todolist/index.vue
+179
-0
payee.vue
src/components/todolist/payee.vue
+123
-0
students.vue
src/components/todolist/students.vue
+121
-0
todayFollow.vue
src/components/todolist/todayFollow.vue
+121
-0
todoStu.vue
src/components/todolist/todoStu.vue
+121
-0
todoToday.vue
src/components/todolist/todoToday.vue
+121
-0
Work.vue
src/pages/Work.vue
+13
-1
FinancialDocuments.vue
src/pages/financial/financalDocument/FinancialDocuments.vue
+2992
-1985
changeClassManager.vue
src/pages/teacher/changeClassManager.vue
+613
-419
No files found.
quasar.conf.js
View file @
3d713c9f
...
...
@@ -48,7 +48,7 @@ module.exports = function(ctx) {
env
:
ctx
.
dev
?
{
//API: 'http://localhost:5001/api',
API
:
'http://192.168.10.
2:8085
/api'
,
API
:
'http://192.168.10.
46:8300
/api'
,
// API: 'https://eduapi.oytour.com/api',
API_ZC
:
'http://192.168.10.2:8087/api'
,
API_SK
:
'ws:192.168.10.214:'
,
...
...
@@ -260,4 +260,4 @@ module.exports = function(ctx) {
}
}
}
}
\ No newline at end of file
}
src/App.vue
View file @
3d713c9f
...
...
@@ -25,7 +25,7 @@ export default {
</
script
>
<
style
>
@import
url("//at.alicdn.com/t/font_2077629_
9ty53q1g2bo
.css")
;
@import
url("//at.alicdn.com/t/font_2077629_
3u1r9gsz178
.css")
;
@font-face
{
font-family
:
"din"
;
src
:
url("./assets/font/DIN-Bold.otf")
format
(
"opentype"
);
...
...
src/api/stuMan/index.js
View file @
3d713c9f
...
...
@@ -11,7 +11,75 @@ export function getStudentAttendanceDayStatistics(data) {
});
}
export
function
getTodayVisitList
(
data
){
export
function
getTodayClue
(
data
)
{
return
request
({
url
:
'/UserCenter/GetTodayClue'
,
method
:
'post'
,
data
});
}
export
function
getTodayConnect
(
data
)
{
return
request
({
url
:
'/UserCenter/GetTodayConnect'
,
method
:
'post'
,
data
});
}
export
function
getMyClue
(
data
)
{
return
request
({
url
:
'/UserCenter/MyClue'
,
method
:
'post'
,
data
});
}
export
function
getMyStudent
(
data
)
{
return
request
({
url
:
'/UserCenter/MyStudent'
,
method
:
'post'
,
data
});
}
export
function
getTodayFollow
(
data
)
{
return
request
({
url
:
'/UserCenter/TodayFollow'
,
method
:
'post'
,
data
});
}
export
function
getGraduateStudent
(
data
)
{
return
request
({
url
:
'/UserCenter/GraduateStudent'
,
method
:
'post'
,
data
});
}
export
function
getMyOrderNotReceiveContract
(
data
)
{
return
request
({
url
:
'/UserCenter/MyOrderNotReceiveContract'
,
method
:
'post'
,
data
});
}
export
function
getMyOrderNotBalance
(
data
)
{
return
request
({
url
:
'/UserCenter/MyOrderNotBalance'
,
method
:
'post'
,
data
});
}
export
function
getTodayStatic
(
data
)
{
return
request
({
url
:
'/UserCenter/GetTodayStatic'
,
method
:
'post'
,
data
});
}
export
function
getTodayVisitList
(
data
)
{
return
request
({
url
:
'/DutyPlan/GetDutyTodayVisit'
,
method
:
'post'
,
...
...
@@ -96,4 +164,4 @@ export function getCoffeeOrderList(data) {
method
:
'post'
,
data
})
}
\ No newline at end of file
}
src/assets/css/font.css
View file @
3d713c9f
...
...
@@ -11,3 +11,7 @@
.perfectFont
{
font-family
:
'perfectFont'
!important
;
}
.pingfang
{
font-family
:
'pingfang'
!important
;
}
src/assets/css/table.sass
View file @
3d713c9f
.sticky-column-table
max-width
:
100%
thead
background
:
rgb
(
245
,
246
,
247
)
thead
tr
:first-child
height
:
40px
line-height
:
14px
thead
tr
:first-child
th
font-size
:
12px
font-weight
:
400
...
...
@@ -31,14 +31,14 @@
.sticky-tow-column-table
max-width
:
100%
thead
background
:
rgb
(
245
,
246
,
247
)
thead
tr
:first-child
height
:
40px
line-height
:
14px
thead
tr
:first-child
th
font-size
:
12px
font-weight
:
400
...
...
@@ -49,7 +49,7 @@
td
:nth-child
(
-n
+
2
)
background-color
:
#fff
th
:nth-child
(
-n
+
2
),
td
:nth-child
(
-n
+
2
)
position
:
sticky
...
...
@@ -57,19 +57,21 @@
z-index
:
1
box-shadow
:
rgba
(
0
,
0
,
0
,
0
.05
)
2px
0px
0px
th
:nth-child
(
-n
+
2
)
z-index
:
30
!
important
td
.none-shadow
box-shadow
:
none
.sticky-right-column-table
max-width
:
100%
thead
background
:
rgb
(
245
,
246
,
247
)
thead
tr
:first-child
height
:
40px
line-height
:
14px
thead
tr
:first-child
th
font-size
:
12px
font-weight
:
400
...
...
@@ -90,8 +92,8 @@
.sticky-header-table
/* height or max-height is important */
// .q-table__bottom,
.q-table__top
,
.q-table__bottom
,
thead
tr
:first-child
th
/* bg color is important for th; just specify one */
background-color
:
#f5f6f7
...
...
@@ -123,7 +125,7 @@
z-index
:
3
/* bg color is important; just specify one */
/* background: #fff */
background-color
:
#f5f6f7
background-color
:
#f5f6f7
/* this will be the loading indicator */
thead
tr
:last-child
th
...
...
@@ -158,11 +160,32 @@
position
:
sticky
z-index
:
2
!
important
thead
tr
th
:nth-child
(
-n
+
2
)
z-index
:
3
!
important
z-index
:
30
!
important
thead
tr
:first-child
th
top
:
0
/* this is when the loading indicator appears */
&
.q-table--loading
thead
tr
:last-child
th
/* height of all previous header rows */
top
:
48px
.my-sticky-header-table
/* height or max-height is important */
// height: 310px
.q-table__top
,
thead
tr
:first-child
th
/* bg color is important for th; just specify one */
background-color
:
#f5f6f7
z-index
:
2
thead
tr
th
position
:
sticky
z-index
:
20
thead
tr
:first-child
th
top
:
0
/* this is when the loading indicator appears */
&
.q-table--loading
thead
tr
:last-child
th
/* height of all previous header rows */
top
:
48px
\ No newline at end of file
top
:
48px
src/components/school/student/student-genjin.vue
View file @
3d713c9f
...
...
@@ -178,6 +178,7 @@ export default {
});
this
.
getList
();
this
.
clearMsg
();
this
.
$emit
(
"success"
);
}
})
.
catch
(()
=>
{});
...
...
src/components/school/student/student-yuefang.vue
View file @
3d713c9f
This diff is collapsed.
Click to expand it.
src/components/school/student/stulist.vue
View file @
3d713c9f
This diff is collapsed.
Click to expand it.
src/components/todolist/business.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
</div>
<div
class=
"q-my-md row"
>
<q-input
standout
v-model=
"msg.billId"
dense
type=
"text"
style=
"width:250px;"
label=
"业务单号"
class=
"q-mr-md"
/>
<q-select
clearable
dense
filled
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.receipt"
:options=
"OrderTypeList"
emit-value
map-options
style=
"width:250px;"
label=
"单据类型"
class=
"q-mr-md"
/>
<!--
<q-btn
color=
"primary"
class=
"q-px-md"
label=
"查询"
unelevated
dense
@
click=
"searchKeyHandler"
/>
-->
</div>
<div
style=
"height:calc(100% - 108px);overflow-y:auto;"
>
<changeClassManager
:isComponents=
"true"
:billId=
"msg.billId"
:receipt=
"msg.receipt"
></changeClassManager>
</div>
</div>
</
template
>
<
script
>
import
changeClassManager
from
"../../pages/teacher/changeClassManager.vue"
;
import
{
GetEducationReceiptType
}
from
"../../api/teacher/index"
;
export
default
{
components
:
{
changeClassManager
},
props
:
[
"node"
],
data
()
{
return
{
msg
:
{
billId
:
""
,
receipt
:
null
},
OrderTypeList
:
[]
};
},
mounted
()
{
this
.
getEducationType
();
},
methods
:
{
getEducationType
()
{
GetEducationReceiptType
()
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
OrderTypeList
=
res
.
Data
;
}
})
.
catch
(()
=>
{});
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/contract.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
已创建了订单,但是还未领取合同的学员订单。
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<q-table
:loading=
"loading"
:data=
"stus"
:columns=
"cols"
:pagination=
"pageMsg"
no-data-label=
"暂无相关数据"
flat
separator=
"none"
class=
"sticky-right-column-table sticky-column-table my-sticky-header-table"
style=
"height:100%;"
hide-bottom
>
<template
v-slot:body-cell-OrderId=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-primary cursor-pointer"
@
click=
"goOrderdetails(props.row)"
>
{{
props
.
value
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-GuestName=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-primary cursor-pointer"
@
click=
"showStuDetailInfo(props.row)"
>
{{
props
.
value
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-RenewState=
"props"
>
<q-td
:props=
"props"
>
<div
:class=
"
{ 'text-negative': props.value == '2' }"
@click="showStuDetailInfo(props.row)"
>
{{
props
.
value
==
2
?
"续费订单"
:
"首次报名"
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-options=
"props"
>
<q-td
:props=
"props"
>
<q-btn
color=
"primary"
flat
dense
label=
"领取合同"
class=
"f12"
@
click=
"takeContractTwo(props.row)"
/>
</q-td>
</
template
>
</q-table>
</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>
</div>
<MyOrderForm
v-if=
"isShowmyorderForm"
:save-obj=
"myorderObjOption"
@
close=
"closeMOSaveForm"
></MyOrderForm>
<studentRightForm
:isJudgeTrans=
"0"
v-if=
"isShowStuRight"
:BelongType=
"1"
:checkType=
"0"
:save-obj=
"stuObj"
@
close=
"closeStuForm"
></studentRightForm>
<eduinfo-form
v-if=
"isShowEduForm"
:seting-obj=
"eduObj"
@
close=
"closeEdudia"
@
success=
"refreshPage"
>
</eduinfo-form>
</div>
</template>
<
script
>
import
{
getMyOrderNotReceiveContract
}
from
"../../api/stuMan/index"
;
import
EduinfoForm
from
"../sale/eduinfo-form.vue"
;
import
MyOrderForm
from
"../sale/myOrder-form.vue"
;
import
studentRightForm
from
"../school/student/studentRight-form"
;
export
default
{
components
:
{
MyOrderForm
,
studentRightForm
,
EduinfoForm
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
20
,
KeyWords
:
""
},
cols
:
[
{
name
:
"OrderId"
,
label
:
"订单编号"
,
field
:
"OrderId"
,
align
:
"left"
},
{
name
:
"ClassName"
,
label
:
"班级名称"
,
field
:
"ClassName"
,
align
:
"left"
},
{
name
:
"CourseName"
,
label
:
"课程名称"
,
field
:
"CourseName"
,
align
:
"left"
},
{
name
:
"GuestName"
,
label
:
"学员名称"
,
field
:
"GuestName"
,
align
:
"left"
},
{
name
:
"StuGuestStateName"
,
label
:
"学员状态"
,
field
:
"StuGuestStateName"
,
align
:
"left"
},
{
name
:
"OrderStateName"
,
label
:
"订单状态"
,
field
:
"OrderStateName"
,
align
:
"left"
},
{
name
:
"TotalHours"
,
label
:
"总课时"
,
field
:
"TotalHours"
,
align
:
"left"
},
{
name
:
"CompleteHours"
,
label
:
"完成课时"
,
field
:
"CompleteHours"
,
align
:
"left"
},
{
name
:
"RenewState"
,
label
:
"订单类型"
,
field
:
"RenewState"
,
align
:
"left"
},
{
name
:
"options"
,
label
:
"操作"
,
align
:
"left"
}
],
myorderObjOption
:
null
,
isShowmyorderForm
:
false
,
stuObj
:
null
,
isShowStuRight
:
false
,
pageMsg
:
{
rowsPerPage
:
20
},
eduObj
:
null
,
isShowEduForm
:
false
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getMyOrderNotReceiveContract
(
this
.
msg
)
.
then
(
r
=>
{
this
.
stus
=
r
.
Data
.
PageData
;
this
.
pageCount
=
r
.
Data
.
PageCount
;
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
1000
);
})
.
catch
(
e
=>
{
this
.
loading
=
false
;
});
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
},
//显示订单详情
goOrderdetails
(
item
)
{
item
.
tab
=
""
;
this
.
myorderObjOption
=
item
;
this
.
isShowmyorderForm
=
true
;
},
//关闭订单详情
closeMOSaveForm
()
{
this
.
isShowmyorderForm
=
false
;
},
showStuDetailInfo
(
item
)
{
this
.
stuObj
=
{
StuId
:
item
.
StuId
};
this
.
isShowStuRight
=
true
;
},
closeStuForm
()
{
this
.
isShowStuRight
=
false
;
},
takeContractTwo
(
item
)
{
let
obj
=
{
OrderId
:
item
.
OrderId
,
GuestId
:
item
.
GuestId
,
ContractId
:
0
};
this
.
eduObj
=
obj
;
this
.
isShowPop
=
false
;
this
.
isShowEduForm
=
true
;
},
closeEdudia
()
{
this
.
isShowEduForm
=
false
;
},
refreshPage
()
{
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/distribution.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
线索分配给我,但是从未跟进过的线索
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getMyClue
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getMyClue
(
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
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/graduation.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
剩余不足20个课时的学员,将会出现在此报表中
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getGraduateStudent
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getGraduateStudent
(
this
.
msg
)
.
then
(
r
=>
{
r
.
Data
.
PageData
.
forEach
(
x
=>
{
x
.
StuName
=
x
.
GuestName
;
x
.
StuId
=
x
.
Student_Id
;
});
this
.
stus
=
r
.
Data
.
PageData
;
this
.
pageCount
=
r
.
Data
.
PageCount
;
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
1000
);
})
.
catch
(
e
=>
{
this
.
loading
=
false
;
});
},
refreshPage
()
{
this
.
getStudent
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/index.vue
0 → 100644
View file @
3d713c9f
<
template
>
<div
class=
"full-height q-pa-md row bg-grey-2"
>
<div
class=
"todolist-left-box bg-white rounded-borders q-py-md q-mr-md"
>
<q-tabs
v-model=
"currentMenu"
vertical
no-caps
inline-label
active-color=
"primary"
>
<q-tab
v-for=
"x in menulist"
:key=
"x.id"
:name=
"x.id.toString()"
:icon=
"`iconfont $
{x.icon}`"
:label="x.name"
>
</q-tab>
</q-tabs>
</div>
<div
class=
"col bg-white rounded-borders full-height"
>
<q-tab-panels
v-model=
"currentMenu"
animated
swipeable
vertical
transition-prev=
"jump-up"
transition-next=
"jump-up"
class=
"full-height"
>
<q-tab-panel
name=
"1"
class=
"full-height"
>
<todoToday
:node=
"menulist[parseInt(currentMenu) - 1]"
></todoToday>
</q-tab-panel>
<q-tab-panel
name=
"2"
class=
"full-height"
>
<todoStu
:node=
"menulist[parseInt(currentMenu) - 1]"
></todoStu>
</q-tab-panel>
<q-tab-panel
name=
"3"
class=
"full-height"
>
<distribution
:node=
"menulist[parseInt(currentMenu) - 1]"
></distribution>
</q-tab-panel>
<q-tab-panel
name=
"4"
class=
"full-height"
>
<students
:node=
"menulist[parseInt(currentMenu) - 1]"
></students>
</q-tab-panel>
<q-tab-panel
name=
"5"
class=
"full-height"
>
<contractInfo
:node=
"menulist[parseInt(currentMenu) - 1]"
></contractInfo>
</q-tab-panel>
<q-tab-panel
name=
"6"
class=
"full-height"
>
<payee
:node=
"menulist[parseInt(currentMenu) - 1]"
></payee>
</q-tab-panel>
<q-tab-panel
name=
"7"
class=
"full-height"
>
<todayFollow
:node=
"menulist[parseInt(currentMenu) - 1]"
></todayFollow>
</q-tab-panel>
<q-tab-panel
name=
"8"
class=
"full-height"
>
<graduation
:node=
"menulist[parseInt(currentMenu) - 1]"
></graduation>
</q-tab-panel>
<q-tab-panel
name=
"9"
class=
"full-height"
>
<financialDocuments
:isComponents=
"true"
></financialDocuments>
</q-tab-panel>
<q-tab-panel
name=
"10"
class=
"full-height"
>
<business
:node=
"menulist[parseInt(currentMenu) - 1]"
></business>
</q-tab-panel>
</q-tab-panels>
</div>
</div>
</
template
>
<
script
>
import
todoToday
from
"./todoToday.vue"
;
import
todoStu
from
"./todoStu.vue"
;
import
distribution
from
"./distribution.vue"
;
import
students
from
"./students.vue"
;
import
todayFollow
from
"./todayFollow.vue"
;
import
graduation
from
"./graduation.vue"
;
import
contractInfo
from
"./contract.vue"
;
import
payee
from
"./payee.vue"
;
import
business
from
"./business.vue"
;
import
financialDocuments
from
"../../pages/financial/financalDocument/FinancialDocuments.vue"
;
export
default
{
components
:
{
todoToday
,
todoStu
,
distribution
,
students
,
todayFollow
,
graduation
,
contractInfo
,
payee
,
business
,
financialDocuments
},
data
()
{
return
{
currentMenu
:
null
,
currentNode
:
null
,
menulist
:
[
{
id
:
1
,
name
:
"今日需联系线索"
,
msg
:
0
,
icon
:
"icon-xiansuo"
},
{
id
:
2
,
name
:
"今日需联系学员"
,
msg
:
0
,
icon
:
"icon-xueyuan2"
},
{
id
:
3
,
name
:
"分配给我的线索"
,
msg
:
0
,
icon
:
"icon-fenpei"
},
{
id
:
4
,
name
:
"分配给我的学员"
,
msg
:
0
,
icon
:
"icon-fenpeijiaose"
},
{
id
:
5
,
name
:
"待申领合同"
,
msg
:
0
,
icon
:
"icon-hetong"
},
{
id
:
6
,
name
:
"待收款提醒"
,
msg
:
0
,
icon
:
"icon-shoukuan"
},
{
id
:
7
,
name
:
"今日被跟进学员"
,
msg
:
0
,
icon
:
"icon-genjin"
},
{
id
:
8
,
name
:
"即将毕业学员"
,
msg
:
0
,
icon
:
"icon-biyejieye"
},
{
id
:
9
,
name
:
"待审核财务单据"
,
msg
:
0
,
icon
:
"icon-caiwu1"
},
{
id
:
10
,
name
:
"待审核业务单据"
,
msg
:
0
,
icon
:
"icon-yewu"
}
]
};
},
mounted
()
{
this
.
currentMenu
=
this
.
menulist
[
0
].
id
.
toString
();
},
methods
:
{}
};
</
script
>
<
style
>
.todolist-left-box
{
width
:
200px
;
overflow-y
:
auto
;
}
.q-tabs--vertical
.justify-center
,
.q-tabs--vertical
.flex-center
{
justify-content
:
unset
!important
;
}
</
style
>
src/components/todolist/payee.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<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"
/>
<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>
</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>
</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
;
});
},
refreshPage
()
{
this
.
getStudent
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/students.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
分配给我的学员,但是我从未填写跟进信息的学员
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getMyStudent
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getMyStudent
(
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
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/todayFollow.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
查询我参与的学员,并且今日有被跟进的信息
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getTodayFollow
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getTodayFollow
(
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
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/todoStu.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
课程顾问或老师需要按照公司的规定,定期跟进学员的最新动态信息,本表中是你还未跟进的学员
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getTodayConnect
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getTodayConnect
(
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
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/components/todolist/todoToday.vue
0 → 100644
View file @
3d713c9f
<
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}`"
/>
<div
class=
"pingfang text-subtitle1"
>
{{
node
.
name
}}
</div>
<q-icon
name=
"iconfont icon-bangzhu"
class=
"q-ml-md"
>
<q-tooltip
anchor=
"bottom middle"
:offset=
"[10, 10]"
>
在线索的约访中添加了预约记录为今日的信息
</q-tooltip>
</q-icon>
</div>
<div
class=
"q-my-md row items-center"
>
<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)"
>
<stulist
:dataList=
"stus"
@
reload=
"getStudent"
@
success=
"refreshPage"
:loading=
"loading"
ref=
"stuList"
:showHeader=
"false"
:isJudgeTrans=
"isJudgeTrans"
height=
"100%"
:noSelect=
"true"
></stulist>
</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>
</div>
</div>
</
template
>
<
script
>
import
stulist
from
"../school/student/stulist"
;
import
{
getTodayClue
}
from
"../../api/stuMan/index"
;
export
default
{
components
:
{
stulist
},
props
:
[
"node"
],
data
()
{
return
{
stus
:
[],
loading
:
false
,
isJudgeTrans
:
1
,
pageCount
:
0
,
msg
:
{
PageIndex
:
1
,
pageSize
:
12
,
KeyWords
:
""
}
};
},
mounted
()
{
this
.
getStudent
();
},
methods
:
{
getStudent
()
{
if
(
this
.
loading
)
return
;
this
.
loading
=
true
;
getTodayClue
(
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
();
},
changePage
()
{
this
.
getStudent
();
},
searchKeyHandler
()
{
this
.
msg
.
PageIndex
=
1
;
this
.
getStudent
();
}
}
};
</
script
>
<
style
></
style
>
src/pages/Work.vue
View file @
3d713c9f
...
...
@@ -14,6 +14,13 @@
:class=
"[chosenMenu == 6 ? 'text-weight-bold' : '']"
label=
"活动日历"
></q-btn>
<q-btn
flat
@
click=
"changeMenu(7)"
:color=
"chosenMenu == 7 ? 'primary' : 'blue-grey-14'"
:class=
"[chosenMenu == 7 ? 'text-weight-bold' : '']"
label=
"待办工作"
></q-btn>
<q-btn
flat
@
click=
"changeMenu(5)"
...
...
@@ -79,6 +86,9 @@
label=
"我的上课计划"
></q-btn>
</div>
<div
class=
"bg-white col"
v-if=
"chosenMenu == 7"
>
<todolist></todolist>
</div>
<div
class=
"bg-white col"
v-if=
"chosenMenu == 6"
>
<eventsCalendar></eventsCalendar>
</div>
...
...
@@ -124,6 +134,7 @@ import mySchedule from "./scheduling/mySchedule";
import
myClassmate
from
"./scheduling/myClassmate"
;
import
work
from
"../components/work/index"
;
import
eventsCalendar
from
"../components/stuMan/eventsCalendar"
;
import
todolist
from
"../components/todolist/index"
;
export
default
{
components
:
{
...
...
@@ -134,7 +145,8 @@ export default {
mySchedule
,
myClassmate
,
work
,
eventsCalendar
eventsCalendar
,
todolist
},
name
:
"PageIndex"
,
data
()
{
...
...
src/pages/financial/financalDocument/FinancialDocuments.vue
View file @
3d713c9f
This diff is collapsed.
Click to expand it.
src/pages/teacher/changeClassManager.vue
View file @
3d713c9f
This diff is collapsed.
Click to expand it.
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