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
80e505b4
Commit
80e505b4
authored
Dec 09, 2021
by
zhengke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改
parent
030c6d27
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
602 additions
and
39 deletions
+602
-39
App.vue
src/App.vue
+1
-1
studentRight-form.vue
src/components/school/student/studentRight-form.vue
+583
-0
student.vue
src/pages/school/student.vue
+18
-38
No files found.
src/App.vue
View file @
80e505b4
...
@@ -20,7 +20,7 @@ export default {
...
@@ -20,7 +20,7 @@ export default {
</
script
>
</
script
>
<
style
>
<
style
>
@import
url("//at.alicdn.com/t/font_2077629_
9j9u1nj8nka
.css")
;
@import
url("//at.alicdn.com/t/font_2077629_
70it4rlfqmf
.css")
;
.q-scrollarea__thumb
{
.q-scrollarea__thumb
{
z-index
:
999999
!important
;
z-index
:
999999
!important
;
}
}
...
...
src/components/school/student/studentRight-form.vue
0 → 100644
View file @
80e505b4
<
template
>
<q-dialog
v-model=
"persistent"
full-height
maximized
position=
"right"
persistent
@
hide=
"closeCutomer"
transition-show=
"slide-left"
>
<div
class=
"customMain"
>
<div
class=
"custom_Top"
>
<div
class=
"custom_HLeft"
>
<div
class=
"nameplate_avatar"
>
<img
v-if=
"baseObj.StuIcon"
style=
"width:100%;height:100%;"
:src=
"baseObj.StuIcon"
alt
/>
<div
class=
"student_Name"
v-else
>
<span
v-if=
"baseObj.StuName"
>
{{
baseObj
.
StuName
.
substring
(
0
,
1
)
}}
</span>
</div>
</div>
<div
class=
"Name_List"
>
<div
class=
"F_16"
>
{{
baseObj
.
StuName
}}
</div>
<!--
<div
class=
"wechat_Name"
>
张飞微信
</div>
-->
</div>
</div>
<div
class=
"custom_HRight"
>
<q-btn
color=
"primary"
size=
"sm"
label=
"创建待办"
/>
</div>
</div>
<div
class=
"custom_Bottom"
>
<div
class=
"detail-info"
>
<div
class=
"info_title"
>
客户管理
</div>
<div
class=
"info_content"
style=
"margin-bottom:0;"
>
<div
class=
"customer_info_component"
>
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
客户名称
</div>
<div
class=
"stage_value"
>
<q-input
filled
v-model=
"baseObj.StuName"
></q-input>
</div>
</div>
</div>
<div
class=
"customer_info_component"
>
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
性别
</div>
<div
class=
"stage_value"
>
<q-radio
v-model=
"baseObj.StuSex"
:val=
"0"
label=
"男"
/>
<q-radio
v-model=
"baseObj.StuSex"
:val=
"1"
label=
"女"
/>
</div>
</div>
</div>
<div
class=
"customer_info_component"
>
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
电话
</div>
<div
class=
"stage_value"
>
<q-input
filled
v-model=
"baseObj.StuTel"
></q-input>
</div>
</div>
</div>
<div
class=
"customer_info_component"
>
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
出生日期
</div>
<div
class=
"stage_value"
>
<q-input
filled
v-model=
"baseObj.StuBirthStr"
style=
"width:182px;"
mask=
"date"
label=
"出生日期"
>
<template
v-slot:append
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
ref=
"qDateProxy1"
transition-show=
"scale"
transition-hide=
"scale"
>
<q-date
v-model=
"baseObj.StuBirthStr"
@
input=
"() => $refs.qDateProxy1.hide()"
/>
</q-popup-proxy>
</q-icon>
</
template
>
</q-input>
</div>
</div>
</div>
<div
class=
"customer_info_component"
>
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
所属校区
</div>
<div
class=
"stage_value"
>
<q-input
filled
v-model=
"baseObj.SName"
></q-input>
</div>
</div>
</div>
<div
class=
"custom_Line"
></div>
<div
class=
"info_title"
>
基本资料
</div>
<div
class=
"info_content"
>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
客户来源
</div>
<div
class=
"item_value"
>
<q-select
filled
v-model=
"customMsg.cusfrom"
:options=
"customFrom"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户来源"
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
创建人
</div>
<div
class=
"item_value"
>
<q-input
filled
v-model=
"customMsg.createBy"
></q-input>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
状态
</div>
<div
class=
"item_value"
>
<q-select
filled
v-model=
"customMsg.customState"
:options=
"customState"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
/>
</div>
</div>
</div>
</div>
</div>
<div
class=
"detail-travel"
>
<div
class=
"detail_first"
>
<q-tabs
v-model=
"ckedTab"
dense
align=
"left"
class=
"text-teal"
style=
"width:200px;"
>
<q-tab
name=
"1"
label=
"操作记录"
/>
<q-tab
name=
"2"
label=
"操作"
/>
</q-tabs>
<div
style=
"flex:1;overflow:hidden;"
>
<div
class=
"detail_Main"
>
<div
class=
"tripTypeContent"
style=
"flex-shrink:0"
v-if=
"ckedTab==2"
>
<div
v-for=
"(qItem,qIndex) in visitList"
:key=
"qIndex"
:class=
"{ 'ckedClass': qIndex+1 == secondType }"
@
click=
"getckedType(qItem)"
>
{{ qItem.Name }}
</div>
</div>
<
template
v-if=
"ckedTab==1"
>
<div
style=
"display:flex;flex:1;flex-direction: column;overflow:hidden;"
>
<div
class=
"TimeLineDiv"
>
1
<!--
<q-timeline
color=
"primary"
>
<q-timeline-entry
v-for=
"(tItem,tIndex) in data.tripDataList"
:key=
"tIndex"
>
<template
v-slot:title
>
<div
style=
"font-size:14px;"
>
{{
tItem
.
Description
}}
</div>
</
template
>
<
template
v-slot:subtitle
>
<div
class=
"customUpdateTime"
>
<div>
{{
tItem
.
UpdateTime
}}
</div>
<div>
{{
tItem
.
UpdateByName
}}
</div>
</div>
</
template
>
<div>
<div>
{{ tItem.Remark }}
</div>
<div
class=
"img_box"
>
<img
v-for=
"(e,i) in tItem.ImageList"
:key=
"i"
:src=
"e"
class=
"img"
/>
</div>
<div
class=
"file_box"
>
<div
v-for=
"(e,i) in tItem.FileList"
:key=
"i"
class=
"flex items-center file_name"
>
附件:
<span
style=
"color:#000"
>
{{ e.FileName }}
</span>
<div
class=
"del_btn"
@
click=
"DownLoadFileByUrl(e.FileUrl,e.FileName)"
>
下载
</div>
</div>
</div>
</div>
</q-timeline-entry>
</q-timeline>
-->
</div>
</div>
<div
style=
"margin:20px 0;"
>
<!-- <q-pagination class="full-width justify-end" v-model="customTripMsg.pageIndex" color="primary"
:max="data.TripPageCount" input @update:model-value="changePage" /> -->
</div>
</template>
<
template
v-else
>
<template
v-if=
"secondType==1"
>
<div
class=
"row wrap"
style=
"margin-top:20px;"
>
<q-input
filled
class=
"col-6 q-pb-lg"
label=
"校区"
></q-input>
</div>
<div
class=
"row wrap"
>
<q-input
filled
class=
"col-6 q-pb-lg"
mask=
"date"
label=
"日期"
>
<template
v-slot:append
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
ref=
"qDateProxy1"
transition-show=
"scale"
transition-hide=
"scale"
>
<q-date
@
input=
"() => $refs.qDateProxy1.hide()"
/>
</q-popup-proxy>
</q-icon>
</
template
>
</q-input>
</div>
<div
class=
"row warp"
>
<q-input
filled
mask=
"time"
:rules=
"['time']"
class=
"col-6 q-pb-lg"
>
<
template
v-slot:append
>
<q-icon
name=
"access_time"
class=
"cursor-pointer"
>
<q-popup-proxy
transition-show=
"scale"
transition-hide=
"scale"
>
<q-time>
<div
class=
"row items-center justify-end"
>
<q-btn
v-close-popup
label=
"Close"
color=
"primary"
flat
/>
</div>
</q-time>
</q-popup-proxy>
</q-icon>
</
template
>
</q-input>
</div>
<div
class=
"row wrap"
>
<q-input
filled
class=
"col-6 q-pb-lg"
label=
"接待人"
></q-input>
</div>
<div
class=
"row wrap"
>
<q-input
filled
type=
"textarea"
class=
"col-6 q-pb-lg"
label=
"备注"
></q-input>
</div>
</template>
<
template
v-if=
"secondType==2"
>
2
</
template
>
<
template
v-if=
"secondType==3"
>
3
</
template
>
<
template
v-if=
"secondType==4"
>
4
</
template
>
</template>
</div>
</div>
</div>
</div>
</div>
<div
class=
"dialog-out-close"
@
click=
"closeCutomer"
>
<i
class=
"iconfont icon-close"
style=
"font-size:26px;"
/>
</div>
</div>
</q-dialog>
</template>
<
script
>
export
default
{
meta
:
{
title
:
"学员管理"
},
components
:
{},
props
:
{
saveObj
:
{
type
:
Object
,
default
:
null
}
},
data
()
{
return
{
persistent
:
true
,
ckedTab
:
1
,
secondType
:
1
,
visitList
:[{
Name
:
'到访'
,
Id
:
1
},{
Name
:
'约访'
,
Id
:
2
},{
Name
:
'跟进'
,
Id
:
3
},{
Name
:
'试听'
,
Id
:
4
}],
customFrom
:[{
Name
:
'员工录入'
,
Id
:
1
},{
Name
:
'同业录入'
,
Id
:
2
}],
customState
:[{
Name
:
'无效客户'
,
Id
:
1
},{
Name
:
'有效客户'
,
Id
:
2
},{
Name
:
'新客户'
,
Id
:
3
}],
msg
:
{
},
baseObj
:{},
customMsg
:{
cusfrom
:
1
,
createBy
:
''
,
customState
:
1
}
}
},
mounted
()
{
console
.
log
(
this
.
saveObj
,
'saveObj'
);
this
.
baseObj
=
this
.
saveObj
;
},
methods
:
{
closeCutomer
()
{
this
.
$emit
(
'close'
)
},
//点击第二排
getckedType
(
obj
){
this
.
secondType
=
obj
.
Id
;
}
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.custom_RModel
{
width
:
500px
;
height
:
100%
;
}
.customMain
{
width
:
1000px
!
important
;
display
:
flex
;
flex-direction
:
column
;
height
:
100
vh
;
padding
:
15px
17px
0
17px
;
background-color
:
#f4f4f6
;
}
.custom_Top
{
width
:
100%
;
padding
:
22px
;
background
:
#fff
;
border-radius
:
8px
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.custom_HLeft
{
display
:
flex
;
}
.nameplate_avatar
{
width
:
60px
;
height
:
60px
;
flex-shrink
:
0
;
margin-right
:
14px
;
border-radius
:
5px
;
overflow
:
hidden
;
}
.F_16
{
font-size
:
16px
;
}
.Name_List
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
space-around
;
overflow
:
hidden
;
}
.wechat_Name
{
color
:
#9999a8
;
display
:
flex
;
font-size
:
14px
;
}
.custom_Bottom
{
margin-top
:
17px
;
flex
:
1
;
display
:
flex
;
margin-top
:
17px
;
overflow
:
hidden
;
}
.detail-info
{
flex-shrink
:
0
;
box-sizing
:
border-box
;
display
:
flex
;
flex-direction
:
column
;
width
:
350px
;
height
:
100%
;
padding
:
28px
0
;
margin-right
:
13px
;
background
:
#fff
;
border-radius
:
8px
8px
0
0
;
overflow
:
auto
;
}
.
detail-info
:
:-
webkit-scrollbar
{
display
:
none
;
}
.detail-travel
{
width
:
100%
;
flex-grow
:
1
;
display
:
flex
;
flex-direction
:
column
;
padding-top
:
28px
;
background
:
#fff
;
border-radius
:
8px
8px
0
0
;
overflow
:
hidden
;
}
.info_title
{
padding
:
0
22px
;
margin-bottom
:
20px
;
flex-shrink
:
0
;
font-size
:
16px
;
font-weight
:
700
;
font-family
:
Microsoft
YaHei
,
Avenir
,
Helvetica
,
Arial
,
sans-serif
!
important
;
}
.info_content
{
margin-bottom
:
30px
;
}
.customer_info_Stage
{
width
:
100%
;
padding
:
0
7px
;
cursor
:
pointer
;
display
:
flex
;
align-items
:
center
;
width
:
100%
;
padding
:
12px
22px
;
justify-content
:
space-between
;
}
.stage_label
{
color
:
#606266
;
flex-shrink
:
0
;
margin-right
:
10px
;
}
.stage_value
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
;
}
.customer_info_component
{
width
:
100%
;
}
.edit_bar
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
12px
22px
;
}
.item_label
{
color
:
#606266
;
flex-shrink
:
0
;
width
:
120px
;
font-size
:
14px
;
}
.edit_info_wrap
{
padding
:
0
22px
12px
;
}
.info_item
{
position
:
relative
;
display
:
flex
;
padding
:
12px
22px
;
align-items
:
center
;
}
.item_value
{
flex
:
1
;
font-size
:
14px
;
word-break
:
break-all
;
overflow
:
hidden
;
}
.custom_Line
{
width
:
calc
(
100%
-
44px
);
margin
:
16px
22px
;
border-bottom
:
1px
solid
#d7d7d7
;
}
.custom_Edit
{
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
width
:
78px
;
height
:
26px
;
margin-right
:
3px
;
border
:
1px
dashed
#858598
;
border-radius
:
4px
;
font-size
:
12px
;
cursor
:
pointer
;
}
.tripTypeContent
{
display
:
flex
;
margin-top
:
20px
;
overflow-x
:
auto
;
white-space
:
nowrap
;
}
.ckedClass
{
color
:
#3470ff
;
font-weight
:
700
;
}
.tripTypeContent
div
{
margin-right
:
20px
;
cursor
:
pointer
;
}
.TimeLineDiv
{
margin-top
:
20px
;
overflow
:
auto
;
// height:620px;
flex
:
1
;
height
:
100%
;
padding-right
:
20px
;
}
.q-timeline__title
{
margin-bottom
:
5px
;
}
.customUpdateTime
{
display
:
flex
;
justify-content
:
space-between
;
font-size
:
14px
;
color
:
#9696a6
;
}
.q-timeline__subtitle
{
opacity
:
1
;
font-weight
:
normal
;
}
.follow_Component
{
padding
:
0
22px
;
margin-top
:
10px
;
width
:
100%
;
background-color
:
#f6f6f6
;
border-radius
:
5px
;
}
.q-textarea
.q-field__native
{
padding-top
:
0
;
}
.editer_input
.q-field__native
{
height
:
50px
;
}
.detail_first
{
margin
:
0
22px
;
display
:
flex
;
flex-direction
:
column
;
height
:
100%
;
}
.detail_Main
{
display
:
flex
;
flex-direction
:
column
;
width
:
100%
;
height
:
100%
;
padding-top
:
10px
;
overflow
:
hidden
;
}
.img_box
{
margin-top
:
10px
;
.img
{
width
:
100px
;
height
:
100px
;
object-fit
:
cover
;
box-shadow
:
0px
10px
30px
0px
rgba
(
36
,
36
,
36
,
0
.2
);
margin
:
5px
;
border-radius
:
10px
;
}
}
.file_box
{
margin-top
:
10px
;
.file_name
{
font-size
:
14px
;
color
:
#9696A6
;
margin
:
3px
0
;
.del_btn
{
margin-left
:
10px
;
padding-left
:
5px
;
border-left
:
1px
solid
var
(
--
q-primary
);
color
:
var
(
--
q-primary
);
cursor
:
pointer
;
}
}
}
.student_Name
{
width
:
100%
;
height
:
100%
;
background
:
#004d40
;
color
:
#fff
;
text-align
:
center
;
line-height
:
60px
;
font-size
:
20px
;
}
</
style
>
src/pages/school/student.vue
View file @
80e505b4
...
@@ -31,12 +31,12 @@
...
@@ -31,12 +31,12 @@
<img
:src=
"props.value"
/>
<img
:src=
"props.value"
/>
</q-avatar>
</q-avatar>
<q-avatar
size=
"md"
color=
"teal-10"
text-color=
"white"
v-if=
"!props.value"
>
<q-avatar
size=
"md"
color=
"teal-10"
text-color=
"white"
v-if=
"!props.value"
>
{{
props
.
row
.
StuName
}}
</q-avatar>
{{
props
.
row
.
StuName
.
substring
(
0
,
1
)
}}
</q-avatar>
</q-td>
</q-td>
</
template
>
</
template
>
<
template
v-slot:body-cell-StuName=
"props"
>
<
template
v-slot:body-cell-StuName=
"props"
>
<q-td
:props=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
>
{{
props
.
value
}}
</div>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row)"
>
{{
props
.
value
}}
</div>
</q-td>
</q-td>
</
template
>
</
template
>
<
template
v-slot:body-cell-StuSex=
"props"
>
<
template
v-slot:body-cell-StuSex=
"props"
>
...
@@ -54,21 +54,10 @@
...
@@ -54,21 +54,10 @@
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</
template
>
<
template
v-slot:body-cell-optioned=
"props"
>
<q-td
:props=
"props"
>
<div
style=
"min-width:190px;width:100%"
>
<q-btn
v-if=
"props.row.StudentAccount==''"
flat
size=
"xs"
icon=
"iconfont icon-ziyuan"
color=
"warning"
style=
"font-weight:400"
class=
"q-mr-xs"
label=
"创建账号"
@
click=
"createAccount(props.row.StuId)"
/>
<q-btn
flat
size=
"xs"
icon=
"iconfont icon-ziyuan"
color=
"warning"
style=
"font-weight:400"
class=
"q-mr-xs"
label=
"重置密码"
@
click=
"resetPw(props.row.StuId)"
/>
<q-btn
flat
size=
"xs"
icon=
"edit"
color=
"accent"
style=
"font-weight:400"
label=
"编辑"
@
click=
"EditStudent(props.row)"
/>
</div>
</q-td>
</
template
>
</q-table>
</q-table>
<student-form
v-if=
"isShowStuForm"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshPage"
>
<student-form
v-if=
"isShowStuForm"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshPage"
>
</student-form>
</student-form>
<studentRight-form
v-if=
"isShowStuRight"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshPage"
></studentRight-form>
</div>
</div>
</div>
</div>
</template>
</template>
...
@@ -83,12 +72,15 @@
...
@@ -83,12 +72,15 @@
resetPassword
resetPassword
}
from
'../../api/users/user.js'
}
from
'../../api/users/user.js'
import
studentForm
from
'../../components/school/student/student-form'
import
studentForm
from
'../../components/school/student/student-form'
import
studentRightForm
from
'../../components/school/student/studentRight-form'
export
default
{
export
default
{
meta
:
{
meta
:
{
title
:
"学员管理"
title
:
"学员管理"
},
},
components
:
{
components
:
{
studentForm
,
studentForm
,
studentRightForm
},
},
data
()
{
data
()
{
return
{
return
{
...
@@ -130,12 +122,6 @@
...
@@ -130,12 +122,6 @@
field
:
'SName'
,
field
:
'SName'
,
align
:
'left'
,
align
:
'left'
,
},
},
{
name
:
'AreaName'
,
label
:
'区域'
,
field
:
'AreaName'
,
align
:
'left'
,
},
{
{
name
:
'Status'
,
name
:
'Status'
,
label
:
'状态'
,
label
:
'状态'
,
...
@@ -147,23 +133,6 @@
...
@@ -147,23 +133,6 @@
label
:
'创建人'
,
label
:
'创建人'
,
align
:
'left'
,
align
:
'left'
,
field
:
'CreateByName'
field
:
'CreateByName'
},
{
name
:
'CreateTimeStr'
,
label
:
'入学时间'
,
align
:
'left'
,
field
:
'CreateTimeStr'
},
{
name
:
'StudentAccount'
,
label
:
'账号'
,
align
:
'left'
,
field
:
'StudentAccount'
},
{
name
:
'optioned'
,
label
:
'操作'
,
field
:
'StuId'
}
}
],
],
data
:
[],
data
:
[],
...
@@ -195,7 +164,8 @@
...
@@ -195,7 +164,8 @@
stuOption
:
null
,
stuOption
:
null
,
schoolList
:
[],
schoolList
:
[],
isShowStuForm
:
false
,
isShowStuForm
:
false
,
resetLoading
:
false
resetLoading
:
false
,
isShowStuRight
:
false
}
}
},
},
mounted
()
{
mounted
()
{
...
@@ -346,6 +316,16 @@
...
@@ -346,6 +316,16 @@
},
},
closeStuForm
()
{
closeStuForm
()
{
this
.
isShowStuForm
=
false
;
this
.
isShowStuForm
=
false
;
this
.
isShowStuRight
=
false
;
},
//点击学生姓名弹出
getStuRight
(
obj
){
if
(
obj
)
{
this
.
stuOption
=
obj
;
}
else
{
this
.
stuOption
=
null
;
}
this
.
isShowStuRight
=
true
;
}
}
},
},
}
}
...
...
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