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
186605a9
Commit
186605a9
authored
Jan 12, 2022
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调整流程
parent
2ae2c1a9
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
2976 additions
and
1950 deletions
+2976
-1950
sale.js
src/api/sale/sale.js
+13
-5
choiceapproval.vue
src/components/enterprise/choiceapproval.vue
+251
-194
reserveclass-form.vue
src/components/school/student/reserveclass-form.vue
+339
-242
student-Assit.vue
src/components/school/student/student-Assit.vue
+263
-191
student-genjin.vue
src/components/school/student/student-genjin.vue
+184
-143
student-shiting.vue
src/components/school/student/student-shiting.vue
+133
-99
student-visit.vue
src/components/school/student/student-visit.vue
+388
-272
student-yuefang.vue
src/components/school/student/student-yuefang.vue
+275
-195
studentRight-form.vue
src/components/school/student/studentRight-form.vue
+36
-2
stulist.vue
src/components/school/student/stulist.vue
+563
-358
mystu.vue
src/pages/sale/mystu.vue
+353
-238
stuDistributionRule.vue
src/pages/system/stuDistributionRule.vue
+163
-0
stuManageConfig.vue
src/pages/system/stuManageConfig.vue
+15
-11
No files found.
src/api/sale/sale.js
View file @
186605a9
...
...
@@ -50,7 +50,7 @@ export function getMyOrderPageList(data) {
* 销售 报名统计
*
*/
export
function
getMyOrderStatisticsPageList
(
data
)
{
export
function
getMyOrderStatisticsPageList
(
data
)
{
return
request
({
url
:
'/order/GetOrderPageListStatistics'
,
method
:
'post'
,
...
...
@@ -61,7 +61,7 @@ export function getMyOrderPageList(data) {
* 销售 留学就业统计
*
*/
export
function
getMyStudyOrderStatisticsPageList
(
data
)
{
export
function
getMyStudyOrderStatisticsPageList
(
data
)
{
return
request
({
url
:
'/order/GetStudyOrderPageListStatistics'
,
method
:
'post'
,
...
...
@@ -122,7 +122,7 @@ export function getGuestEducationEnumList(data) {
export
function
getGuestLearningGoalsEnumList
(
data
)
{
return
request
({
// url: '/order/GetGuestLearningGoalsEnumList',
url
:
'/CustomerStudent/GetLearningGoalsList'
,
url
:
'/CustomerStudent/GetLearningGoalsList'
,
method
:
'post'
,
data
})
...
...
@@ -349,7 +349,7 @@ export function GetSelectClassOrderList(data) {
* 今日订单 修改订单的关联老师
*
*/
export
function
setOrderHelpEnterId
(
data
)
{
export
function
setOrderHelpEnterId
(
data
)
{
return
request
({
url
:
'/Order/SetOrderHelpEnterId'
,
method
:
'post'
,
...
...
@@ -390,7 +390,7 @@ export function getMyCustomerList(data) {
export
function
GetStuChannelList
(
data
)
{
return
request
({
// url: '/User/GetStuChannelList',
url
:
"/CustomerStudent/GetChannelList"
,
url
:
"/CustomerStudent/GetChannelList"
,
method
:
'post'
,
data
});
...
...
@@ -432,6 +432,14 @@ export function SetStudentAssist(data) {
});
}
export
function
SetStudentAssistBatch
(
data
)
{
return
request
({
url
:
'/CustomerStudent/SetStudentAssistBatch'
,
method
:
'post'
,
data
});
}
// 删除协助数据
export
function
RemoveStudentAssist
(
data
)
{
return
request
({
...
...
src/components/enterprise/choiceapproval.vue
View file @
186605a9
<
style
>
.choiceappoval
.ApprovalProcessBg
{
.choiceappoval
.ApprovalProcessBg
{
background
:
#f8f8f8
;
max-height
:
400px
;
overflow-y
:
auto
;
}
}
.choiceappoval
.Approval_yxList
{
.choiceappoval
.Approval_yxList
{
width
:
300px
;
background
:
#f8f8f8
;
min-height
:
400px
;
max-height
:
400px
;
overflow-y
:
auto
;
}
}
.choiceappoval
.Approval_yxList
li
{
.choiceappoval
.Approval_yxList
li
{
display
:
inline-block
;
width
:
100%
;
line-height
:
40px
;
text-indent
:
15px
;
border-bottom
:
1px
dotted
#eee
;
}
}
</
style
>
<
template
>
...
...
@@ -29,67 +29,90 @@
<q-card-section
class=
"row items-center q-pb-none "
>
<div
class=
"text-h6"
>
选择企业成员
</div>
<q-space
/>
<q-btn
icon=
"close"
flat
round
dense
v-close-popup
/>
<!--
<q-btn
icon=
"close"
flat
round
dense
v-close-popup
@
click=
"closeEditOrder"
/>
-->
</q-card-section>
<q-separator
/>
<q-card-section
class=
"q-pt-none"
style=
"padding: 20px 0;"
>
<div
style=
"display: flex;align-items: flex-start;justify-content: space-between;"
>
<div
style=
"display: flex;align-items: flex-start;justify-content: space-between;"
>
<div
style=
"width: 300px; margin: 0 20px;"
>
<p
style=
"margin: 0 0 10px 0;display: flex;align-items: center;"
>
选择:
<el-input
style=
"width: 200px;"
placeholder=
"输入关键字进行过滤"
v-model=
"filterText"
>
<p
style=
"margin: 0 0 10px 0;display: flex;align-items: center;"
>
选择:
<el-input
style=
"width: 200px;"
placeholder=
"输入关键字进行过滤"
v-model=
"filterText"
>
</el-input>
</p>
<el-tree
class=
'ApprovalProcessBg'
:filter-node-method=
"filterNode"
:data=
"memberList"
show-checkbox
ref=
"treeUser"
:props=
"defaultProps"
:render-after-expand=
"false"
node-key=
"DeptId"
@
check-change=
"handleNodeChange"
>
<el-tree
class=
"ApprovalProcessBg"
:filter-node-method=
"filterNode"
:data=
"memberList"
show-checkbox
ref=
"treeUser"
:props=
"defaultProps"
:render-after-expand=
"false"
node-key=
"DeptId"
@
check-change=
"handleNodeChange"
>
</el-tree>
</div>
<div
style=
"width: 300px; margin: 0 20px;"
>
<p
style=
"margin: 0 0 20px 0;"
>
已选:
</p>
<div
class=
"Approval_yxList"
>
<li
v-for=
"item in showMember"
>
{{
item
.
DeptName
}}
<i
@
click=
"mySetCheckedKeys(item.DeptId)"
class=
"el-icon-circle-close showMemberIcon"
></i>
<li
v-for=
"item in showMember"
>
{{
item
.
DeptName
}}
<i
@
click=
"mySetCheckedKeys(item.DeptId)"
class=
"el-icon-circle-close showMemberIcon"
></i>
</li>
</div>
</div>
</div>
</q-card-section>
<q-separator
/>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
class=
"q-mr-md"
label=
"取消"
@
click=
"closeEditOrder"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
label=
"确定"
@
click=
"saveOrderInfo()"
/>
<q-btn
color=
"accent"
class=
"q-mr-md"
label=
"确定"
@
click=
"saveOrderInfo()"
/>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</
template
>
<
script
>
import
{
getEmployeeAddrBook
}
from
'../../api/users/user'
import
selectMaterial
from
"./selectMaterial"
export
default
{
import
{
getEmployeeAddrBook
}
from
"../../api/users/user"
;
import
selectMaterial
from
"./selectMaterial"
;
export
default
{
props
:
{
outerindex
:
{
type
:
String
,
default
:
''
,
default
:
""
},
byval
:
{
byval
:
{
type
:
Array
,
default
:
[],
default
:
[]
},
cptype
:{
//1是列表上使用2 新增使用
type
:
String
,
default
:
'1'
,
cptype
:
{
//1是列表上使用2 新增使用
type
:
String
,
default
:
"1"
}
},
data
()
{
...
...
@@ -98,45 +121,43 @@
memberList
:
[],
filterText
:
""
,
defaultProps
:
{
children
:
'ChildList'
,
label
:
'DeptName'
,
children
:
"ChildList"
,
label
:
"DeptName"
},
userList
:
[],
showMember
:
[],
memberSetCheckedKeys
:
[],
sysUserKeys
:
[],
}
sysUserKeys
:
[]
};
},
created
()
{
if
(
this
.
byval
.
length
>
0
)
{
if
(
this
.
byval
.
length
>
0
)
{
this
.
memberSetCheckedKeys
=
[];
this
.
showMember
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
byval
))
this
.
byval
.
forEach
(
x
=>
{
this
.
memberSetCheckedKeys
.
push
(
x
.
DeptId
)
})
this
.
showMember
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
byval
));
this
.
byval
.
forEach
(
x
=>
{
this
.
memberSetCheckedKeys
.
push
(
x
.
DeptId
);
});
}
this
.
getMember
()
//部门下面选择员工
},
mounted
()
{
this
.
getMember
();
//部门下面选择员工
},
mounted
()
{},
watch
:
{
filterText
(
val
)
{
this
.
$refs
.
treeUser
.
filter
(
val
);
},
}
},
methods
:
{
getMember
()
{
let
_arr
=
this
.
sysUserKeys
.
concat
(
this
.
memberSetCheckedKeys
)
getEmployeeAddrBook
({}).
then
(
res
=>
{
let
_arr
=
this
.
sysUserKeys
.
concat
(
this
.
memberSetCheckedKeys
);
getEmployeeAddrBook
({})
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
memberList
=
res
.
Data
this
.
memberList
=
res
.
Data
;
let
_this
=
this
;
_this
.
$refs
.
treeUser
.
setCheckedKeys
(
_arr
);
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
filterNode
(
value
,
data
)
{
...
...
@@ -146,64 +167,100 @@
handleNodeChange
(
data
,
checked
)
{
data
.
IsCheck
=
checked
;
if
(
data
.
DataType
==
2
&&
data
.
IsCheck
)
{
//是员工且选中
let
isExsit
=
false
if
(
data
.
DataType
==
2
&&
data
.
IsCheck
)
{
//是员工且选中
let
isExsit
=
false
;
this
.
showMember
.
forEach
(
x
=>
{
if
(
x
.
DeptId
==
data
.
DeptId
)
{
isExsit
=
true
return
false
isExsit
=
true
;
return
false
;
}
})
});
if
(
!
isExsit
)
{
this
.
showMember
.
push
({
DeptName
:
data
.
DeptName
,
DeptId
:
data
.
DeptId
})
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
)
});
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
);
}
}
else
if
(
data
.
DataType
==
2
&&
!
data
.
IsCheck
)
{
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
)
!=
-
1
)
{
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
),
1
)
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
)
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
)
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
)
!=
-
1
)
{
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
DeptId
),
1
);
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
);
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
);
}
}
}
if
(
data
.
DataType
!=
2
&&
data
.
IsCheck
)
{
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
==
-
1
)
{
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
)
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
==
-
1
)
{
this
.
memberSetCheckedKeys
.
push
(
data
.
DeptId
);
}
}
else
if
(
data
.
DataType
==
2
&&
!
data
.
IsCheck
)
{
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
)
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
)
if
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
DeptId
),
1
);
if
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
data
.
ParentId
)
!=
-
1
)
{
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
data
.
ParentId
),
1
);
}
}
}
},
mySetCheckedKeys
(
id
)
{
if
(
this
.
memberSetCheckedKeys
.
length
==
0
)
return
if
(
this
.
memberSetCheckedKeys
.
length
==
0
)
return
;
if
(
id
==
-
1
)
{
this
.
$refs
.
treeUser
.
setCheckedKeys
(
this
.
memberSetCheckedKeys
)
return
this
.
$refs
.
treeUser
.
setCheckedKeys
(
this
.
memberSetCheckedKeys
);
return
;
}
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
id
),
1
)
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
id
),
1
)
this
.
showMember
.
splice
(
this
.
showMember
.
findIndex
(
item
=>
item
.
DeptId
===
id
),
1
);
this
.
memberSetCheckedKeys
.
splice
(
this
.
memberSetCheckedKeys
.
findIndex
(
item
=>
item
===
id
),
1
);
this
.
$refs
.
treeUser
.
setCheckedKeys
(
this
.
memberSetCheckedKeys
);
},
//关闭弹窗
closeEditOrder
()
{
this
.
$emit
(
'close'
)
this
.
$emit
(
"close"
);
},
saveOrderInfo
()
{
this
.
$emit
(
'success'
,
this
.
showMember
,
this
.
cptype
)
this
.
$emit
(
"success"
,
this
.
showMember
,
this
.
cptype
);
}
}
}
};
</
script
>
src/components/school/student/reserveclass-form.vue
View file @
186605a9
<
style
scoped
>
.Student_Date
.el-input__inner
{
.Student_Date
.el-input__inner
{
background
:
transparent
!important
;
border
:
0
!important
;
padding-right
:
0
!important
;
}
}
</
style
>
<
template
>
<div>
<div
class=
"row wrap"
>
<q-btn
label=
"选择试听课"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowTeacher=true"
/>
<q-btn
label=
"选择试听课"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowTeacher = true"
/>
</div>
<template
v-if=
"false"
>
<div
class=
"row studentDate"
>
<q-field
filled
class=
"col-6 q-pb-lg q-pr-lg"
dense
>
<template
v-slot:control
>
<el-date-picker
v-model=
"addMsg.ClassDate"
ref=
"ClassDate"
:rules=
"[val => !!val || '请选择预约日期']"
style=
"width:225px"
size=
"mini"
type=
"date"
placeholder=
"预约日期"
value-format=
"yyyy-MM-dd"
>
<template
v-slot:control
>
<el-date-picker
v-model=
"addMsg.ClassDate"
ref=
"ClassDate"
:rules=
"[val => !!val || '请选择预约日期']"
style=
"width:225px"
size=
"mini"
type=
"date"
placeholder=
"预约日期"
value-format=
"yyyy-MM-dd"
>
</el-date-picker>
</
template
>
</q-field>
<div
class=
"col-6 q-pr-lg Student_Date "
>
<q-field
filled
class=
"q-pb-lg"
dense
>
<
template
v-slot:control
>
<el-time-select
v-model=
"addMsg.ClassTime"
size=
"mini"
ref=
"ClassTime"
style=
"width:50%"
:picker-options=
"
{
<
template
v-slot:control
>
<el-time-select
v-model=
"addMsg.ClassTime"
size=
"mini"
ref=
"ClassTime"
style=
"width:50%"
:picker-options=
"
{
start: '09:00',
step: '00:15',
end: '21:00',
maxTime:addMsg.EndTime
}" placeholder="预约开始时间">
maxTime: addMsg.EndTime
}"
placeholder="预约开始时间"
>
</el-time-select>
<el-time-select
v-model=
"addMsg.EndTime"
size=
"mini"
dense
ref=
"EndTime"
style=
"width:50%"
:picker-options=
"
{
<el-time-select
v-model=
"addMsg.EndTime"
size=
"mini"
dense
ref=
"EndTime"
style=
"width:50%"
:picker-options=
"
{
start: '09:00',
step: '00:15',
end: '21:00',
minTime:addMsg.ClassTime
}" placeholder="预约结束时间">
</el-time-select>
minTime: addMsg.ClassTime
}"
placeholder="预约结束时间"
>
</el-time-select>
</
template
>
</q-field>
</div>
</div>
<div
class=
"row wrap"
>
<q-select
filled
stack-label
option-value=
"Name"
dense
option-label=
"Name"
@
input=
"getTeacherChoose(addMsg.ClassContent)"
v-model=
"addMsg.ClassContent"
ref=
"ClassContent"
:options=
"ContentList"
:rules=
"[val => !!val || '请选择主讲内容']"
label=
"主讲内容"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"TId"
option-label=
"TeacherName"
v-model=
"addMsg.TeacherId"
ref=
"TeacherId"
:options=
"TeacherList"
label=
"选择教师"
dense
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"Name"
dense
option-label=
"Name"
@
input=
"getTeacherChoose(addMsg.ClassContent)"
v-model=
"addMsg.ClassContent"
ref=
"ClassContent"
:options=
"ContentList"
:rules=
"[val => !!val || '请选择主讲内容']"
label=
"主讲内容"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"TId"
option-label=
"TeacherName"
v-model=
"addMsg.TeacherId"
ref=
"TeacherId"
:options=
"TeacherList"
label=
"选择教师"
dense
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
</div>
<div
class=
"row wrap"
>
<q-select
filled
stack-label
option-value=
"RoomId"
dense
option-label=
"RoomName"
v-model=
"addMsg.ClassRoomId"
ref=
"ClassRoomId"
:options=
"ClassRoomList"
label=
"关联教室"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"Id"
dense
option-label=
"LessonName"
v-model=
"addMsg.TrialLessonId"
:options=
"TrialList"
label=
"试听课程"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"RoomId"
dense
option-label=
"RoomName"
v-model=
"addMsg.ClassRoomId"
ref=
"ClassRoomId"
:options=
"ClassRoomList"
label=
"关联教室"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
stack-label
option-value=
"Id"
dense
option-label=
"LessonName"
v-model=
"addMsg.TrialLessonId"
:options=
"TrialList"
label=
"试听课程"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
</div>
<div
class=
"row wrap justify-end q-pr-lg"
style=
"margin-bottom:10px;"
>
<q-btn
label=
"关闭"
flat
color=
"accent q-mb-lg"
size=
"md"
style=
"margin-right:10px;"
@
click=
"closeClassForm"
/>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveAppointForm()"
/>
<q-btn
label=
"关闭"
flat
color=
"accent q-mb-lg"
size=
"md"
style=
"margin-right:10px;"
@
click=
"closeClassForm"
/>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveAppointForm()"
/>
</div>
<audition-form
v-if=
"isShowTeacher"
@
close=
"closeAuditForm"
@
getchildInfo=
"getchildInfo"
></audition-form>
</template>
<audition-form
v-if=
"isShowTeacher"
@
close=
"closeAuditForm"
@
getchildInfo=
"getchildInfo"
></audition-form>
</div>
</template>
<
script
>
import
{
SetVisitorReserve
,
}
from
"../../../api/scheduling/schedu"
;
import
{
import
{
SetVisitorReserve
}
from
"../../../api/scheduling/schedu"
;
import
{
getTeacherDropDownList
,
queryClassRoomList
,
GetTrialLessonList
}
from
"../../../api/school/index"
;
import
auditionForm
from
'../../schedul/audition-form'
export
default
{
}
from
"../../../api/school/index"
;
import
auditionForm
from
"../../schedul/audition-form"
;
export
default
{
components
:
{
auditionForm
},
...
...
@@ -93,27 +183,34 @@
TeacherId
:
0
,
//教师编号
ClassRoomId
:
0
,
//教室编号
ClassContent
:
""
,
//主讲内容
TrialLessonId
:
''
TrialLessonId
:
""
},
ContentList
:
[{
ContentList
:
[
{
Id
:
1
,
Name
:
'少儿类:主要以丰富可与时间和兴趣为主,要求课堂轻松活跃。趣味性十足'
},
{
Name
:
"少儿类:主要以丰富可与时间和兴趣为主,要求课堂轻松活跃。趣味性十足"
},
{
Id
:
2
,
Name
:
'兴趣类:成年人,对日语学习从兴趣开始,要求课堂丰富有趣'
},
{
Name
:
"兴趣类:成年人,对日语学习从兴趣开始,要求课堂丰富有趣"
},
{
Id
:
3
,
Name
:
'实用类:对于日语学习有一定的需求(考研、就业等),要求学习过程专业,干货多'
},
{
Name
:
"实用类:对于日语学习有一定的需求(考研、就业等),要求学习过程专业,干货多"
},
{
Id
:
4
,
Name
:
'留学类:打算去往日本留学(本科、硕士、语言学校、私塾等)'
}],
Name
:
"留学类:打算去往日本留学(本科、硕士、语言学校、私塾等)"
}
],
ClassRoomList
:
[],
//教师列表
TeacherList
:
[],
//教师列表
AllTeacherList
:
[],
//全部教师列表
TrialList
:
[],
//试听课程列表
isShowTeacher
:
false
,
//是否显示试听课弹窗
}
isShowTeacher
:
false
//是否显示试听课弹窗
};
},
created
()
{
this
.
GetTrialDrop
();
...
...
@@ -133,7 +230,7 @@
//选择主讲内容赋值选择教师
getTeacherChoose
(
content
)
{
var
TList
=
[];
this
.
addMsg
.
TeacherId
=
''
;
this
.
addMsg
.
TeacherId
=
""
;
this
.
TeacherList
=
this
.
AllTeacherList
;
this
.
TeacherList
.
forEach
(
x
=>
{
this
.
ContentList
.
forEach
(
y
=>
{
...
...
@@ -144,8 +241,8 @@
}
}
}
})
})
});
});
this
.
TeacherList
=
TList
;
},
//试听课程列表
...
...
@@ -162,12 +259,12 @@
if
(
res
.
Code
==
1
)
{
this
.
ClassRoomList
=
res
.
Data
;
var
obj
=
{
RoomName
:
'请选择'
,
RoomName
:
"请选择"
,
RoomId
:
0
}
};
this
.
ClassRoomList
.
unshift
(
obj
);
}
})
});
},
//获取教师下拉
GetTeacherList
()
{
...
...
@@ -176,9 +273,9 @@
this
.
TeacherList
=
res
.
Data
;
this
.
AllTeacherList
=
res
.
Data
;
var
obj
=
{
TeacherName
:
'请选择'
,
TeacherName
:
"请选择"
,
TId
:
0
}
};
this
.
TeacherList
.
unshift
(
obj
);
this
.
AllTeacherList
.
unshift
(
obj
);
}
...
...
@@ -188,64 +285,64 @@
clearMsg
()
{
this
.
addMsg
.
Id
=
0
;
this
.
addMsg
.
ReserveClassId
=
0
;
this
.
addMsg
.
ClassDate
=
''
;
this
.
addMsg
.
ClassTime
=
''
;
this
.
addMsg
.
EndTime
=
''
;
this
.
addMsg
.
ClassDate
=
""
;
this
.
addMsg
.
ClassTime
=
""
;
this
.
addMsg
.
EndTime
=
""
;
this
.
addMsg
.
TeacherId
=
0
;
this
.
addMsg
.
ClassRoomId
=
0
;
this
.
addMsg
.
ClassContent
=
''
;
this
.
addMsg
.
ClassContent
=
""
;
this
.
addMsg
.
TrialLessonId
=
""
;
},
//保存
saveAppointForm
()
{
if
(
this
.
addMsg
.
ClassDate
==
''
)
{
if
(
this
.
addMsg
.
ClassDate
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择预约日期!'
,
})
message
:
"请选择预约日期!"
});
return
;
}
if
(
this
.
addMsg
.
ClassTime
==
''
)
{
if
(
this
.
addMsg
.
ClassTime
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择预约开始时间!'
,
})
message
:
"请选择预约开始时间!"
});
return
;
}
if
(
this
.
addMsg
.
EndTime
==
''
)
{
if
(
this
.
addMsg
.
EndTime
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择预约结束时间!'
,
})
message
:
"请选择预约结束时间!"
});
return
;
}
if
(
!
this
.
$refs
.
ClassContent
.
hasError
)
{
SetVisitorReserve
(
this
.
addMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
position
:
"top"
});
this
.
$emit
(
"success"
);
}
else
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
res
.
Message
,
})
message
:
res
.
Message
});
}
this
.
clearMsg
();
})
});
}
},
closeAuditForm
()
{
...
...
@@ -263,7 +360,7 @@
this
.
addMsg
.
ClassContent
=
obj
.
ClassContent
;
this
.
addMsg
.
TrialLessonId
=
obj
.
TrialLessonId
;
}
},
}
}
};
</
script
>
src/components/school/student/student-Assit.vue
View file @
186605a9
<
style
>
.delAssist
{
.delAssist
{
position
:
absolute
;
right
:
-16px
;
top
:
-12px
;
display
:
inline-block
;
background
:
red
;
border-radius
:
50%
;
color
:
#FFF
;
color
:
#fff
;
width
:
20px
;
height
:
20px
;
text-align
:
center
;
line-height
:
20px
;
cursor
:
pointer
;
}
}
.studentAssitTable
{
.studentAssitTable
{
width
:
100%
;
text-align
:
center
;
}
}
.studentAssitTable
td
{
.studentAssitTable
td
{
height
:
40px
;
line-height
:
40px
;
border
:
1px
solid
#f2f2f2
;
}
}
.studentAssitTable
th
{
.studentAssitTable
th
{
height
:
40px
;
background-color
:
#f2f2f2
;
}
}
</
style
>
<
template
>
<div>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
v-if=
"BelongType!=3"
@
click=
"isShowAdd=true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=false"
/>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
v-if=
"userInfo.IsCourseConsultant == 1"
@
click=
"isShowAdd = true"
/>
<span
class=
"text-grey-4"
v-else
>
抱歉,你没有权限邀请其他服务人员
</span>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = false"
/>
<template
v-if=
"isShowAdd"
>
<div
class=
"row wrap"
>
<q-select
filled
stack-label
option-label=
"Name"
@
input=
"getRole"
v-model=
"AssitMsg.AssistType"
option-value=
"Id"
:options=
"AssistDropList"
label=
"角色"
dense
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
dense
v-if=
"AssitMsg.AssistType==2"
v-model=
"AssitMsg.AssistId"
:options=
"RoleListData"
option-label=
"EmployeeName"
class=
"col-6 q-pb-lg"
option-value=
"Id"
emit-value
map-options
/>
<q-select
filled
dense
v-else
v-model=
"AssitMsg.AssistId"
@
filter=
"filterEmployee"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
class=
"col-6 q-pb-lg"
option-value=
"Id"
emit-value
map-options
/>
<q-select
filled
stack-label
option-label=
"Name"
@
input=
"getRole"
v-model=
"AssitMsg.AssistType"
option-value=
"Id"
:options=
"AssistDropList"
label=
"角色"
dense
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
<q-select
filled
dense
v-if=
"AssitMsg.AssistType == 2"
v-model=
"AssitMsg.AssistId"
:options=
"RoleListData"
option-label=
"EmployeeName"
class=
"col-6 q-pb-lg"
option-value=
"Id"
emit-value
map-options
/>
<q-select
filled
dense
v-else
v-model=
"AssitMsg.AssistId"
@
filter=
"filterEmployee"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
class=
"col-6 q-pb-lg"
option-value=
"Id"
emit-value
map-options
/>
<i
class=
"iconfont icon-close delAssist"
></i>
</div>
<div
class=
"row wrap"
style=
"margin-bottom:10px;float:right;"
>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveAssit()"
/>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveAssit()"
/>
</div>
</
template
>
<div
v-if=
"dataList.length>0"
>
<table
class=
"studentAssitTable"
style=
"border:1px solid #f2f2f2;border-collapse:collapse;"
cellspacing=
"0"
cellpadding=
"0"
>
<div
v-if=
"dataList.length > 0"
>
<table
class=
"studentAssitTable"
style=
"border:1px solid #f2f2f2;border-collapse:collapse;"
cellspacing=
"0"
cellpadding=
"0"
>
<tr>
<th
style=
"width:180px;"
>
角色
</th>
<th
style=
"width:180px;"
>
人员
</th>
<th
v-if=
"
BelongType!=3
"
>
操作
</th>
<th
v-if=
"
userInfo.IsCourseConsultant == 1
"
>
操作
</th>
</tr>
<tr
v-for=
"(item,index) in dataList"
:key=
"index"
>
<td>
{{item.AssistTypeName}}
</td>
<td>
{{item.AssistName}}
</td>
<td
v-if=
"BelongType!=3"
>
<q-btn
flat
size=
"xs"
icon=
"edit"
color=
"accent"
style=
"font-weight:400"
label=
"修改"
@
click=
"getEditInfo(item)"
></q-btn>
<q-btn
flat
size=
"xs"
icon=
"delete"
color=
"negative"
style=
"font-weight:400"
label=
"删除"
@
click=
"deleteAssits(item.Id)"
/>
<tr
v-for=
"(item, index) in dataList"
:key=
"index"
>
<td>
{{ item.AssistTypeName }}
</td>
<td>
{{ item.AssistName }}
</td>
<td
v-if=
"userInfo.IsCourseConsultant == 1"
>
<div
v-if=
"item.AssistType != 2 && item.AssistType != 4"
>
<q-btn
flat
size=
"xs"
icon=
"edit"
color=
"accent"
style=
"font-weight:400"
label=
"修改"
@
click=
"getEditInfo(item)"
></q-btn>
<q-btn
flat
size=
"xs"
icon=
"delete"
color=
"negative"
style=
"font-weight:400"
label=
"删除"
@
click=
"deleteAssits(item.Id)"
/>
</div>
</td>
</tr>
</table>
...
...
@@ -74,23 +146,19 @@
</div>
</template>
<
script
>
import
{
import
{
GetAssistTypeList
,
SetStudentAssist
,
GetStudentAssistList
,
RemoveStudentAssist
}
from
'../../../api/sale/sale'
import
{
queryEmployee
}
from
'../../../api/users/user'
}
from
"../../../api/sale/sale"
;
import
{
queryEmployee
}
from
"../../../api/users/user"
;
export
default
{
export
default
{
meta
:
{
title
:
""
},
components
:
{
},
components
:
{},
props
:
{
saveObj
:
{
type
:
Object
,
...
...
@@ -107,8 +175,8 @@
AssitMsg
:
{
StuId
:
1
,
//学员编号
Id
:
0
,
//编号
AssistId
:
''
,
//员工编号
AssistType
:
''
//类型
AssistId
:
""
,
//员工编号
AssistType
:
""
//类型
},
msg
:
{
StuId
:
1
...
...
@@ -117,12 +185,14 @@
dataList
:
[],
page_Count
:
0
,
AssistDropList
:
[],
//下拉数据
RoleListData
:
[],
//课程顾问下拉数据
RoleListData
:
[],
//课程顾问下拉数据
employeeList
:
[],
myEmployeeList
:
[],
}
userInfo
:
{}
};
},
created
()
{
this
.
userInfo
=
this
.
getLocalStorage
();
if
(
this
.
saveObj
&&
this
.
saveObj
.
StuId
)
{
this
.
AssitMsg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
msg
.
StuId
=
this
.
saveObj
.
StuId
;
...
...
@@ -140,13 +210,13 @@
GetAssistTypeList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
let
template
=
res
.
Data
;
template
.
forEach
(
x
=>
{
if
(
x
.
Id
!=
1
)
{
template
.
forEach
(
x
=>
{
if
(
x
.
Id
!=
1
&&
x
.
Id
!=
2
&&
x
.
Id
!=
4
)
{
this
.
AssistDropList
.
push
(
x
);
}
})
});
}
})
});
},
//获取员工列表
getEmployeeList
()
{
...
...
@@ -156,7 +226,7 @@
}).
then
(
res
=>
{
this
.
employeeList
=
res
.
Data
;
this
.
myEmployeeList
=
res
.
Data
;
})
});
},
//切换课程顾问
getRole
()
{
...
...
@@ -165,7 +235,7 @@
UserRole
:
2
}).
then
(
res
=>
{
this
.
RoleListData
=
res
.
Data
;
})
});
},
//筛选员工
...
...
@@ -178,22 +248,22 @@
},
//保存协同人员
saveAssit
()
{
SetStudentAssist
(
this
.
AssitMsg
).
then
(
res
=>
{
SetStudentAssist
(
this
.
AssitMsg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
})
;
this
.
getList
();
this
.
isShowAdd
=
false
;
this
.
clearMsg
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
clearMsg
()
{
this
.
AssitMsg
.
Id
=
0
;
...
...
@@ -202,46 +272,48 @@
},
//获取数据
getList
()
{
GetStudentAssistList
(
this
.
msg
).
then
(
res
=>
{
GetStudentAssistList
(
this
.
msg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
;
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//删除协同
deleteAssits
(
Id
)
{
let
that
=
this
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除?'
,
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"提示信息"
,
message
:
"是否确定删除?"
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
cancel
:
"取消"
})
.
onOk
(()
=>
{
RemoveStudentAssist
({
Id
:
Id
}).
then
(
(
res
)
=>
{
}).
then
(
res
=>
{
that
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
icon
:
"iconfont icon-chenggong"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
that
.
getList
()
position
:
"top"
});
that
.
getList
();
});
})
})
.
onCancel
(()
=>
{});
.
onCancel
(()
=>
{});
},
//获取修改数据
getEditInfo
(
obj
)
{
this
.
AssitMsg
.
Id
=
obj
.
Id
;
this
.
AssitMsg
.
AssistId
=
obj
.
AssistId
;
this
.
AssitMsg
.
AssistType
=
obj
.
AssistType
;
this
.
isShowAdd
=
true
;
}
this
.
isShowAdd
=
true
;
}
}
};
</
script
>
src/components/school/student/student-genjin.vue
View file @
186605a9
<
style
>
</
style
>
<
style
></
style
>
<
template
>
<div>
<div
class=
"row wrap"
>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=false"
/>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
v-if=
"!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
@
click=
"isShowAdd = true"
/>
<span
v-else
class=
"text-grey-4"
>
学员已推送课程顾问,只能进行查看
</span>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = false"
/>
</div>
<template
v-if=
"isShowAdd"
>
<UeEditor
v-if=
"isShowAdd"
v-model=
"flowMsg.Remark"
class=
"q-pb-sm"
:config=
"config"
></UeEditor>
<UeEditor
v-if=
"isShowAdd"
v-model=
"flowMsg.Remark"
class=
"q-pb-sm"
:config=
"config"
></UeEditor>
<div
class=
"row q-mb-lg flex justify-between items-center"
>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-6"
/>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-6"
/>
<div>
<q-btn
label=
"保存"
color=
"accent "
size=
"md"
@
click=
"saveFlow()"
/>
</div>
</div>
</
template
>
<div
style=
"display:flex;flex:1;flex-direction: column;overflow:hidden;"
>
<div
class=
"TimeLineDiv"
>
<q-timeline
color=
"primary"
>
<q-timeline-entry
v-for=
"(tItem,tIndex) in dataList"
:key=
"tIndex"
>
<q-timeline-entry
v-for=
"(tItem,
tIndex) in dataList"
:key=
"tIndex"
>
<
template
v-slot:title
>
<div
class=
"visit_Cont"
>
<div
class=
"Log_Content"
v-html=
"tItem.Remark"
></div>
<div
@
click=
"delFollow(tItem.Id)"
style=
"margin-top:10px;"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"delFollow(tItem.Id)"
style=
"margin-top:10px;"
class=
"visit_delete text-negative"
>
删除
</div>
</div>
</
template
>
<
template
v-slot:subtitle
>
...
...
@@ -41,21 +72,27 @@
</div>
</div>
<div
style=
"margin-bottom:20px;"
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
</div>
</div>
</template>
<
script
>
import
UeEditor
from
'../../editor/UeEditor'
import
{
import
UeEditor
from
"../../editor/UeEditor"
;
import
{
queryStudentFollowPage
,
//获取到访列表
saveStudentFollow
,
deleteStudentFollow
,
SetStuStage
}
from
'../../../api/customerstudent/customerstudent'
;
}
from
"../../../api/customerstudent/customerstudent"
;
export
default
{
export
default
{
meta
:
{
title
:
""
},
...
...
@@ -63,9 +100,9 @@
UeEditor
},
props
:
{
stateId
:
{
type
:
Number
,
default
:
0
stateId
:
{
type
:
Number
,
default
:
0
},
stateList
:
{
type
:
Array
,
...
...
@@ -85,8 +122,8 @@
},
flowMsg
:
{
StuId
:
0
,
Remark
:
''
,
stuState
:
0
,
Remark
:
""
,
stuState
:
0
},
msg
:
{
pageIndex
:
1
,
...
...
@@ -95,70 +132,72 @@
},
dataList
:
[],
page_Count
:
0
,
stuStageId
:
0
,
stuStageId
:
0
,
cusStateList
:
[],
}
userInfo
:
{}
};
},
created
()
{
if
(
this
.
saveObj
&&
this
.
saveObj
.
StuId
)
{
this
.
msg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
flowMsg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
userInfo
=
this
.
getLocalStorage
();
}
},
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
;
}
},
mounted
()
{
this
.
stuStageId
=
this
.
stateId
this
.
stuStageId
=
this
.
stateId
;
this
.
cusStateList
=
this
.
stateList
;
this
.
getList
();
},
methods
:
{
//保存跟进
saveFlow
()
{
if
(
this
.
flowMsg
.
Remark
==
''
)
{
if
(
this
.
flowMsg
.
Remark
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请输入内容!'
,
})
message
:
"请输入内容!"
});
return
;
}
saveStudentFollow
(
this
.
flowMsg
).
then
(
res
=>
{
saveStudentFollow
(
this
.
flowMsg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
})
;
this
.
getList
();
this
.
clearMsg
();
}
}).
catch
(()
=>
{
})
if
(
this
.
stuStageId
??
0
>
0
){
this
.
setStuStage
()
.
catch
(()
=>
{});
if
(
this
.
stuStageId
??
0
>
0
)
{
this
.
setStuStage
();
}
},
getList
()
{
queryStudentFollowPage
(
this
.
msg
).
then
(
res
=>
{
queryStudentFollowPage
(
this
.
msg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
page_Count
=
res
.
Data
.
PageCount
;
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//清除
clearMsg
()
{
this
.
flowMsg
.
Remark
=
''
;
this
.
flowMsg
.
Remark
=
""
;
this
.
isShowAdd
=
false
;
},
changePage
(
val
)
{
...
...
@@ -167,38 +206,40 @@
},
//删除跟进
delFollow
(
Id
)
{
let
that
=
this
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除?'
,
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"提示信息"
,
message
:
"是否确定删除?"
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
cancel
:
"取消"
})
.
onOk
(()
=>
{
deleteStudentFollow
({
Id
:
Id
}).
then
(
(
res
)
=>
{
}).
then
(
res
=>
{
that
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
icon
:
"iconfont icon-chenggong"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
position
:
"top"
});
that
.
getList
();
});
})
that
.
getList
()
})
}).
onCancel
(()
=>
{});
},
setStuStage
(){
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
,
.
onCancel
(()
=>
{});
},
setStuStage
()
{
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
};
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
"update"
);
});
}
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
'update'
)
})
},
},
}
};
</
script
>
src/components/school/student/student-shiting.vue
View file @
186605a9
<
style
>
</
style
>
<
style
></
style
>
<
template
>
<div>
<div
class=
"row wrap"
>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=false"
/>
</div>
<template
v-if=
"isShowAdd"
>
<reserveclass-form
:saveObj=
"saveObj"
@
close=
"closeReserveForm"
@
success=
"closeReserveForm"
></reserveclass-form>
</
template
>
<!--
<div
class=
"row wrap"
>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = false"
/>
</div>
-->
<reserveclass-form
:saveObj=
"saveObj"
@
close=
"closeReserveForm"
@
success=
"closeReserveForm"
v-if=
"!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
></reserveclass-form>
<span
v-else
class=
"text-grey-4 q-mb-md"
>
学员已推送课程顾问,只能进行查看
</span
>
<div
style=
"display:flex;flex:1;flex-direction: column;overflow:hidden;"
>
<div
class=
"TimeLineDiv"
>
<q-timeline
color=
"primary"
>
<q-timeline-entry
v-for=
"(tItem,tIndex) in dataList"
:key=
"tIndex"
>
<q-timeline-entry
v-for=
"(tItem,
tIndex) in dataList"
:key=
"tIndex"
>
<template
v-slot:title
>
<div
class=
"visit_Cont"
>
<div
class=
"Log_Content"
>
<div>
预约时间:
{{
tItem
.
ClassDateStr
}}
{{
tItem
.
ClassTime
}}
-
{{
tItem
.
EndTime
}}
</div>
<div>
预约时间:
{{
tItem
.
ClassDateStr
}}
{{
tItem
.
ClassTime
}}
-
{{
tItem
.
EndTime
}}
</div>
<div
class=
"StuCom_Remark"
>
<div
style=
"flex-shrink:0"
>
主讲内容:
</div>
<div
class=
"StuCom_Inner"
>
{{
tItem
.
ClassContent
}}
</div>
<div
class=
"StuCom_Inner"
>
{{
tItem
.
ClassContent
}}
</div>
</div>
<div>
主讲老师:
{{
tItem
.
TeacherName
}}
</div>
<div>
课程名称:
{{
tItem
.
LessonName
}}
</div>
<div>
主讲老师:
{{
tItem
.
TeacherName
}}
</div>
<div>
课程名称:
{{
tItem
.
LessonName
}}
</div>
<div
class=
"StuCom_Remark"
>
<span
class=
"StuCom_Left"
>
教室
</span>
:
{{
tItem
.
RoomName
}}
<span
class=
"StuCom_Left"
>
教室
</span>
:
{{
tItem
.
RoomName
}}
</div>
</div>
<div
@
click=
"DeleteVisitorReserve(tItem.Id)"
style=
"margin-top:10px;"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"DeleteVisitorReserve(tItem.Id)"
style=
"margin-top:10px;"
class=
"visit_delete text-negative"
>
删除
</div>
</div>
</
template
>
<
template
v-slot:subtitle
>
...
...
@@ -45,26 +69,31 @@
</div>
</div>
<div
style=
"margin:20px 0;"
>
<q-pagination
class=
"full-width justify-end"
v-model=
"qMsg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
<q-pagination
class=
"full-width justify-end"
v-model=
"qMsg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
</div>
</div>
</template>
<
script
>
import
{
import
{
SetVisitorReserve
,
queryVisitorReservePage
,
RemoveVisitorReserve
}
from
"../../../api/scheduling/schedu"
;
}
from
"../../../api/scheduling/schedu"
;
import
{
import
{
getTeacherDropDownList
,
queryClassRoomList
,
GetTrialLessonList
}
from
"../../../api/school/index"
;
import
reserveclassForm
from
'./reserveclass-form'
export
default
{
}
from
"../../../api/school/index"
;
import
reserveclassForm
from
"./reserveclass-form"
;
export
default
{
meta
:
{
title
:
""
},
...
...
@@ -83,15 +112,17 @@
qMsg
:
{
pageIndex
:
1
,
pageSize
:
12
,
Visitor_Id
:
0
,
Visitor_Id
:
0
},
dataList
:
[],
page_Count
:
0
,
}
userInfo
:
{}
};
},
created
()
{
if
(
this
.
saveObj
)
{
this
.
qMsg
.
Visitor_Id
=
this
.
saveObj
.
StuId
;
this
.
userInfo
=
this
.
getLocalStorage
();
}
},
mounted
()
{
...
...
@@ -105,7 +136,7 @@
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
page_Count
=
res
.
Data
.
PageCount
;
}
})
});
},
changePage
(
val
)
{
this
.
qMsg
.
pageIndex
=
val
;
...
...
@@ -113,32 +144,35 @@
},
//删除试听
DeleteVisitorReserve
(
Id
)
{
let
that
=
this
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定此试听信息删除?'
,
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"提示信息"
,
message
:
"是否确定此试听信息删除?"
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
cancel
:
"取消"
})
.
onOk
(()
=>
{
RemoveVisitorReserve
({
Id
:
Id
}).
then
(
(
res
)
=>
{
}).
then
(
res
=>
{
that
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
icon
:
"iconfont icon-chenggong"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
that
.
getList
()
position
:
"top"
});
that
.
getList
();
});
})
})
.
onCancel
(()
=>
{});
.
onCancel
(()
=>
{});
},
closeReserveForm
()
{
this
.
isShowAdd
=
false
;
this
.
getList
();
},
},
}
}
};
</
script
>
src/components/school/student/student-visit.vue
View file @
186605a9
<
style
>
.studentDate
.el-input__inner
{
.studentDate
.el-input__inner
{
background-color
:
transparent
;
border
:
0
;
height
:
28px
!important
;
}
}
.studentDate
.el-input
{
.studentDate
.el-input
{
height
:
28px
!important
;
}
}
.el-select-dropdown
{
.el-select-dropdown
{
z-index
:
8888
!important
;
}
}
</
style
>
<
template
>
<div>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=false"
/>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
v-if=
"!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
@
click=
"isShowAdd = true"
/>
<span
v-else
class=
"text-grey-4"
>
学员已推送课程顾问,只能进行查看
</span>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = false"
/>
<template
v-if=
"isShowAdd"
>
<div
class=
"row wrap studentDate"
>
<q-select
filled
option-value=
"SId"
dense
class=
"col-6 q-pb-lg q-pr-lg"
option-label=
"SName"
v-model=
"VisitMsg.School_Id"
:options=
"schoolList"
emit-value
map-options
label=
"到访校区"
/>
<q-select
filled
option-value=
"SId"
dense
class=
"col-6 q-pb-lg q-pr-lg"
option-label=
"SName"
v-model=
"VisitMsg.School_Id"
:options=
"schoolList"
emit-value
map-options
label=
"到访校区"
/>
<q-field
filled
class=
"q-pb-lg"
dense
>
<template
v-slot:control
>
<el-date-picker
v-model=
"VisitMsg.Date"
size=
"mini"
style=
"width:228px"
type=
"date"
placeholder=
"到访日期"
>
<template
v-slot:control
>
<el-date-picker
v-model=
"VisitMsg.Date"
size=
"mini"
style=
"width:228px"
type=
"date"
placeholder=
"到访日期"
>
</el-date-picker>
</
template
>
</q-field>
</div>
<div
class=
"row warp studentDate"
>
<q-field
filled
class=
"q-pb-lg q-pr-lg"
dense
>
<
template
v-slot:control
>
<el-time-select
v-model=
"VisitMsg.VisitTime"
size=
"mini"
ref=
"ClassTime"
style=
"width:230px"
<
template
v-slot:control
>
<el-time-select
v-model=
"VisitMsg.VisitTime"
size=
"mini"
ref=
"ClassTime"
style=
"width:230px"
:picker-options=
"
{
start: '09:00',
step: '00:15',
end: '21:00',
}" placeholder="到访时间">
end: '21:00'
}"
placeholder="到访时间"
>
</el-time-select>
</
template
>
</q-field>
<q-field
filled
class=
"q-pb-lg"
dense
>
<
template
v-slot:control
>
<el-select
v-model=
"VisitMsg.ReceptionPersion"
filterable
style=
"width:230px;"
size=
"mini"
placeholder=
"接待人"
>
<el-option
v-for=
"item in myEmployeeList"
:key=
"item.Id"
:label=
"item.EmployeeName"
:value=
"item.Id"
>
<
template
v-slot:control
>
<el-select
v-model=
"VisitMsg.ReceptionPersion"
filterable
style=
"width:230px;"
size=
"mini"
placeholder=
"接待人"
>
<el-option
v-for=
"item in myEmployeeList"
:key=
"item.Id"
:label=
"item.EmployeeName"
:value=
"item.Id"
>
</el-option>
</el-select>
</
template
>
</q-field>
</div>
<div
class=
"row wrap"
>
<q-input
filled
v-model=
"VisitMsg.Remark"
dense
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-lg q-pr-lg"
label=
"备注"
>
<q-input
filled
v-model=
"VisitMsg.Remark"
dense
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-lg q-pr-lg"
label=
"备注"
>
</q-input>
</div>
<div
class=
"row wrap justify-end q-pr-lg"
style=
"margin-bottom:10px;"
>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveVisit()"
/>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"saveVisit()"
/>
</div>
</template>
<div
style=
"display:flex;flex:1;flex-direction: column;overflow:hidden;"
>
<div
class=
"TimeLineDiv"
>
<q-timeline
color=
"primary"
>
<q-timeline-entry
v-for=
"(tItem,tIndex) in dataList"
:key=
"tIndex"
>
<q-timeline-entry
v-for=
"(tItem,
tIndex) in dataList"
:key=
"tIndex"
>
<
template
v-slot:title
>
<div
class=
"visit_Cont"
>
<div
class=
"Log_Content"
>
<div>
到访校区:
{{
tItem
.
SchoolName
}}
</div>
<div>
到访时间:
{{
tItem
.
Date
}}
{{
tItem
.
VisitTime
}}
</div>
<div>
到访校区:
{{
tItem
.
SchoolName
}}
</div>
<div>
到访时间:
{{
tItem
.
Date
}}
{{
tItem
.
VisitTime
}}
</div>
<div
class=
"StuCom_Remark"
>
<span
class=
"StuCom_Left"
>
接待人
</span>
:
{{
tItem
.
ReceptionPersionName
}}
{{
tItem
.
ReceptionPersionName
}}
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
备注
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Remark
}}
</div>
<div
class=
"StuCom_Left"
>
备注
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Remark
}}
</div>
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
反馈
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Feedback
}}
</div>
<div
class=
"StuCom_Left"
>
反馈
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Feedback
}}
</div>
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
是否到访
</div>
:
<div
class=
"StuCom_Left"
>
是否到访
</div>
:
<div
class=
"StuCom_Inner"
>
<span
v-if=
"tItem.IsVisit==0"
class=
"text-negative"
>
{{
tItem
.
IsVisitStr
}}
</span>
<span
v-if=
"tItem.IsVisit==1"
class=
"text-primary"
>
{{
tItem
.
IsVisitStr
}}
</span>
<span
v-if=
"tItem.IsVisit == 0"
class=
"text-negative"
>
{{
tItem
.
IsVisitStr
}}
</span>
<span
v-if=
"tItem.IsVisit == 1"
class=
"text-primary"
>
{{
tItem
.
IsVisitStr
}}
</span>
</div>
</div>
</div>
<div
style=
"display:flex;margin-top:10px;"
>
<div
@
click=
"delVisit(tItem.Id)"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"delVisit(tItem.Id)"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"clickItem(tItem)"
class=
"stu_ComFeed"
>
{{
tItem
.
Feedback
==
null
||
tItem
.
Feedback
==
''
?
'添加反馈'
:
'编辑反馈'
}}
{{
tItem
.
Feedback
==
null
||
tItem
.
Feedback
==
""
?
"添加反馈"
:
"编辑反馈"
}}
<q-popup-proxy>
<q-banner
v-if=
"isShowEdit"
>
<div
class=
"row wrap"
style=
"margin-top:10px;width:300px;"
>
<q-input
filled
v-model=
"feedBackMsg.Feedback"
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-sm"
label=
"请输入反馈内容"
>
<div
class=
"row wrap"
style=
"margin-top:10px;width:300px;"
>
<q-input
filled
v-model=
"feedBackMsg.Feedback"
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-sm"
label=
"请输入反馈内容"
>
</q-input>
</div>
<div
class=
"row wrap q-col-gutter-sm"
style=
"width:300px;"
>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-6"
/>
<div
class=
"row wrap q-col-gutter-sm"
style=
"width:300px;"
>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-6"
/>
<q-select
filled
v-model=
"feedBackMsg.IsVisit"
dense
:options=
"VisitList"
emit-value
map-options
label=
"是否到访"
class=
"col-6"
/>
<q-select
filled
v-model=
"feedBackMsg.IsVisit"
dense
:options=
"VisitList"
emit-value
map-options
label=
"是否到访"
class=
"col-6"
/>
</div>
<div
class=
"row wrap q-my-sm"
style=
"float:right;"
>
<q-btn
label=
"保存"
color=
"accent"
size=
"sm"
@
click=
"SetFeedBack()"
/>
<q-btn
label=
"保存"
color=
"accent"
size=
"sm"
@
click=
"SetFeedBack()"
/>
</div>
</q-banner>
</q-popup-proxy>
...
...
@@ -130,35 +237,39 @@
</div>
</div>
<div
style=
"margin-bottom:20px;"
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
</div>
</div>
</template>
<
script
>
import
{
import
{
getSchoolDropdown
,
//获取校区列表
queryStuStageList
,
//获取客户阶段列表
}
from
'../../../api/school/index'
;
import
{
queryStuStageList
//获取客户阶段列表
}
from
"../../../api/school/index"
;
import
{
queryStudentVisitPage
,
//获取到访列表
saveStudentVisit
,
deleteStudentVisit
,
saveStudentVisitFeedback
,
SetStuStage
}
from
'../../../api/customerstudent/customerstudent'
;
import
{
queryEmployee
}
from
'../../../api/users/user'
export
default
{
}
from
"../../../api/customerstudent/customerstudent"
;
import
{
queryEmployee
}
from
"../../../api/users/user"
;
export
default
{
meta
:
{
title
:
""
},
props
:
{
stateId
:
{
type
:
Number
,
default
:
0
stateId
:
{
type
:
Number
,
default
:
0
},
stateList
:
{
type
:
Array
,
...
...
@@ -177,15 +288,15 @@
Id
:
0
,
//到访编号
StuId
:
0
,
//学员编号
School_Id
:
0
,
//到访校区
Date
:
''
,
//日期
VisitTime
:
''
,
//到访时间
ReceptionPersion
:
''
,
//接待人
Remark
:
''
,
//备注
Date
:
""
,
//日期
VisitTime
:
""
,
//到访时间
ReceptionPersion
:
""
,
//接待人
Remark
:
""
//备注
},
msg
:
{
pageIndex
:
1
,
pageSize
:
12
,
StuId
:
0
,
StuId
:
0
},
isShowAdd
:
false
,
dataList
:
[],
...
...
@@ -197,33 +308,36 @@
feedBackMsg
:
{
Id
:
0
,
//编号
IsVisit
:
0
,
//到访状态(1-已到访,0-未到访)
Feedback
:
''
,
//反馈
Feedback
:
""
//反馈
},
VisitList
:
[
{
label
:
"未到访"
,
value
:
0
},
VisitList
:[
{
label
:
'未到访'
,
value
:
0
},{
label
:
'已到访'
,
value
:
1
label
:
"已到访"
,
value
:
1
}
],
stuStageId
:
0
,
stuStageId
:
0
,
cusStateList
:
[],
}
userInfo
:
{}
};
},
created
()
{
if
(
this
.
saveObj
&&
this
.
saveObj
.
StuId
)
{
this
.
msg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
userInfo
=
this
.
getLocalStorage
();
}
},
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
;
}
},
mounted
()
{
this
.
stuStageId
=
this
.
stateId
this
.
stuStageId
=
this
.
stateId
;
this
.
cusStateList
=
this
.
stateList
;
this
.
getSchool
();
this
.
getEmployeeList
();
...
...
@@ -245,12 +359,12 @@
saveStudentVisitFeedback
(
this
.
feedBackMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
});
this
.
getList
();
this
.
feedBackMsg
.
Id
=
0
;
this
.
feedBackMsg
.
Feedback
=
""
;
...
...
@@ -258,8 +372,8 @@
this
.
isShowEdit
=
false
;
}
});
if
(
this
.
stuStageId
??
0
>
0
)
{
this
.
setStuStage
()
if
(
this
.
stuStageId
??
0
>
0
)
{
this
.
setStuStage
();
}
},
//获取校区列表
...
...
@@ -272,7 +386,7 @@
}
this
.
schoolList
=
tempArray
;
}
})
});
},
//获取员工列表
getEmployeeList
()
{
...
...
@@ -280,106 +394,108 @@
IsLeave
:
1
}).
then
(
res
=>
{
this
.
myEmployeeList
=
res
.
Data
;
})
});
},
//获取到访分页
getList
()
{
queryStudentVisitPage
(
this
.
msg
).
then
(
res
=>
{
queryStudentVisitPage
(
this
.
msg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
page_Count
=
res
.
Data
.
PageCount
;
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//保存数据
saveVisit
()
{
this
.
VisitMsg
.
StuId
=
this
.
saveObj
.
StuId
;
if
(
this
.
VisitMsg
.
Date
==
''
)
{
if
(
this
.
VisitMsg
.
Date
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择到访日期!'
,
})
message
:
"请选择到访日期!"
});
return
;
}
if
(
this
.
VisitMsg
.
VisitTime
==
''
)
{
if
(
this
.
VisitMsg
.
VisitTime
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择到访时间!'
,
})
message
:
"请选择到访时间!"
});
return
;
}
saveStudentVisit
(
this
.
VisitMsg
).
then
(
res
=>
{
saveStudentVisit
(
this
.
VisitMsg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
})
;
this
.
getList
();
this
.
clearMsg
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//清除数据
clearMsg
()
{
this
.
VisitMsg
.
Id
=
0
;
this
.
VisitMsg
.
StuId
=
0
;
this
.
VisitMsg
.
School_Id
=
0
;
this
.
VisitMsg
.
Date
=
''
;
this
.
VisitMsg
.
VisitTime
=
''
;
this
.
VisitMsg
.
Date
=
""
;
this
.
VisitMsg
.
VisitTime
=
""
;
// this.VisitMsg.ReceptionPersion = '';
this
.
VisitMsg
.
Remark
=
''
;
this
.
VisitMsg
.
Feedback
=
''
;
this
.
VisitMsg
.
Remark
=
""
;
this
.
VisitMsg
.
Feedback
=
""
;
this
.
isShowAdd
=
false
;
},
//删除到访
delVisit
(
Id
)
{
let
that
=
this
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除?'
,
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"提示信息"
,
message
:
"是否确定删除?"
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
cancel
:
"取消"
})
.
onOk
(()
=>
{
deleteStudentVisit
({
Id
:
Id
}).
then
(
(
res
)
=>
{
}).
then
(
res
=>
{
that
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
icon
:
"iconfont icon-chenggong"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
that
.
getList
()
position
:
"top"
});
that
.
getList
();
});
})
})
.
onCancel
(()
=>
{});
.
onCancel
(()
=>
{});
},
changePage
(
val
)
{
this
.
msg
.
pageIndex
=
val
;
this
.
getList
();
},
setStuStage
(){
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
,
setStuStage
()
{
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
};
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
"update"
);
});
}
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
'update'
)
})
},
},
}
};
</
script
>
src/components/school/student/student-yuefang.vue
View file @
186605a9
<
style
>
</
style
>
<
style
></
style
>
<
template
>
<div>
<div
class=
"row wrap"
>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=true"
/>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd=false"
/>
<q-btn
label=
"新增"
color=
"accent q-mb-lg"
size=
"sm"
v-if=
"!saveObj.IsHaveCurseManager || userInfo.IsCourseConsultant == 1"
@
click=
"isShowAdd = true"
/>
<span
v-else
class=
"text-grey-4"
>
学员已推送课程顾问,只能进行查看
</span>
<q-btn
label=
"取消"
style=
"margin-left:20px;"
v-if=
"isShowAdd"
flat
color=
"grey-10 q-mb-lg"
size=
"sm"
@
click=
"isShowAdd = false"
/>
</div>
<template
v-if=
"isShowAdd"
>
<div
class=
"row wrap studentDate"
>
<q-input
filled
class=
"col-6 q-pb-lg q-pr-lg"
dense
v-model=
"yueMsg.AppointmentPoint"
label=
"约访地点"
></q-input>
<q-input
filled
class=
"col-6 q-pb-lg q-pr-lg"
dense
v-model=
"yueMsg.AppointmentPoint"
label=
"约访地点"
></q-input>
<q-field
filled
class=
"q-pb-lg"
dense
>
<template
v-slot:control
>
<el-date-picker
v-model=
"yueMsg.AppointmentTime"
type=
"datetime"
size=
"mini"
style=
"width:228px"
placeholder=
"选择约访日期时间!"
>
<template
v-slot:control
>
<el-date-picker
v-model=
"yueMsg.AppointmentTime"
type=
"datetime"
size=
"mini"
style=
"width:228px"
placeholder=
"选择约访日期时间!"
>
</el-date-picker>
</
template
>
</q-field>
</div>
<div
class=
"row wrap"
>
<q-input
filled
v-model=
"yueMsg.Remark"
dense
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-lg q-pr-lg"
label=
"备注"
>
<q-input
filled
v-model=
"yueMsg.Remark"
dense
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-lg q-pr-lg"
label=
"备注"
>
</q-input>
</div>
<div
class=
"row wrap justify-end q-pr-lg"
style=
"margin-bottom:10px;"
>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"savePoint()"
/>
<q-btn
label=
"保存"
color=
"accent q-mb-lg"
size=
"md"
@
click=
"savePoint()"
/>
</div>
</template>
<div
style=
"display:flex;flex:1;flex-direction: column;overflow:hidden;"
>
<div
class=
"TimeLineDiv"
>
<q-timeline
color=
"primary"
>
<q-timeline-entry
v-for=
"(tItem,tIndex) in dataList"
:key=
"tIndex"
>
<q-timeline-entry
v-for=
"(tItem,
tIndex) in dataList"
:key=
"tIndex"
>
<
template
v-slot:title
>
<div
class=
"visit_Cont"
>
<div
class=
"Log_Content"
>
<div>
约访时间:
{{
tItem
.
AppointmentTime
}}
</div>
<div>
约访地点:
{{
tItem
.
AppointmentPoint
}}
</div>
<div>
约访时间:
{{
tItem
.
AppointmentTime
}}
</div>
<div>
约访地点:
{{
tItem
.
AppointmentPoint
}}
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
备注
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Remark
}}
</div>
<div
class=
"StuCom_Left"
>
备注
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Remark
}}
</div>
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
反馈
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Feedback
}}
</div>
<div
class=
"StuCom_Left"
>
反馈
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Feedback
}}
</div>
</div>
</div>
<div
style=
"display:flex;margin-top:10px;"
>
<div
@
click=
"delVisit(tItem.Id)"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"delVisit(tItem.Id)"
class=
"visit_delete text-negative"
>
删除
</div>
<div
@
click=
"clickItem(tItem)"
class=
"stu_ComFeed"
>
{{
tItem
.
Feedback
==
null
||
tItem
.
Feedback
==
''
?
'添加反馈'
:
'编辑反馈'
}}
{{
tItem
.
Feedback
==
null
||
tItem
.
Feedback
==
""
?
"添加反馈"
:
"编辑反馈"
}}
<q-popup-proxy>
<q-banner
v-if=
"isShowEdit"
>
<div
class=
"row wrap"
style=
"margin-top:10px;width:300px;"
>
<q-input
filled
v-model=
"feedBackMsg.Feedback"
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-sm"
label=
"请输入反馈内容"
>
<div
class=
"row wrap"
style=
"margin-top:10px;width:300px;"
>
<q-input
filled
v-model=
"feedBackMsg.Feedback"
:rows=
"3"
type=
"textarea"
class=
"col-12 q-pb-sm"
label=
"请输入反馈内容"
>
</q-input>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-12 q-pb-sm"
/>
<q-select
filled
v-model=
"stuStageId"
dense
:options=
"cusStateList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
class=
"col-12 q-pb-sm"
/>
</div>
<div
class=
"row wrap"
style=
"float:right;margin-bottom:10px;"
>
<q-btn
label=
"保存"
color=
"accent"
size=
"sm"
@
click=
"SetFeedBack()"
/>
<div
class=
"row wrap"
style=
"float:right;margin-bottom:10px;"
>
<q-btn
label=
"保存"
color=
"accent"
size=
"sm"
@
click=
"SetFeedBack()"
/>
</div>
</q-banner>
</q-popup-proxy>
...
...
@@ -79,32 +152,35 @@
</div>
</div>
<div
style=
"margin-bottom:20px"
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"page_Count"
input
@
input=
"changePage"
/>
</div>
</div>
</template>
<
script
>
import
{
import
{
saveStudentAppointment
,
queryStudentAppointmentPage
,
deleteStudentAppointment
,
saveStudentAppointmentFeedBack
,
SetStuStage
}
from
'../../../api/customerstudent/customerstudent'
;
}
from
"../../../api/customerstudent/customerstudent"
;
export
default
{
export
default
{
meta
:
{
title
:
""
},
components
:
{
},
components
:
{},
props
:
{
stateId
:
{
type
:
Number
,
default
:
0
stateId
:
{
type
:
Number
,
default
:
0
},
stateList
:
{
type
:
Array
,
...
...
@@ -121,39 +197,41 @@
yueMsg
:
{
Id
:
0
,
//约访编号
StuId
:
0
,
//学员编号
AppointmentPoint
:
''
,
//约访地点
AppointmentTime
:
''
,
//约访时间
Remark
:
''
,
//备注
AppointmentPoint
:
""
,
//约访地点
AppointmentTime
:
""
,
//约访时间
Remark
:
""
//备注
},
msg
:
{
pageIndex
:
1
,
pageSize
:
12
,
StuId
:
0
,
StuId
:
0
},
//反馈信息
feedBackMsg
:
{
Id
:
0
,
Feedback
:
''
,
//反馈
Feedback
:
""
//反馈
},
isShowEdit
:
false
,
dataList
:
[],
page_Count
:
0
,
cusStateList
:
[],
stuStageId
:
0
,
}
stuStageId
:
0
,
userInfo
:
{}
};
},
created
()
{
if
(
this
.
saveObj
&&
this
.
saveObj
.
StuId
)
{
this
.
msg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
userInfo
=
this
.
getLocalStorage
();
}
},
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
watch
:
{
stateId
(
val
)
{
this
.
stuStageId
=
val
;
}
},
mounted
()
{
this
.
stuStageId
=
this
.
stateId
this
.
stuStageId
=
this
.
stateId
;
this
.
cusStateList
=
this
.
stateList
;
this
.
getList
();
},
...
...
@@ -168,118 +246,120 @@
saveStudentAppointmentFeedBack
(
this
.
feedBackMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
});
this
.
getList
();
this
.
feedBackMsg
.
Id
=
0
;
this
.
feedBackMsg
.
Feedback
=
""
;
this
.
isShowEdit
=
false
;
}
});
if
(
this
.
stuStageId
??
0
>
0
)
{
this
.
setStuStage
()
if
(
this
.
stuStageId
??
0
>
0
)
{
this
.
setStuStage
();
}
},
//保存约访
savePoint
()
{
this
.
yueMsg
.
StuId
=
this
.
saveObj
.
StuId
;
if
(
this
.
yueMsg
.
AppointmentPoint
==
''
)
{
if
(
this
.
yueMsg
.
AppointmentPoint
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请输入约访地点!'
,
})
message
:
"请输入约访地点!"
});
return
;
}
if
(
this
.
yueMsg
.
AppointmentTime
==
''
)
{
if
(
this
.
yueMsg
.
AppointmentTime
==
""
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
timeout
:
2000
,
message
:
'请选择约访日期时间!'
,
})
message
:
"请选择约访日期时间!"
});
return
;
}
saveStudentAppointment
(
this
.
yueMsg
).
then
(
res
=>
{
saveStudentAppointment
(
this
.
yueMsg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
'数据保存成功!'
,
position
:
'top'
})
message
:
"数据保存成功!"
,
position
:
"top"
})
;
this
.
getList
();
this
.
clearMsg
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//获取数据
getList
()
{
queryStudentAppointmentPage
(
this
.
msg
).
then
(
res
=>
{
queryStudentAppointmentPage
(
this
.
msg
)
.
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
page_Count
=
res
.
Data
.
PageCount
;
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{});
},
//清除数据
clearMsg
()
{
this
.
yueMsg
.
Id
=
0
;
this
.
yueMsg
.
StuId
=
0
;
this
.
yueMsg
.
AppointmentPoint
=
''
;
this
.
yueMsg
.
AppointmentTime
=
''
;
this
.
yueMsg
.
Remark
=
''
;
this
.
yueMsg
.
Feedback
=
''
;
this
.
yueMsg
.
AppointmentPoint
=
""
;
this
.
yueMsg
.
AppointmentTime
=
""
;
this
.
yueMsg
.
Remark
=
""
;
this
.
yueMsg
.
Feedback
=
""
;
this
.
isShowAdd
=
false
;
},
//删除到访
delVisit
(
Id
)
{
let
that
=
this
this
.
$q
.
dialog
({
title
:
'提示信息'
,
message
:
'是否确定删除?'
,
let
that
=
this
;
this
.
$q
.
dialog
({
title
:
"提示信息"
,
message
:
"是否确定删除?"
,
cancel
:
true
,
persistent
:
true
,
ok
:
"确定"
,
cancel
:
"取消"
,
}).
onOk
(()
=>
{
cancel
:
"取消"
})
.
onOk
(()
=>
{
deleteStudentAppointment
({
Id
:
Id
}).
then
(
(
res
)
=>
{
}).
then
(
res
=>
{
that
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
icon
:
"iconfont icon-chenggong"
,
timeout
:
2000
,
message
:
res
.
Message
,
position
:
'top'
})
that
.
getList
()
position
:
"top"
});
that
.
getList
();
});
})
})
.
onCancel
(()
=>
{});
.
onCancel
(()
=>
{});
},
changePage
(
val
)
{
this
.
msg
.
pageIndex
=
val
;
this
.
getList
();
},
setStuStage
(){
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
,
}
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
'update'
)
})
},
setStuStage
()
{
const
msg
=
{
StuId
:
this
.
saveObj
.
StuId
,
StuStage
:
this
.
stuStageId
};
SetStuStage
(
msg
).
then
(
res
=>
{
this
.
$emit
(
"update"
);
});
}
}
};
</
script
>
src/components/school/student/studentRight-form.vue
View file @
186605a9
...
...
@@ -40,6 +40,18 @@
icon=
"phone"
title=
"拨打电话"
></q-btn>
<q-btn
unelevated
color=
"positive"
v-if=
"
!baseObj.IsHaveCurseManager && userInfo.Id == baseObj.CreateBy
"
size=
"sm"
:loading=
"pushing"
class=
"q-mr-md"
@
click=
"assistBatchHandler"
>
推送课程顾问
</q-btn
>
<q-btn
v-if=
"getJudgeTrans()"
color=
"primary"
...
...
@@ -98,7 +110,7 @@
<q-tab
name=
"2"
label=
"操作"
/>
<q-tab
name=
"3"
label=
"订单"
/>
<q-tab
name=
"4"
label=
"合同"
/>
<q-tab
v-if=
"!baseObj.noEdit"
name=
"5"
label=
"
协同
人员"
/>
<q-tab
v-if=
"!baseObj.noEdit"
name=
"5"
label=
"
服务
人员"
/>
</q-tabs>
<div
class=
"operate_Content"
style=
"flex:1;"
>
<div
class=
"detail_Main"
>
...
...
@@ -208,6 +220,7 @@ import studentShiting from "../student/student-shiting";
import
studentHetong
from
"../student/student-hetong"
;
import
studentOrder
from
"../student/student-order"
;
import
studentAssit
from
"../student/student-Assit"
;
import
{
SetStudentAssistBatch
}
from
"../../../api/sale/sale"
;
export
default
{
meta
:
{
title
:
"学员管理"
...
...
@@ -260,7 +273,7 @@ export default {
Id
:
4
}
],
pushing
:
false
,
msg
:
{},
baseObj
:
{},
transMsg
:
{
...
...
@@ -284,6 +297,14 @@ export default {
},
mounted
()
{
this
.
baseObj
=
this
.
saveObj
;
this
.
baseObj
.
IsHaveCurseManager
=
false
;
if
(
this
.
baseObj
.
AssistList
&&
this
.
baseObj
.
AssistList
.
length
>
0
)
{
this
.
baseObj
.
AssistList
.
forEach
(
x
=>
{
if
(
x
.
AssistType
==
2
)
{
this
.
baseObj
.
IsHaveCurseManager
=
true
;
}
});
}
this
.
getEmployeeList
();
},
methods
:
{
...
...
@@ -370,6 +391,19 @@ export default {
this
.
stateId
=
res
.
Data
.
StuStage
;
}
});
},
assistBatchHandler
()
{
console
.
log
(
this
.
pushing
||
this
.
baseObj
.
IsHaveCurseManager
);
if
(
this
.
pushing
||
this
.
baseObj
.
IsHaveCurseManager
)
return
;
this
.
pushing
=
true
;
let
parameter
=
{
stuIds
:
this
.
baseObj
.
StuId
};
SetStudentAssistBatch
(
parameter
).
then
(
r
=>
{
this
.
$emit
(
"success"
);
this
.
baseObj
.
IsHaveCurseManager
=
true
;
this
.
pushing
=
false
;
});
}
}
};
...
...
src/components/school/student/stulist.vue
View file @
186605a9
<
style
lang=
"scss"
>
.stuList
.q-table__bottom
{
.stuList
.q-table__bottom
{
min-height
:
0
;
}
.stulistNum
{
}
.stulistNum
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
text-align
:
center
;
line-height
:
23px
;
border
:
1px
solid
#2961FE
;
border
:
1px
solid
#2961fe
;
border-radius
:
50%
;
cursor
:
pointer
;
color
:
#2961FE
;
}
.stuListTable
{
color
:
#2961fe
;
}
.stuListTable
{
width
:
200px
;
text-align
:
center
;
}
}
.stuListTable
tr
td
{
.stuListTable
tr
td
{
height
:
40px
;
}
}
.stuListTable
tr
th
{
.stuListTable
tr
th
{
height
:
40px
;
background-color
:
rgb
(
238
,
238
,
239
);
}
}
</
style
>
<
template
>
<div
class=
"stuList"
>
<q-table
:pagination=
"pageMsg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
selection=
"single"
:selected
.
sync=
"selection"
class=
"sticky-right-column-table sticky-tow-column-table"
separator=
"none"
:data=
"dataList"
:columns=
"columns"
row-key=
"StuId"
hide-bottom
>
<q-table
:pagination=
"pageMsg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
:selection=
"pushMode ? 'multiple' : 'single'"
:selected
.
sync=
"selection"
class=
"sticky-right-column-table sticky-tow-column-table"
separator=
"none"
:data=
"dataList"
:columns=
"columns"
row-key=
"StuId"
hide-bottom
>
<template
v-slot:top
>
<div
class=
"col-2 q-table__title"
>
学员信息
</div>
<q-space
/>
<div
class=
"page-option"
>
<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=
"add"
label=
"新增学员"
@
click=
"EditStudent(null)"
/>
<div
class=
"page-option"
v-if=
"!pushMode"
>
<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=
"add"
label=
"新增学员"
@
click=
"EditStudent(null)"
/>
</div>
<div
class=
"page-option"
v-if=
"pushMode"
>
<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"
>
...
...
@@ -46,8 +104,14 @@
<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"
>
...
...
@@ -59,30 +123,49 @@
</
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-CurseManager=
"props"
>
<q-td
:props=
"props"
v-html=
"getCurseManager(props.row)"
></q-td>
</
template
>
<
template
v-slot:body-cell-TeacherManager=
"props"
>
<q-td
:props=
"props"
v-html=
"getTeacherManager(props.row)"
></q-td>
</
template
>
<
template
v-slot:body-cell-AssistList=
"props"
>
<q-td
auto-width
:props=
"props"
>
<template
v-if=
"props.row.AssistList"
>
<template
v-if=
"
props.row.AssistList.length==
1"
>
{{
props
.
row
.
AssistList
[
0
].
AssistName
}}
<template
v-if=
"
assistListFormat[props.pageIndex].length ==
1"
>
{{
assistListFormat
[
props
.
pageIndex
][
0
].
AssistName
}}
</
template
>
<
template
v-if=
"
props.row.AssistList.length>
1"
>
{{
props
.
row
.
AssistList
[
0
].
AssistName
}}
:
<
template
v-if=
"
assistListFormat[props.pageIndex].length >
1"
>
{{
assistListFormat
[
props
.
pageIndex
][
0
].
AssistName
}}
:
<span
class=
"stulistNum"
>
{{
props
.
row
.
AssistList
.
length
}}
{{
assistListFormat
[
props
.
pageIndex
].
length
}}
<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 props.row.AssistList"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
<td>
{{
sItem
.
AssistTypeName
}}
</td>
<td>
{{
sItem
.
AssistName
}}
</td>
<tr
v-for=
"(sItem, sIndex) in assistListFormat[
props.pageIndex
]"
style=
"border-bottom:1px dashed #d1d1d1;"
:key=
"sIndex"
>
<td>
{{
sItem
.
AssistTypeName
}}
</td>
<td>
{{
sItem
.
AssistName
}}
</td>
</tr>
</table>
</div>
...
...
@@ -90,7 +173,7 @@
</q-popup-proxy>
</span>
</
template
>
<
template
v-if=
"props.row.AssistList.length
==
0"
>
<
template
v-if=
"props.row.AssistList.length
==
0"
>
无
</
template
>
</template>
...
...
@@ -102,31 +185,56 @@
</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"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
@
success=
"refreshStuList"
>
<studentRight-form
v-if=
"isShowStuRight"
:isJudgeTrans=
"isJudgeTrans"
:BelongType=
"BelongType"
: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>
</div>
</template>
<
script
>
import
studentForm
from
"./student-form"
;
import
studentRightForm
from
"./studentRight-form"
;
import
studentAddForm
from
"./studentAdd-form"
;
import
transferOrder
from
"./transfer-order"
export
default
{
import
studentForm
from
"./student-form"
;
import
studentRightForm
from
"./studentRight-form"
;
import
studentAddForm
from
"./studentAdd-form"
;
import
transferOrder
from
"./transfer-order"
;
import
{
mapGetters
}
from
"vuex"
;
import
{
SetStudentAssistBatch
}
from
"../../../api/sale/sale"
;
export
default
{
props
:
{
dataList
:
{
type
:
Array
,
default
:
null
},
isJudgeTrans
:
{
isJudgeTrans
:
{
type
:
Number
,
default
:
null
},
}
},
components
:
{
studentForm
,
...
...
@@ -136,7 +244,8 @@
},
data
()
{
return
{
columns
:
[{
columns
:
[
{
name
:
"StuIcon"
,
label
:
""
,
field
:
"StuIcon"
,
...
...
@@ -149,6 +258,16 @@
align
:
"left"
,
field
:
row
=>
row
.
StuName
},
{
name
:
"CurseManager"
,
label
:
"课程顾问"
,
align
:
"left"
},
{
name
:
"TeacherManager"
,
label
:
"协助老师"
,
align
:
"left"
},
{
name
:
"StuSex"
,
label
:
"性别"
,
...
...
@@ -211,7 +330,7 @@
},
{
name
:
"AssistList"
,
label
:
"协同人
"
,
label
:
"其他服务人员
"
,
align
:
"left"
,
field
:
"AssistList"
},
...
...
@@ -275,25 +394,46 @@
isShowAdd
:
false
,
selection
:
[],
isShowTransfer
:
false
,
BelongType
:
1
BelongType
:
1
,
pushMode
:
false
,
pushing
:
false
,
assistListFormat
:
[]
};
},
watch
:{
dataList
:{
handler
(
val
){
this
.
selection
=
[];
watch
:
{
dataList
:
{
handler
(
val
)
{
this
.
selection
=
[];
this
.
formatAssistList
();
},
deep
:
true
deep
:
true
}
},
created
()
{
this
.
formatAssistList
();
this
.
initAuth
();
},
mounted
()
{},
computed
:
{
...
mapGetters
([
"userInfo"
,
"logo"
,
"name"
])
},
methods
:
{
//初始化权限
initAuth
()
{},
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
);
});
},
//创建账号
createAccount
(
id
)
{
let
that
=
this
;
...
...
@@ -367,7 +507,8 @@
this
.
$q
.
dialog
({
title
:
str
+
"学员"
,
message
:
"你正在进行"
+
str
+
"学员行为,一旦执行无法找回,是否确认执行?"
,
message
:
"你正在进行"
+
str
+
"学员行为,一旦执行无法找回,是否确认执行?"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
...
...
@@ -401,7 +542,7 @@
},
refreshStuList
()
{
this
.
$emit
(
"success"
);
this
.
selection
=
[]
this
.
selection
=
[];
},
EditStudent
(
obj
)
{
if
(
obj
)
{
...
...
@@ -428,21 +569,85 @@
this
.
isShowStuRight
=
true
;
},
transferOrder
()
{
const
firstId
=
this
.
selection
[
0
].
CustomerId
const
firstId
=
this
.
selection
[
0
].
CustomerId
;
const
flag
=
this
.
selection
.
every
(
e
=>
{
return
e
.
CustomerId
==
firstId
})
return
e
.
CustomerId
==
firstId
;
});
if
(
!
flag
)
{
this
.
$q
.
notify
({
type
:
'negative'
,
type
:
"negative"
,
position
:
"top"
,
message
:
`所属同行不一致,请重新选择`
})
return
});
return
;
}
this
.
isShowTransfer
=
true
this
.
isShowTransfer
=
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
.
$emit
(
"reload"
);
this
.
selection
=
[];
this
.
pushMode
=
false
;
});
}
else
{
this
.
pushing
=
false
;
this
.
errorMsg
(
msg
);
}
}
else
{
this
.
pushing
=
false
;
this
.
errorMsg
(
"请选择要推送的学员"
);
}
},
referDataHandler
()
{
this
.
$emit
(
"reload"
);
},
errorMsg
(
msg
)
{
this
.
$q
.
notify
({
type
:
"negative"
,
position
:
"top"
,
message
:
msg
});
}
}
};
</
script
>
src/pages/sale/mystu.vue
View file @
186605a9
...
...
@@ -3,29 +3,96 @@
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.StuName"
label=
"昵称"
maxlength=
"20"
/>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.StuName"
label=
"昵称"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.StuTel"
label=
"电话"
maxlength=
"20"
/>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.StuTel"
label=
"电话"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.QQ"
label=
"QQ"
maxlength=
"20"
/>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.QQ"
label=
"QQ"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.WechatNo"
label=
"微信号"
maxlength=
"20"
/>
<q-input
@
input=
"resetSearch"
dense
clearable
filled
v-model=
"msg.WechatNo"
label=
"微信号"
maxlength=
"20"
/>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
filled
v-model=
"msg.StuType"
dense
clearable
:options=
"customTypeList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户类型"
/>
<q-select
@
input=
"resetSearch"
filled
v-model=
"msg.StuType"
dense
clearable
:options=
"customTypeList"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户类型"
/>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.StuStage"
:options=
"customState"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
clearable
/>
<q-select
@
input=
"resetSearch"
dense
filled
v-model=
"msg.StuStage"
:options=
"customState"
option-label=
"Name"
option-value=
"Id"
emit-value
map-options
label=
"客户状态"
clearable
/>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
v-model=
"msg.CustomerId"
:options=
"myCustomerList"
filled
use-input
label=
"同行"
option-label=
"CustomerName"
option-value=
"CustomerId"
ref=
"CustomerName"
class=
"col-6"
emit-value
map-options
@
filter=
"cusfilterFn"
>
<q-select
@
input=
"resetSearch"
dense
v-model=
"msg.CustomerId"
:options=
"myCustomerList"
filled
use-input
label=
"同行"
option-label=
"CustomerName"
option-value=
"CustomerId"
ref=
"CustomerName"
class=
"col-6"
emit-value
map-options
@
filter=
"cusfilterFn"
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
...
...
@@ -36,43 +103,97 @@
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetBelong"
dense
filled
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.BelongType"
:options=
"BelongTypeList"
emit-value
map-options
label=
"归属类型"
/>
<q-select
@
input=
"resetBelong"
dense
filled
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.BelongType"
:options=
"BelongTypeList"
emit-value
map-options
label=
"归属类型"
/>
</div>
<div
class=
"col-3"
>
<q-field
filled
dense
>
<
template
v-slot:control
>
<el-date-picker
v-model=
"dateArray"
size=
"mini"
@
change=
"resetSearch"
value-format=
"yyyy-MM-dd"
type=
"daterange"
style=
"border:none;"
range-separator=
"至"
start-placeholder=
"开始时间"
end-placeholder=
"结束时间"
/>
<el-date-picker
v-model=
"dateArray"
size=
"mini"
@
change=
"resetSearch"
value-format=
"yyyy-MM-dd"
type=
"daterange"
style=
"border:none;"
range-separator=
"至"
start-placeholder=
"开始时间"
end-placeholder=
"结束时间"
/>
</
template
>
</q-field>
</div>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
filled
clearable
use-input
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.ExistCourseConsultant"
:options=
"consultantList"
emit-value
map-options
label=
"是否存在课程顾问"
/>
<div
class=
"col-3"
>
<q-select
@
input=
"resetSearch"
dense
filled
clearable
use-input
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.ExistCourseConsultant"
:options=
"consultantList"
emit-value
map-options
label=
"是否推送程顾问"
/>
</div>
<div
class=
"col-3"
v-if=
"msg.BelongType==4"
>
<q-select
@
input=
"resetSearch"
dense
clearable
@
filter=
"filterSubord"
use-input
filled
option-value=
"Id"
option-label=
"EmployeeName"
v-model=
"msg.CreateIds"
multiple
:options=
"SubordList"
emit-value
map-options
label=
"我下属的"
/>
<div
class=
"col-3"
v-if=
"msg.BelongType == 4"
>
<q-select
@
input=
"resetSearch"
dense
clearable
@
filter=
"filterSubord"
use-input
filled
option-value=
"Id"
option-label=
"EmployeeName"
v-model=
"msg.CreateIds"
multiple
:options=
"SubordList"
emit-value
map-options
label=
"我下属的"
/>
</div>
</div>
</div>
<div
class=
"page-content"
>
<stulist
:dataList=
"data"
@
success=
"refreshPage"
ref=
"stuList"
:isJudgeTrans=
"isJudgeTrans"
>
</stulist>
<stulist
:dataList=
"data"
@
reload=
"getStudent"
@
success=
"refreshPage"
ref=
"stuList"
:isJudgeTrans=
"isJudgeTrans"
>
</stulist>
<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>
</div>
</template>
<
script
>
import
{
import
{
getStudentPage
,
getSchoolDropdown
,
deleteStudent
,
...
...
@@ -80,22 +201,14 @@
queryStuStageList
,
GetStudentTypeList
,
GetPersonalDimension
}
from
"../../api/school/index"
;
import
{
queryEmployee
}
from
"../../api/users/user"
;
import
{
resetPassword
}
from
"../../api/users/user.js"
;
}
from
"../../api/school/index"
;
import
{
queryEmployee
}
from
"../../api/users/user"
;
import
{
resetPassword
}
from
"../../api/users/user.js"
;
import
stulist
from
"../../components/school/student/stulist"
;
import
{
getMyCustomerList
}
from
"../../api/sale/sale"
;
import
{
mapGetters
}
from
"vuex"
;
export
default
{
import
stulist
from
"../../components/school/student/stulist"
;
import
{
getMyCustomerList
}
from
"../../api/sale/sale"
;
import
{
mapGetters
}
from
"vuex"
;
export
default
{
meta
:
{
title
:
"客户管理"
},
...
...
@@ -121,11 +234,11 @@
StartTime
:
""
,
//开始时间
EndTime
:
""
,
//结束时间
CustomerId
:
0
,
QQ
:
''
,
WechatNo
:
''
,
StuType
:
''
,
QQ
:
""
,
WechatNo
:
""
,
StuType
:
""
,
CreateIds
:
[],
ExistCourseConsultant
:
""
,
//是否存在课程顾问(1-存在,2=不存在)
ExistCourseConsultant
:
""
//是否存在课程顾问(1-存在,2=不存在)
},
dateArray
:
[],
//日期数组
pageCount
:
0
,
...
...
@@ -135,7 +248,8 @@
allCustomerList
:
[],
//所有同行列表
customTypeList
:
[],
//客户类型
//归属类型列表
BelongTypeList
:
[{
BelongTypeList
:
[
{
Id
:
1
,
Name
:
"全部"
},
...
...
@@ -153,14 +267,15 @@
}
],
//课程顾问
consultantList
:
[{
consultantList
:
[
{
Id
:
1
,
Name
:
"是"
},
{
Id
:
2
,
Name
:
"否"
},
}
],
isJudgeTrans
:
1
,
//用于判断转交是否有条件
SubordList
:
[],
//我的下属数据
...
...
@@ -212,7 +327,7 @@
if
(
res
.
Code
==
1
)
{
this
.
customTypeList
=
res
.
Data
;
}
})
});
},
resetSearch
()
{
this
.
msg
.
pageIndex
=
1
;
...
...
@@ -249,11 +364,11 @@
this
.
pageCount
=
res
.
Data
.
PageCount
;
this
.
data
.
forEach
(
x
=>
{
if
(
x
.
CreateBy
!=
this
.
userInfo
.
Id
)
{
x
.
BelongType
=
3
x
.
BelongType
=
3
;
}
else
{
x
.
BelongType
=
1
x
.
BelongType
=
1
;
}
})
});
})
.
catch
(()
=>
{
this
.
loading
=
false
;
...
...
@@ -268,8 +383,8 @@
this
.
allCustomerList
=
res
.
Data
;
this
.
myCustomerList
.
unshift
({
CustomerName
:
"不限"
,
CustomerId
:
0
,
})
CustomerId
:
0
});
});
},
cusfilterFn
(
val
,
update
)
{
...
...
@@ -287,15 +402,15 @@
});
}
}
};
};
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
@import
url('~assets/css/table.sass')
</
style
>
<
style
scoped
>
/
deep
/
.el-input__inner
,
/
deep
/
.el-range-input
{
/
deep
/
.el-input__inner
,
/
deep
/
.el-range-input
{
background-color
:
transparent
;
border
:
none
;
}
}
</
style
>
src/pages/system/stuDistributionRule.vue
0 → 100644
View file @
186605a9
<
template
>
<div>
<q-card
flat
class=
"q-pa-lg q-my-lg"
v-loading=
"loading"
>
<div
class=
"text-h6 text-weight-bold"
>
分配给以下部门/成员
</div>
<div
class=
"text-subtitle1 text-weight-bold q-my-md"
>
<span>
适用部门/成员
</span>
<span
class=
"text-negative"
>
*
</span>
</div>
<div
class=
"q-mb-md row"
>
<div
class=
"col"
>
<q-btn
outline
color=
"primary"
class=
"q-px-lg"
@
click=
"outerVisible = true"
>
选择部门/成员
</q-btn
>
</div>
<div
class=
"col"
>
已选择:
{{
chosenUser
.
length
}}
人
</div>
</div>
<div
class=
"q-mb-xl"
>
<q-badge
color=
"primary"
class=
"q-mr-md"
v-for=
"(x, i) in chosenUser"
:key=
"i"
>
{{
x
.
DeptName
}}
</q-badge>
</div>
<div
class=
"text-h6 text-weight-bold q-mt-xl"
>
设置分配规则
</div>
<div
class=
"text-subtitle1 text-weight-bold q-my-md row items-center"
>
<div>
选择分配规则:
</div>
<div
class=
"col q-ml-md"
>
<q-radio
v-model=
"ruleType"
val=
"0"
label=
"顺序分配"
/>
<q-radio
v-model=
"ruleType"
val=
"1"
label=
"随机分配"
/>
</div>
</div>
<q-btn
class=
"q-mt-xl q-px-lg"
unelevated
color=
"primary"
:loading=
"saving"
@
click=
"saveHandler"
>
立即保存
</q-btn
>
</q-card>
<choiceapproval
v-if=
"outerVisible"
@
close=
"getclose()"
@
success=
"getsuccess2"
:byval=
"chosenUser"
cptype=
"0"
></choiceapproval>
</div>
</
template
>
<
script
>
import
choiceapproval
from
"../../components/enterprise/choiceapproval"
;
import
{
getDictValueList
}
from
"../../api/administration/administration"
;
import
{
saveDict
}
from
"../../api/system/notiveSysSet"
;
export
default
{
components
:
{
choiceapproval
},
data
()
{
return
{
chosenUser
:
[],
outerVisible
:
false
,
ruleType
:
"0"
,
saving
:
false
,
loading
:
true
,
dictObjEmp
:
{},
dictObjRule
:
{}
};
},
created
()
{
this
.
init
();
},
methods
:
{
getclose
()
{
// 企业关闭
this
.
ismember
=
false
;
this
.
outerVisible
=
false
;
},
getsuccess2
(
list
,
type
)
{
console
.
log
(
list
);
this
.
chosenUser
=
list
;
this
.
outerVisible
=
false
;
},
init
()
{
getDictValueList
({
Key
:
"PUSH_STU_UNION_EMP"
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dictObjEmp
=
res
.
Data
[
0
];
if
(
res
.
Data
[
0
].
Content
!=
""
&&
res
.
Data
[
0
].
Content
!=
null
)
{
let
tempVal
=
res
.
Data
[
0
].
Content
.
split
(
","
);
let
tempLabel
=
res
.
Data
[
0
].
Mask
.
split
(
","
);
tempVal
.
forEach
((
x
,
i
)
=>
{
let
temp
=
{
DeptId
:
x
,
DeptName
:
tempLabel
[
i
]
};
this
.
chosenUser
.
push
(
temp
);
});
}
getDictValueList
({
Key
:
"PUSH_STU_RULETYPE"
}).
then
(
r
=>
{
this
.
dictObjRule
=
r
.
Data
[
0
];
if
(
r
.
Code
==
1
)
{
if
(
r
.
Data
[
0
].
Content
!=
""
&&
res
.
Data
[
0
].
Content
!=
null
)
{
this
.
ruleType
=
r
.
Data
[
0
].
Content
;
}
}
this
.
loading
=
false
;
});
}
});
},
saveHandler
()
{
if
(
this
.
chosenUser
.
length
>
0
)
{
this
.
saving
=
true
;
let
contentTemp
=
""
;
let
maskTemp
=
""
;
this
.
chosenUser
.
forEach
(
x
=>
{
contentTemp
+=
","
+
x
.
DeptId
;
maskTemp
+=
","
+
x
.
DeptName
;
});
this
.
dictObjEmp
.
Content
=
contentTemp
.
substring
(
1
);
this
.
dictObjEmp
.
Mask
=
maskTemp
.
substring
(
1
);
saveDict
(
this
.
dictObjEmp
).
then
(
r
=>
{
if
(
r
.
Code
==
1
)
{
setTimeout
(()
=>
{
this
.
dictObjRule
.
Content
=
this
.
ruleType
;
saveDict
(
this
.
dictObjRule
).
then
(
res
=>
{
if
(
r
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
"数据保存成功!"
,
position
:
"top"
});
}
this
.
saving
=
false
;
});
},
1000
);
}
else
{
this
.
saving
=
false
;
}
});
}
else
{
this
.
$q
.
notify
({
icon
:
""
,
color
:
"negative"
,
timeout
:
2000
,
message
:
"请选择适用的部门成员"
,
position
:
"top"
});
}
}
}
};
</
script
>
<
style
></
style
>
src/pages/system/stuManageConfig.vue
View file @
186605a9
<
template
>
<div
class=
page-body
>
<div
class=
"page-body"
>
<q-tabs
v-model=
"tabCheck"
narrow-indicator
...
...
@@ -12,27 +12,31 @@
<q-tab
:ripple=
"false"
:name=
"3"
label=
"学习目的"
/>
<q-tab
:ripple=
"false"
:name=
"4"
label=
"收客渠道"
/>
<q-tab
:ripple=
"false"
:name=
"5"
label=
"客户需求"
></q-tab>
<q-tab
:ripple=
"false"
:name=
"6"
label=
"客户分配规则"
></q-tab>
</q-tabs>
<stage
v-if=
"tabCheck==1"
></stage>
<cusType
v-if=
"tabCheck==2"
></cusType>
<aim
v-if=
"tabCheck==3"
></aim>
<channel
v-if=
"tabCheck==4"
></channel>
<customneed
v-if=
"tabCheck==5"
></customneed>
<stage
v-if=
"tabCheck == 1"
></stage>
<cusType
v-if=
"tabCheck == 2"
></cusType>
<aim
v-if=
"tabCheck == 3"
></aim>
<channel
v-if=
"tabCheck == 4"
></channel>
<customneed
v-if=
"tabCheck == 5"
></customneed>
<stu-distribution-rule
v-if=
"tabCheck == 6"
></stu-distribution-rule>
</div>
</
template
>
<
script
>
import
stage
from
"./stage"
;
import
cusType
from
"./customType"
import
aim
from
'./studyAim'
import
channel
from
'./stuReceiveChannel'
import
customneed
from
'./customneed'
import
cusType
from
"./customType"
;
import
aim
from
"./studyAim"
;
import
channel
from
"./stuReceiveChannel"
;
import
customneed
from
"./customneed"
;
import
stuDistributionRule
from
"./stuDistributionRule"
;
export
default
{
components
:
{
stage
,
cusType
,
aim
,
channel
,
customneed
customneed
,
stuDistributionRule
},
data
()
{
return
{
...
...
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