Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
A
admin-base
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
new-sing
admin-base
Commits
a49dae2b
Commit
a49dae2b
authored
Aug 12, 2019
by
赵茹林
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
标签页 新增搜索、高级搜索、导出、权限配置
9个期数搜索框更新
parent
a23277cf
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
320 additions
and
476 deletions
+320
-476
App.vue
src/App.vue
+21
-0
channelConversionList.vue
src/components/conversionList/channelConversionList.vue
+3
-4
channelGoodsConversionList.vue
src/components/conversionList/channelGoodsConversionList.vue
+3
-5
channelTransList.vue
src/components/conversionList/channelTransList.vue
+6
-1
marketEnrollmentConversionList.vue
...ponents/conversionList/marketEnrollmentConversionList.vue
+14
-9
periodsConversionList.vue
src/components/conversionList/periodsConversionList.vue
+14
-20
sourceConversionList.vue
src/components/conversionList/sourceConversionList.vue
+6
-4
squadConversionList.vue
src/components/conversionList/squadConversionList.vue
+6
-4
teacherConversionList.vue
src/components/conversionList/teacherConversionList.vue
+6
-4
teacherPeriodsConversionList.vue
...omponents/conversionList/teacherPeriodsConversionList.vue
+5
-2
add.vue
src/components/exchange/add.vue
+1
-1
index.vue
src/components/framework/index.vue
+4
-2
index.vue
src/components/lesson/index.vue
+12
-14
index.vue
src/components/marketStatistics/index.vue
+1
-2
dialog.vue
src/components/periods/dialog.vue
+2
-8
index.vue
src/components/periods/index.vue
+3
-1
newDialog.vue
src/components/periods/newDialog.vue
+15
-18
role.vue
src/components/system/role.vue
+1
-1
staff.vue
src/components/system/staff.vue
+2
-2
staffRecord.vue
src/components/system/staffRecord.vue
+1
-1
tag.vue
src/components/system/tag.vue
+138
-279
index.vue
src/components/user/index.vue
+40
-68
index.vue
src/components/userDetail/index.vue
+8
-26
api.js
src/service/api.js
+8
-0
No files found.
src/App.vue
View file @
a49dae2b
...
@@ -198,6 +198,12 @@ html, body {
...
@@ -198,6 +198,12 @@ html, body {
&.width-320 {
&.width-320 {
max-width: 320px;
max-width: 320px;
}
}
&.width-360 {
max-width: 360px;
}
&.width-400 {
max-width: 400px;
}
&.width-480 {
&.width-480 {
max-width: 480px;
max-width: 480px;
}
}
...
@@ -232,4 +238,19 @@ html, body {
...
@@ -232,4 +238,19 @@ html, body {
}
}
}
}
.el-table {
.f-c > div {
display: flex !important;
flex-flow: row;
justify-content: flex-start;
align-items: center;
}
.avatar {
width: 50px;
margin-right: 8px;
border-radius: 50%;
height: 50px;
}
}
</
style
>
</
style
>
src/components/conversionList/channelConversionList.vue
View file @
a49dae2b
...
@@ -140,8 +140,7 @@ export default {
...
@@ -140,8 +140,7 @@ export default {
goods_id
:
null
,
goods_id
:
null
,
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
//periodList: [],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -343,12 +342,12 @@ export default {
...
@@ -343,12 +342,12 @@ export default {
this
.
limit
=
val
;
this
.
limit
=
val
;
this
.
getChannelTransList
();
this
.
getChannelTransList
();
},
},
getPeriodsOtherList
()
{
/*
getPeriodsOtherList() {
let json = { limit: 1000, page: 1,max_watch_num:20 };
let json = { limit: 1000, page: 1,max_watch_num:20 };
getPeriodsOtherListApi(json).then(res => {
getPeriodsOtherListApi(json).then(res => {
this.periodList = res.list;
this.periodList = res.list;
});
});
},
},
*/
getChannelTransList
()
{
getChannelTransList
()
{
let
json
=
{
let
json
=
{
limit
:
this
.
limit
,
limit
:
this
.
limit
,
...
...
src/components/conversionList/channelGoodsConversionList.vue
View file @
a49dae2b
...
@@ -157,8 +157,7 @@ export default {
...
@@ -157,8 +157,7 @@ export default {
list
:
[],
list
:
[],
goods_id
:
null
,
goods_id
:
null
,
teacherList
:
[],
teacherList
:
[],
periodList
:
[],
//periodList: [],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -204,7 +203,6 @@ export default {
...
@@ -204,7 +203,6 @@ export default {
];
];
}
}
},
},
propertyList
:
[],
spanArr
:
[],
spanArr
:
[],
contentSpanArr
:
[],
contentSpanArr
:
[],
searchFrom
:
{
searchFrom
:
{
...
@@ -391,12 +389,12 @@ export default {
...
@@ -391,12 +389,12 @@ export default {
this
.
limit
=
val
;
this
.
limit
=
val
;
this
.
getChannelTransList
();
this
.
getChannelTransList
();
},
},
getPeriodsOtherList
()
{
/*
getPeriodsOtherList() {
let json = { limit: 1000,page:1,max_watch_num:20 };
let json = { limit: 1000,page:1,max_watch_num:20 };
getPeriodsOtherListApi(json).then(res => {
getPeriodsOtherListApi(json).then(res => {
this.periodList = res.list;
this.periodList = res.list;
});
});
},
},
*/
getChannelTransList
()
{
getChannelTransList
()
{
let
json
=
{
let
json
=
{
limit
:
this
.
limit
,
limit
:
this
.
limit
,
...
...
src/components/conversionList/channelTransList.vue
View file @
a49dae2b
...
@@ -65,13 +65,15 @@
...
@@ -65,13 +65,15 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
:popper-class=
"'refresh-select-multi width-480'"
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
clearable
clearable
filterable
>
filterable
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
title
"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
label
"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"组ID"
>
<el-form-item
label=
"组ID"
>
...
@@ -443,6 +445,9 @@ export default {
...
@@ -443,6 +445,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
});
});
},
},
...
...
src/components/conversionList/marketEnrollmentConversionList.vue
View file @
a49dae2b
...
@@ -36,13 +36,15 @@
...
@@ -36,13 +36,15 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
:popper-class=
"'refresh-select-multi width-480'"
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
clearable
clearable
filterable
>
filterable
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
title
"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
label
"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
...
@@ -58,12 +60,11 @@
...
@@ -58,12 +60,11 @@
:header-cell-style=
"
{background:'#5f5f5f',color:'#fff'}"
:header-cell-style=
"
{background:'#5f5f5f',color:'#fff'}"
:data="list"
:data="list"
size="mini"
size="mini"
height="calc(100vh - 210px)"
:row-class-name="tableRowClassName"
:row-class-name="tableRowClassName"
:span-method="arraySpanMethod"
:span-method="arraySpanMethod"
>
>
<
el-table-column
prop=
"periods_title"
align=
"center"
min-width=
"80"
fixed
label=
"期数名称"
>
<
!--height="calc(100vh - 210px)"--
>
</el-table-column>
<
el-table-column
prop=
"periods_title"
align=
"center"
min-width=
"80"
fixed
label=
"期数名称"
><
/el-table-column>
<el-table-column
prop=
"is_other"
min-width=
"160"
align=
"left"
fixed
label=
"渠道信息"
>
<el-table-column
prop=
"is_other"
min-width=
"160"
align=
"left"
fixed
label=
"渠道信息"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
来源:
{{
scope
.
row
.
is_other
==
0
?
"内部"
:
"外部"
}}
<br>
来源:
{{
scope
.
row
.
is_other
==
0
?
"内部"
:
"外部"
}}
<br>
...
@@ -109,7 +110,6 @@ export default {
...
@@ -109,7 +110,6 @@ export default {
"wait_join_num"
,
"wait_join_num"
,
"other_wait_join_num"
"other_wait_join_num"
],
],
periodList
:[],
searchFrom
:
{
searchFrom
:
{
payTime
:
[],
payTime
:
[],
start_at
:
""
,
start_at
:
""
,
...
@@ -196,6 +196,9 @@ export default {
...
@@ -196,6 +196,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
});
});
},
},
...
@@ -292,10 +295,12 @@ export default {
...
@@ -292,10 +295,12 @@ export default {
<
style
scoped
lang=
"less"
>
<
style
scoped
lang=
"less"
>
.searchFrom{
.searchFrom{
position: absolute;
/*position: absolute;
top: 20px;
top: 20px;*/
}
.el-table{
/*margin-top: 130px;*/
}
}
.el-table{margin-top: 130px;}
/deep/.el-table--enable-row-hover .el-table__body tr:hover > td {
/deep/.el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #fff;
background-color: #fff;
}
}
...
@@ -306,6 +311,6 @@ export default {
...
@@ -306,6 +311,6 @@ export default {
max-width: 100% !important;
max-width: 100% !important;
}
}
.el-main .content .router-block .child-view {
.el-main .content .router-block .child-view {
height: 100vh;
/*height: 100vh;*/
}
}
</
style
>
</
style
>
src/components/conversionList/periodsConversionList.vue
View file @
a49dae2b
...
@@ -11,8 +11,7 @@
...
@@ -11,8 +11,7 @@
end-placeholder=
"结束日期"
end-placeholder=
"结束日期"
:picker-options=
"
{shortcuts:[today,yesterday,last7Day,last30Day]}"
:picker-options=
"
{shortcuts:[today,yesterday,last7Day,last30Day]}"
:default-time="['00:00:00','23:59:59']"
:default-time="['00:00:00','23:59:59']"
@change="getChannelTransList"
@change="getChannelTransList">
</el-date-picker>
>
</el-date-picker>
</el-form-item>
</el-form-item>
<el-form-item
label=
"开结课日期"
>
<el-form-item
label=
"开结课日期"
>
<el-date-picker
<el-date-picker
...
@@ -24,8 +23,7 @@
...
@@ -24,8 +23,7 @@
end-placeholder=
"结束日期"
end-placeholder=
"结束日期"
:picker-options=
"
{shortcuts:[classToday,classYesterday,classLast7Day,classLast30Day]}"
:picker-options=
"
{shortcuts:[classToday,classYesterday,classLast7Day,classLast30Day]}"
:default-time="['00:00:00','23:59:59']"
:default-time="['00:00:00','23:59:59']"
@change="getChannelTransList"
@change="getChannelTransList">
</el-date-picker>
>
</el-date-picker>
</el-form-item>
</el-form-item>
<el-form-item
label=
"渠道code"
>
<el-form-item
label=
"渠道code"
>
<el-input
v-model=
"searchFrom.invite_type"
style=
"width: 110px"
></el-input>
<el-input
v-model=
"searchFrom.invite_type"
style=
"width: 110px"
></el-input>
...
@@ -38,25 +36,23 @@
...
@@ -38,25 +36,23 @@
clearable
clearable
placeholder=
"请选择"
placeholder=
"请选择"
style=
"width: 150px"
style=
"width: 150px"
@
change=
"selectChange"
@
change=
"selectChange"
>
>
<el-option
<el-option
v-for=
"(data,index) in watchList"
v-for=
"(data,index) in watchList"
:key=
"index"
:key=
"index"
:label=
"data.title"
:label=
"data.title"
:value=
"data.id"
:value=
"data.id"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
filterable
filterable
>
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.label"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.title"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"组ID"
>
<el-form-item
label=
"组ID"
>
...
@@ -69,15 +65,13 @@
...
@@ -69,15 +65,13 @@
placeholder=
"请选择"
placeholder=
"请选择"
@
change=
"changeTeacher"
@
change=
"changeTeacher"
clearable
clearable
style=
"width: 100px"
style=
"width: 100px"
>
>
<el-option
label=
"暂不分配"
value=
"0"
></el-option>
<el-option
label=
"暂不分配"
value=
"0"
></el-option>
<el-option
<el-option
v-for=
"(data,index) in teacherList"
v-for=
"(data,index) in teacherList"
:key=
"index"
:key=
"index"
:label=
"data.name"
:label=
"data.name"
:value=
"data.id"
:value=
"data.id"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
...
@@ -92,15 +86,13 @@
...
@@ -92,15 +86,13 @@
:data=
"list"
:data=
"list"
@
sort-change=
"sortMethod"
@
sort-change=
"sortMethod"
:style=
"
{width: width+'px'}"
:style=
"
{width: width+'px'}"
fixed
fixed>
>
<el-table-column
prop=
"periods_title"
label=
"期数名称"
></el-table-column>
<el-table-column
prop=
"periods_title"
label=
"期数名称"
></el-table-column>
<el-table-column
<el-table-column
prop=
"duration_over_at"
prop=
"duration_over_at"
label=
"开课看课时间"
label=
"开课看课时间"
style=
"font-size:12px;"
style=
"font-size:12px;"
width=
"200"
width=
"200"
>
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
开课日期:
{{
scope
.
row
.
start_at
}}
开课日期:
{{
scope
.
row
.
start_at
}}
<br>
<br>
...
@@ -164,7 +156,6 @@ export default {
...
@@ -164,7 +156,6 @@ export default {
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
periodList
:
[],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -453,6 +444,9 @@ export default {
...
@@ -453,6 +444,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
console
.
log
(
320
)
console
.
log
(
320
)
});
});
...
...
src/components/conversionList/sourceConversionList.vue
View file @
a49dae2b
...
@@ -35,13 +35,13 @@
...
@@ -35,13 +35,13 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
filterable
filterable
>
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.label"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.title"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"转化前商品"
>
<el-form-item
label=
"转化前商品"
>
...
@@ -193,7 +193,6 @@ export default {
...
@@ -193,7 +193,6 @@ export default {
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
periodList
:
[],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -473,6 +472,9 @@ export default {
...
@@ -473,6 +472,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
console
.
log
(
320
)
console
.
log
(
320
)
});
});
...
...
src/components/conversionList/squadConversionList.vue
View file @
a49dae2b
...
@@ -37,13 +37,13 @@
...
@@ -37,13 +37,13 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
filterable
filterable
>
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.label"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.title"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
...
@@ -117,7 +117,6 @@ export default {
...
@@ -117,7 +117,6 @@ export default {
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
periodList
:
[],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -355,6 +354,9 @@ export default {
...
@@ -355,6 +354,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
});
});
},
},
...
...
src/components/conversionList/teacherConversionList.vue
View file @
a49dae2b
...
@@ -29,8 +29,7 @@
...
@@ -29,8 +29,7 @@
clearable
clearable
placeholder=
"请选择"
placeholder=
"请选择"
style=
"width: 150px"
style=
"width: 150px"
@
change=
"selectChange"
@
change=
"selectChange"
>
>
<el-option
<el-option
v-for=
"(data,index) in watchList"
v-for=
"(data,index) in watchList"
:key=
"index"
:key=
"index"
...
@@ -41,12 +40,13 @@
...
@@ -41,12 +40,13 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
filterable
>
filterable
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
title
"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
label
"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
...
@@ -121,7 +121,6 @@ export default {
...
@@ -121,7 +121,6 @@ export default {
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
periodList
:
[],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -358,6 +357,9 @@ export default {
...
@@ -358,6 +357,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
});
});
},
},
...
...
src/components/conversionList/teacherPeriodsConversionList.vue
View file @
a49dae2b
...
@@ -35,12 +35,13 @@
...
@@ -35,12 +35,13 @@
</el-form-item>
</el-form-item>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-form-item
label=
"期数名称"
prop=
"periods_title"
>
<el-select
<el-select
style=
"width: 480px"
placeholder=
"请选择"
placeholder=
"请选择"
v-model=
"searchFrom.periods_id"
v-model=
"searchFrom.periods_id"
@
change=
"onPeriodChange"
@
change=
"onPeriodChange"
multiple
multiple
filterable
>
filterable
>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
title
"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in periodList"
:key=
"item.id"
:label=
"item.
label
"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"老师"
>
<el-form-item
label=
"老师"
>
...
@@ -164,7 +165,6 @@ export default {
...
@@ -164,7 +165,6 @@ export default {
teacherList
:
[],
teacherList
:
[],
goodsList
:
[],
goodsList
:
[],
periodList
:
[],
periodList
:
[],
total
:
0
,
today
:
{
today
:
{
text
:
"今天"
,
text
:
"今天"
,
onClick
:
()
=>
{
onClick
:
()
=>
{
...
@@ -456,6 +456,9 @@ export default {
...
@@ -456,6 +456,9 @@ export default {
getPeriodsOtherList
()
{
getPeriodsOtherList
()
{
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
let
json
=
{
limit
:
1000
,
page
:
1
,
max_watch_num
:
20
};
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
getPeriodsOtherListApi
(
json
).
then
(
res
=>
{
res
.
list
.
forEach
(
val
=>
{
val
.
label
=
`【
${
val
.
goods_id
}
】
${
val
.
title
}${
val
.
watch_num
}
课时(
${
val
.
start_at
.
slice
(
5
).
replace
(
'-'
,
''
)}
)-d
${
val
.
has_watch_num
}
`
})
this
.
periodList
=
res
.
list
;
this
.
periodList
=
res
.
list
;
});
});
},
},
...
...
src/components/exchange/add.vue
View file @
a49dae2b
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
<el-form-item
label=
"活动方案"
>
<el-form-item
label=
"活动方案"
>
<el-select
<el-select
v-model=
"newIntegral.source"
v-model=
"newIntegral.source"
:p
rop
-class=
"'refresh-select-multi width-480'"
:p
opper
-class=
"'refresh-select-multi width-480'"
style=
"width: 480px"
placeholder=
"请选择"
filterable
>
style=
"width: 480px"
placeholder=
"请选择"
filterable
>
<el-option
<el-option
v-for=
"(data,index) in classSource"
v-for=
"(data,index) in classSource"
...
...
src/components/framework/index.vue
View file @
a49dae2b
...
@@ -54,6 +54,8 @@
...
@@ -54,6 +54,8 @@
.menu-block{
.menu-block{
float: left;
float: left;
height: 100%;
height: 100%;
background-color: #333333;
/*height: calc(100vh - 60px);*/
/*overflow: auto;
/*overflow: auto;
position: fixed;
position: fixed;
left: 0;
left: 0;
...
@@ -69,9 +71,9 @@
...
@@ -69,9 +71,9 @@
height: 100%;
height: 100%;
position: relative;
position: relative;
.child-view{
.child-view{
height: calc(100% - 40px);
/*
height: calc(100% - 40px);
width: 100%;
width: 100%;
overflow-y: auto;
overflow-y: auto;
*/
}
}
}
}
}
}
...
...
src/components/lesson/index.vue
View file @
a49dae2b
<
template
>
<
template
>
<div
class=
"user"
>
<div
class=
"user"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline=
""
class=
"search-form"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline=
""
class=
"search-form"
>
<el-form-item
label=
"课程标题"
>
<el-form-item
label=
"课程标题"
>
<el-input
v-model=
"searchFrom.title"
></el-input>
<el-input
v-model=
"searchFrom.title"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
>
<el-form-item
label=
""
>
<div
class=
"search-btn-block"
>
<div
class=
"search-btn-block"
>
<el-button
type=
"primary"
plain
@
click=
"getUser"
icon=
"el-icon-search"
>
搜索
</el-button>
<el-button
type=
"primary"
plain
@
click=
"getUser"
icon=
"el-icon-search"
>
搜索
</el-button>
<el-button
type=
"success"
plain
@
click=
"add"
v-if=
"!$store.state.readonly"
icon=
"el-icon-plus"
>
新增课程
</el-button>
<el-button
type=
"success"
plain
@
click=
"add"
v-if=
"!$store.state.readonly"
icon=
"el-icon-plus"
>
新增课程
</el-button>
</div>
</div>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<el-tabs
v-model=
"searchFrom.type"
type=
"card"
style=
"background: white;padding-top: 10px"
@
tab-click=
"getUser"
>
<el-tabs
v-model=
"searchFrom.type"
type=
"card"
style=
"background: white;padding-top: 10px"
@
tab-click=
"getUser"
>
<el-tab-pane
label=
"全部"
name=
"-1"
></el-tab-pane>
<el-tab-pane
label=
"全部"
name=
"-1"
></el-tab-pane>
<el-tab-pane
label=
"日课"
name=
"1"
></el-tab-pane>
<el-tab-pane
label=
"日课"
name=
"1"
></el-tab-pane>
<el-tab-pane
label=
"月课"
name=
"0"
></el-tab-pane>
<el-tab-pane
label=
"月课"
name=
"0"
></el-tab-pane>
</el-tabs>
</el-tabs>
<el-table
<el-table
:data=
"userList"
>
:data=
"userList"
style=
"width: 100%"
>
<el-table-column
<el-table-column
prop=
"title"
prop=
"title"
label=
"课程名"
>
label=
"课程名"
>
...
@@ -181,8 +179,8 @@
...
@@ -181,8 +179,8 @@
margin: 0;
margin: 0;
}
}
.user{
.user{
height: 100%;
/*height: 100%;*/
overflow: auto;
/*overflow: auto;*/
padding: 20px 0;
padding: 20px 0;
.btn-content{
.btn-content{
text-align: center;
text-align: center;
...
...
src/components/marketStatistics/index.vue
View file @
a49dae2b
...
@@ -8,8 +8,7 @@
...
@@ -8,8 +8,7 @@
height="calc(100vh - 60px)"
height="calc(100vh - 60px)"
size="mini"
size="mini"
:row-class-name="tableRowClassName"
:row-class-name="tableRowClassName"
:span-method="arraySpanMethod"
:span-method="arraySpanMethod">
>
<el-table-column
min-width=
"180"
prop=
"wait_join_num"
align=
"left"
fixed=
"left"
label=
"期数总状况"
>
<el-table-column
min-width=
"180"
prop=
"wait_join_num"
align=
"left"
fixed=
"left"
label=
"期数总状况"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
期数名称:
{{
scope
.
row
.
title
}}
期数名称:
{{
scope
.
row
.
title
}}
...
...
src/components/periods/dialog.vue
View file @
a49dae2b
<
template
>
<
template
>
<div>
<div>
<el-dialog
<el-dialog
:title=
"dialogObj.title"
:visible
.
sync=
"dialogObj.show"
>
:title=
"dialogObj.title"
:visible
.
sync=
"dialogObj.show"
>
<el-table
<el-table
:data=
"goodList"
:data=
"goodList"
style=
"width: 100%"
style=
"width: 100%"
row-key=
"id"
row-key=
"id"
highlight-current-row
highlight-current-row
@
current-change=
"handleCurrentChange"
>
@
current-change=
"handleCurrentChange"
>
<el-table-column
<el-table-column
prop=
"id"
label=
"商品ID"
></el-table-column>
prop=
"id"
label=
"商品ID"
>
</el-table-column>
<el-table-column
<el-table-column
prop=
"name"
prop=
"name"
label=
"名称"
>
label=
"名称"
>
...
...
src/components/periods/index.vue
View file @
a49dae2b
...
@@ -6,7 +6,9 @@
...
@@ -6,7 +6,9 @@
<el-input
v-model=
"title"
placeholder=
"请输入内容"
style=
"width: 150px"
clearable
></el-input>
<el-input
v-model=
"title"
placeholder=
"请输入内容"
style=
"width: 150px"
clearable
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"商品名称"
>
<el-form-item
label=
"商品名称"
>
<el-select
v-model=
"goodsId"
filterable
placeholder=
"请选择"
style=
"width: 150px"
@
change=
"onSearch"
clearable
>
<el-select
:popper-class=
"'refresh-select-multi width-400'"
style=
"width: 400px"
v-model=
"goodsId"
filterable
placeholder=
"请选择"
@
change=
"onSearch"
clearable
>
<el-option
<el-option
v-for=
"(data,index) in goodList"
v-for=
"(data,index) in goodList"
:key=
"index"
:key=
"index"
...
...
src/components/periods/newDialog.vue
View file @
a49dae2b
...
@@ -2,26 +2,23 @@
...
@@ -2,26 +2,23 @@
<div>
<div>
<el-dialog
<el-dialog
:title=
"dialogObj.title"
:title=
"dialogObj.title"
center
center
append-to-body
append-to-body
:visible
.
sync=
"show"
:visible
.
sync=
"show"
width=
"800px"
>
width=
"800px"
>
<div
v-loading=
"loading"
>
<div
v-loading=
"loading"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"120px"
:rules=
"rules"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"120px"
:rules=
"rules"
>
<el-row>
<el-form-item
label=
"商品名称"
prop=
"goods_id"
>
<el-col
:span=
"10"
>
<el-select
<el-form-item
label=
"商品名称"
prop=
"goods_id"
>
:popper-class=
"'refresh-select-multi width-480'"
style=
"width: 480px"
<el-select
v-model=
"form.goods_id"
placeholder=
"请选择"
@
change=
"onOptionChange"
:disabled=
"form.id ? true : false"
>
v-model=
"form.goods_id"
placeholder=
"请选择"
@
change=
"onOptionChange"
:disabled=
"form.id ? true : false"
>
<el-option
<el-option
v-for=
"(data,index) in goodList"
v-for=
"(data,index) in goodList"
:key=
"index"
:key=
"index"
:label=
"data | filterGoods"
:label=
"data | filterGoods"
:value=
"data.id"
>
:value=
"data.id"
>
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-row>
<el-form-item
label=
"期数名称"
prop=
"title"
>
<el-form-item
label=
"期数名称"
prop=
"title"
>
<el-input
v-model=
"form.title"
></el-input>
<el-input
v-model=
"form.title"
></el-input>
</el-form-item>
</el-form-item>
...
@@ -83,10 +80,10 @@
...
@@ -83,10 +80,10 @@
</el-select>
</el-select>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
</div>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"show = false"
>
取 消
</el-button>
<el-button
@
click=
"show = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"sub"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"sub"
>
确 定
</el-button>
</span>
</div>
</div>
</el-dialog>
</el-dialog>
</div>
</div>
...
...
src/components/system/role.vue
View file @
a49dae2b
...
@@ -96,7 +96,7 @@
...
@@ -96,7 +96,7 @@
limit
:
10
,
limit
:
10
,
roleList
:[],
roleList
:[],
exportMenuList
:[
exportMenuList
:[
'2-3'
,
'5-10'
,
'5-2'
,
'5-1'
,
'5-3'
,
'5-8'
,
'5-9'
,
'3-1'
,
'7-9'
,
'6-3'
'2-3'
,
'5-10'
,
'5-2'
,
'5-1'
,
'5-3'
,
'5-8'
,
'5-9'
,
'3-1'
,
'7-9'
,
'6-3'
,
'10-8'
],
],
dialog
:{
dialog
:{
title
:
'新增角色'
,
title
:
'新增角色'
,
...
...
src/components/system/staff.vue
View file @
a49dae2b
...
@@ -81,7 +81,7 @@
...
@@ -81,7 +81,7 @@
</el-table-column>
</el-table-column>
</el-table>
</el-table>
<page
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
<page
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
<el-dialog
:title=
"dialog.title"
:visible
.
sync=
"dialog.show"
width=
"
5
00px"
>
<el-dialog
:title=
"dialog.title"
:visible
.
sync=
"dialog.show"
width=
"
8
00px"
>
<el-form
ref=
"dialogForm"
:rules=
"dialog.form.rules"
:model=
"dialog.form"
label-width=
"100px"
>
<el-form
ref=
"dialogForm"
:rules=
"dialog.form.rules"
:model=
"dialog.form"
label-width=
"100px"
>
<el-form-item
label=
"真实姓名:"
prop=
"name"
>
<el-form-item
label=
"真实姓名:"
prop=
"name"
>
...
@@ -334,7 +334,7 @@
...
@@ -334,7 +334,7 @@
}
}
.user {
.user {
height: 100%;
/*height: 100%;*/
overflow: auto;
overflow: auto;
padding: 20px 0;
padding: 20px 0;
...
...
src/components/system/staffRecord.vue
View file @
a49dae2b
...
@@ -151,7 +151,7 @@
...
@@ -151,7 +151,7 @@
<
style
lang=
"less"
scoped
>
<
style
lang=
"less"
scoped
>
.user {
.user {
height: 100%;
/*height: 100%;*/
overflow: auto;
overflow: auto;
padding: 20px 0;
padding: 20px 0;
...
...
src/components/system/tag.vue
View file @
a49dae2b
...
@@ -4,15 +4,17 @@
...
@@ -4,15 +4,17 @@
<div
class=
"section-search search-single"
>
<div
class=
"section-search search-single"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form-item>
<el-form-item>
<el-cascader
<
!--
<
el-cascader
style=
"width: 280px"
placeholder=
"选择标签"
style=
"width: 280px"
placeholder=
"选择标签"
:props=
"searchProps"
clearable
></el-cascader>
:props=
"searchProps"
clearable
></el-cascader>
-->
<el-input
placeholder=
"输入标签名搜索"
v-model=
"filterText"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
<div
class=
"search-btn-wrapper"
>
<div
class=
"search-btn-wrapper"
>
<
el-button
@
click=
"onSearch"
type=
"primary"
plain
>
搜索
</el-button
>
<
!--
<el-button
@
click=
"onSearch"
type=
"primary"
plain
>
搜索
</el-button>
--
>
<el-button
@
click=
"
onSearch
"
type=
"warning"
plain
>
高级搜索
</el-button>
<el-button
@
click=
"
dialogToggle
"
type=
"warning"
plain
>
高级搜索
</el-button>
<!--
<el-button
v-if=
"!$store.state.readonly"
@
click=
"onAdd"
type=
"success"
plain
>
新增标签
</el-button>
-->
<!--
<el-button
v-if=
"!$store.state.readonly"
@
click=
"onAdd"
type=
"success"
plain
>
新增标签
</el-button>
-->
</div>
</div>
</el-form-item>
</el-form-item>
...
@@ -21,275 +23,81 @@
...
@@ -21,275 +23,81 @@
<div
class=
"tag-tree"
>
<div
class=
"tag-tree"
>
<el-tree
<el-tree
:data=
"t
abl
eData"
:data=
"t
re
eData"
node-key=
"id"
node-key=
"id"
ref=
"tagTree"
:props=
"tagProps"
:props=
"tagProps"
:indent=
"40"
:indent=
"40"
@
node-expand=
"tagExpand"
@
node-expand=
"tagExpand"
@
node-collapse=
"tagCollapse"
@
node-collapse=
"tagCollapse"
:filter-node-method=
"filterNode"
:default-expanded-keys=
"tagExpanded"
:default-expanded-keys=
"tagExpanded"
:expand-on-click-node=
"
fals
e"
>
:expand-on-click-node=
"
tru
e"
>
<div
class=
"custom-tree-node"
slot-scope=
"
{ node, data }">
<div
class=
"custom-tree-node"
slot-scope=
"
{ node, data }">
<el-tag
class=
"tag-tree-item"
effect=
"plain"
size=
"medium"
>
{{
node
.
label
}}
</el-tag>
<el-tag
class=
"tag-tree-item"
effect=
"plain"
size=
"medium"
>
{{
node
.
label
}}
</el-tag>
<div
style=
"display: flex"
>
<div
style=
"display: flex"
>
<el-link
type=
"success"
size=
"mini"
plain
@
click
.
stop=
"onAdd(node)"
>
新增子标签 (
{{
node
.
level
}}
级)
</el-link>
<!--
<span>
{{
node
.
data
.
cover
}}
</span>
-->
<el-link
v-if=
"node.level != 1"
type=
"warning"
size=
"mini"
plain
@
click
.
stop=
"onEdit(node, data, el)"
>
编辑
</el-link>
<el-popover
placement=
"right-start"
title=
"标签备注"
width=
"200"
trigger=
"hover"
:disabled=
"!node.data.cover"
:content=
"node.data.cover ? node.data.cover : '暂无备注'"
>
<el-link
@
click
.
stop
class=
"cover-link"
slot=
"reference"
:disabled=
"!node.data.cover"
>
备注
</el-link>
</el-popover>
<el-link
v-if=
"node.level
<
4
&&
!$
store
.
state
.
readonly
"
type=
"success"
size=
"mini"
plain
@
click
.
stop=
"onAdd(node)"
>
新增子标签 (
{{
node
.
level
}}
级)
</el-link>
<el-link
v-if=
"node.level != 1 && !$store.state.readonly"
type=
"warning"
size=
"mini"
plain
@
click
.
stop=
"onEdit(node, data)"
>
编辑
</el-link>
</div>
</div>
</div>
</div>
</el-tree>
</el-tree>
</div>
</div>
<el-dialog
:title=
"dialog.title"
:visible
.
sync=
"dialog.show"
width=
"500px"
>
<el-dialog
:title=
"dialog.title"
:visible
.
sync=
"dialog.show"
width=
"800px"
title=
"高级搜索"
>
<el-form
ref=
"dialogForm"
:rules=
"dialog.form.rules"
:model=
"dialog.form"
label-width=
"100px"
>
<div
style=
"display: flex;margin-bottom: 20px;"
>
<el-button
style=
"margin-right: 20px; width: 70px;"
type=
"primary"
v-if=
"!$store.state.readonly && $store.state.export"
plain
:disabled=
"!tableData.length"
@
click=
"exportExcel"
>
导出
</el-button>
<el-form-item
label=
"ID:"
prop=
"id"
style=
"display: none;"
>
<el-cascader
<el-input
v-model=
"dialog.form.id"
maxlength=
"10"
type=
"text"
></el-input>
style=
"width: calc(100% - 90px)"
placeholder=
"选择标签"
clearable
@
change=
"conditionsChange"
</el-form-item>
:options=
"treeDataOrigin"
:props=
"
{ value: 'id', label: 'name', multiple: true, checkStrictly: true }">
</el-cascader>
<el-form-item
label=
"PID:"
prop=
"pid"
style=
"display: none;"
>
</div>
<el-input
v-model=
"dialog.form.pid"
maxlength=
"10"
type=
"text"
></el-input>
</el-form-item>
<el-table
:data=
"tableData"
border
>
<el-table-column
className=
"f-c"
label=
"用户"
>
<el-form-item
label=
"标签名称:"
prop=
"name"
>
<template
slot-scope=
"scope"
>
<el-input
v-model=
"dialog.form.name"
maxlength=
"10"
type=
"text"
></el-input>
<img
class=
"avatar"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
<br>
(ID:
{{
scope
.
row
.
user_id
}}
)
</el-form-item>
</
template
>
<el-form-item
label=
"标签备注:"
prop=
"cover"
>
</el-table-column>
<el-input
v-model=
"dialog.form.cover"
maxlength=
"50"
type=
"textarea"
:rows=
"3"
></el-input>
</el-form-item>
<el-table-column
prop=
"baby_name"
label=
"宝宝名称"
></el-table-column>
</el-form>
<el-table-column
prop=
"birthday"
label=
"宝宝生日"
></el-table-column>
<el-table-column
prop=
"sex"
label=
"宝宝性别"
:formatter=
"sexFormatter"
></el-table-column>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-table-column
prop=
"mobile"
label=
"手机号码"
></el-table-column>
<!--<el-table-column label="操作" v-if="!$store.state.readonly" width="100">
<template slot-scope="scope">
<el-button size="mini" plain type="primary" @click="onEdit(scope.row)">编辑</el-button>
</template>
</el-table-column>-->
</el-table>
<page
:total=
"total"
:limit=
"limit"
@
pageChange=
"onPageChange"
@
sizeChange=
"onSizeChange"
/>
<!--<span slot="footer" class="dialog-footer">
<el-button @click="dialogToggle">取消</el-button>
<el-button @click="dialogToggle">取消</el-button>
<el-button type="primary" @click="dialogSave">确定</el-button>
<el-button type="primary" @click="dialogSave">确定</el-button>
</span>
</span>
-->
</el-dialog>
</el-dialog>
</div>
</div>
</template>
</template>
<
script
>
<
script
>
import
{
getTagApi
,
postTagApi
,
putTagApi
}
from
"../../service/api"
;
import
{
getTagApi
,
postTagApi
,
putTagApi
,
getTagUserApi
,
exportExcelApi
}
from
"../../service/api"
;
import
page
from
'../framework/page'
;
let
sid
=
0
,
id
=
1000
;
export
default
{
export
default
{
name
:
"index"
,
name
:
"index"
,
data
()
{
data
()
{
return
{
return
{
conditions
:
[],
options
:
[{
filterText
:
''
,
value
:
'zhinan'
,
label
:
'指南'
,
children
:
[{
value
:
'shejiyuanze'
,
label
:
'设计原则'
,
children
:
[{
value
:
'yizhi'
,
label
:
'一致'
},
{
value
:
'fankui'
,
label
:
'反馈'
},
{
value
:
'xiaolv'
,
label
:
'效率'
},
{
value
:
'kekong'
,
label
:
'可控'
}]
},
{
value
:
'daohang'
,
label
:
'导航'
,
children
:
[{
value
:
'cexiangdaohang'
,
label
:
'侧向导航'
},
{
value
:
'dingbudaohang'
,
label
:
'顶部导航'
}]
}]
},
{
value
:
'zujian'
,
label
:
'组件'
,
children
:
[{
value
:
'basic'
,
label
:
'Basic'
,
children
:
[{
value
:
'layout'
,
label
:
'Layout 布局'
},
{
value
:
'color'
,
label
:
'Color 色彩'
},
{
value
:
'typography'
,
label
:
'Typography 字体'
},
{
value
:
'icon'
,
label
:
'Icon 图标'
},
{
value
:
'button'
,
label
:
'Button 按钮'
}]
},
{
value
:
'form'
,
label
:
'Form'
,
children
:
[{
value
:
'radio'
,
label
:
'Radio 单选框'
},
{
value
:
'checkbox'
,
label
:
'Checkbox 多选框'
},
{
value
:
'input'
,
label
:
'Input 输入框'
},
{
value
:
'input-number'
,
label
:
'InputNumber 计数器'
},
{
value
:
'select'
,
label
:
'Select 选择器'
},
{
value
:
'cascader'
,
label
:
'Cascader 级联选择器'
},
{
value
:
'switch'
,
label
:
'Switch 开关'
},
{
value
:
'slider'
,
label
:
'Slider 滑块'
},
{
value
:
'time-picker'
,
label
:
'TimePicker 时间选择器'
},
{
value
:
'date-picker'
,
label
:
'DatePicker 日期选择器'
},
{
value
:
'datetime-picker'
,
label
:
'DateTimePicker 日期时间选择器'
},
{
value
:
'upload'
,
label
:
'Upload 上传'
},
{
value
:
'rate'
,
label
:
'Rate 评分'
},
{
value
:
'form'
,
label
:
'Form 表单'
}]
},
{
value
:
'data'
,
label
:
'Data'
,
children
:
[{
value
:
'table'
,
label
:
'Table 表格'
},
{
value
:
'tag'
,
label
:
'Tag 标签'
},
{
value
:
'progress'
,
label
:
'Progress 进度条'
},
{
value
:
'tree'
,
label
:
'Tree 树形控件'
},
{
value
:
'pagination'
,
label
:
'Pagination 分页'
},
{
value
:
'badge'
,
label
:
'Badge 标记'
}]
},
{
value
:
'notice'
,
label
:
'Notice'
,
children
:
[{
value
:
'alert'
,
label
:
'Alert 警告'
},
{
value
:
'loading'
,
label
:
'Loading 加载'
},
{
value
:
'message'
,
label
:
'Message 消息提示'
},
{
value
:
'message-box'
,
label
:
'MessageBox 弹框'
},
{
value
:
'notification'
,
label
:
'Notification 通知'
}]
},
{
value
:
'navigation'
,
label
:
'Navigation'
,
children
:
[{
value
:
'menu'
,
label
:
'NavMenu 导航菜单'
},
{
value
:
'tabs'
,
label
:
'Tabs 标签页'
},
{
value
:
'breadcrumb'
,
label
:
'Breadcrumb 面包屑'
},
{
value
:
'dropdown'
,
label
:
'Dropdown 下拉菜单'
},
{
value
:
'steps'
,
label
:
'Steps 步骤条'
}]
},
{
value
:
'others'
,
label
:
'Others'
,
children
:
[{
value
:
'dialog'
,
label
:
'Dialog 对话框'
},
{
value
:
'tooltip'
,
label
:
'Tooltip 文字提示'
},
{
value
:
'popover'
,
label
:
'Popover 弹出框'
},
{
value
:
'card'
,
label
:
'Card 卡片'
},
{
value
:
'carousel'
,
label
:
'Carousel 走马灯'
},
{
value
:
'collapse'
,
label
:
'Collapse 折叠面板'
}]
}]
},
{
value
:
'ziyuan'
,
label
:
'资源'
,
children
:
[{
value
:
'axure'
,
label
:
'Axure Components'
},
{
value
:
'sketch'
,
label
:
'Sketch Templates'
},
{
value
:
'jiaohu'
,
label
:
'组件交互文档'
}]
}],
searchProps
:
{
lazy
:
true
,
multiple
:
true
,
checkStrictly
:
true
,
lazyLoad
(
node
,
resolve
)
{
const
{
level
}
=
node
;
setTimeout
(()
=>
{
const
nodes
=
Array
.
from
({
length
:
level
+
1
})
.
map
(
item
=>
({
value
:
++
sid
,
label
:
`选项
${
sid
}
`
,
leaf
:
level
>=
2
}));
// 通过调用resolve将子节点数据返回,通知组件数据加载完成
resolve
(
nodes
);
},
1000
);
}
},
tagProps
:
{
tagProps
:
{
children
:
'children'
,
children
:
'children'
,
...
@@ -311,6 +119,8 @@
...
@@ -311,6 +119,8 @@
},
},
startTime
:
[],
startTime
:
[],
tableData
:
[],
tableData
:
[],
treeData
:
[],
treeDataOrigin
:
[],
dialog
:
{
dialog
:
{
title
:
''
,
title
:
''
,
show
:
false
,
show
:
false
,
...
@@ -331,17 +141,63 @@
...
@@ -331,17 +141,63 @@
loading
:
false
loading
:
false
}
}
},
},
//components: { page },
components
:
{
page
},
watch
:
{
filterText
(
val
)
{
this
.
$refs
.
tagTree
.
filter
(
val
);
}
},
mounted
()
{
mounted
()
{
this
.
getData
()
this
.
getData
()
},
},
methods
:
{
methods
:
{
sexFormatter
(
item
){
if
(
item
.
sex
==
0
){
return
'保密'
}
if
(
item
.
sex
==
1
){
return
'男'
}
if
(
item
.
sex
==
2
){
return
'女'
}
},
onPageChange
(
val
)
{
this
.
nowPage
=
val
this
.
getUserData
()
},
onSizeChange
(
val
)
{
this
.
limit
=
val
;
this
.
nowPage
=
1
;
this
.
getUserData
()
},
getUserData
(){
let
json
=
{
conditions
:
JSON
.
stringify
(
this
.
conditions
),
limit
:
this
.
limit
,
page
:
this
.
nowPage
}
getTagUserApi
(
json
).
then
(
res
=>
{
this
.
tableData
=
res
.
list
})
},
filterNode
(
value
,
data
)
{
if
(
!
value
)
return
true
;
return
data
.
name
.
indexOf
(
value
)
!==
-
1
;
},
dialogToggle
()
{
dialogToggle
()
{
this
.
dialog
.
show
=
!
this
.
dialog
.
show
;
this
.
dialog
.
show
=
!
this
.
dialog
.
show
;
if
(
!
this
.
dialog
.
show
)
{
if
(
!
this
.
dialog
.
show
)
{
this
.
dialogReset
();
this
.
dialogReset
();
}
}
/*if (this.tableData.length && this.tableData[0] == 0) { // 未初始化
this.getUserData();
}*/
},
},
dialogReset
(
callback
)
{
dialogReset
(
callback
)
{
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
...
@@ -384,52 +240,27 @@
...
@@ -384,52 +240,27 @@
},
},
tagExpand
(
data
,
node
,
el
)
{
tagExpand
(
data
,
node
,
el
)
{
console
.
log
(
node
)
//
console.log(node)
if
(
node
.
expanded
)
{
if
(
node
.
expanded
)
{
this
.
tagExpanded
.
push
(
node
.
data
.
id
)
this
.
tagExpanded
.
push
(
node
.
data
.
id
)
}
}
},
},
tagCollapse
(
data
,
node
,
el
)
{
tagCollapse
(
data
,
node
,
el
)
{
console
.
log
(
node
)
//
console.log(node)
if
(
node
.
expanded
)
{
if
(
node
.
expanded
)
{
this
.
tagExpanded
.
splice
(
this
.
tagExpanded
.
findIndex
(
item
=>
item
==
node
.
data
.
id
),
1
)
this
.
tagExpanded
.
splice
(
this
.
tagExpanded
.
findIndex
(
item
=>
item
==
node
.
data
.
id
),
1
)
}
}
},
},
/*append(data) {
console.log(data)
const newChild = { id: id++, label: 'testtest', children: [] };
if (!data.children) {
this.$set(data, 'children', []);
}
data.children.push(newChild);
},
remove(node, data) {
console.log(node)
const parent = node.parent;
const children = parent.data.children || parent.data;
const index = children.findIndex(d => d.id === data.id);
children.splice(index, 1);
},*/
getData
()
{
getData
()
{
/*function addLable(data) {
data.forEach(val => {
val.label = val.name;
if (val.children && val.children.length) {
addLable(val.children)
}
})
};*/
getTagApi
().
then
(
res
=>
{
getTagApi
().
then
(
res
=>
{
this
.
tableData
=
[{
this
.
treeDataOrigin
=
res
;
this
.
treeData
=
[{
children
:
res
,
children
:
res
,
cover
:
''
,
cover
:
''
,
created_at
:
''
,
created_at
:
''
,
id
:
0
,
id
:
0
,
label
:
'所有标签'
,
name
:
'所有标签'
,
name
:
'所有标签'
,
pid
:
0
,
pid
:
0
,
weight
:
0
,
weight
:
0
,
...
@@ -450,7 +281,7 @@
...
@@ -450,7 +281,7 @@
});
});
},
},
onEdit
(
node
,
data
,
el
)
{
onEdit
(
node
,
data
)
{
console
.
log
(
el
)
console
.
log
(
el
)
console
.
log
(
node
)
console
.
log
(
node
)
console
.
log
(
data
)
console
.
log
(
data
)
...
@@ -469,6 +300,28 @@
...
@@ -469,6 +300,28 @@
onSearch
(){
onSearch
(){
this
.
getData
();
this
.
getData
();
},
},
conditionsChange
(
val
){
console
.
log
(
val
);
let
arr
=
[];
if
(
val
.
length
)
{
val
.
forEach
(
v
=>
{
arr
.
push
(
v
[
v
.
length
-
1
])
})
this
.
conditions
=
arr
;
this
.
getUserData
();
}
else
{
this
.
conditions
=
arr
;
this
.
tableData
=
[];
}
},
exportExcel
()
{
let
json
=
{
conditions
:
JSON
.
stringify
(
this
.
conditions
),
}
exportExcelApi
(
`api/admin/advanced/search/export`
,
json
,
'标签用户列表'
);
}
}
}
}
}
</
script
>
</
script
>
...
@@ -501,6 +354,12 @@
...
@@ -501,6 +354,12 @@
.el-link {
.el-link {
font-size: 12px;
font-size: 12px;
&.cover-link {
margin-right: 10px;
line-height: 28px;
}
&:hover:after {
&:hover:after {
bottom: 2px;
bottom: 2px;
}
}
...
...
src/components/user/index.vue
View file @
a49dae2b
<
template
>
<
template
>
<div
class=
"user"
v-loading=
"loading"
>
<div
class=
"user"
v-loading=
"loading"
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"80px"
inline
>
<el-form-item
label=
"ID"
>
<el-form-item
label=
"ID"
>
<el-input
v-model=
"searchFrom.userId"
></el-input>
<el-input
v-model=
"searchFrom.userId"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"昵称"
>
<el-form-item
label=
"昵称"
>
<el-input
v-model=
"searchFrom.nickName"
></el-input>
<el-input
v-model=
"searchFrom.nickName"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"电话"
>
<el-form-item
label=
"电话"
>
<el-input
v-model=
"searchFrom.mobile"
></el-input>
<el-input
v-model=
"searchFrom.mobile"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"等级"
>
<el-form-item
label=
"等级"
>
<el-input
v-model=
"searchFrom.level"
></el-input>
<el-input
v-model=
"searchFrom.level"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item>
<!--
<el-form-item
label=
"标签"
>
<div
class=
"flexRow"
>
<el-cascader
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
style=
"width: 320px"
placeholder=
"选择标签"
clearable
@
change=
"tagChange"
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
:options=
"options"
:props=
"
{ multiple: true, checkStrictly: true }">
</el-cascader>
</div>
</el-form-item>
-->
</el-form-item>
<el-form-item>
<div
class=
"flexRow"
>
<el-button
type=
"primary"
plain
@
click=
"getUser"
>
搜索
</el-button>
<!--
<el-button
type=
"success"
plain
@
click=
"syncUser"
>
同步最新数据
</el-button>
-->
</div>
</el-form-item>
</el-form>
</el-form>
<el-table
<el-table
:data=
"userList"
:data=
"userList"
style=
"width: 100%"
>
style=
"width: 100%"
>
<el-table-column
<el-table-column
className=
"f-c"
label=
"用户"
>
className=
"f-c"
label=
"用户"
>
<template
slot-scope=
"scope"
>
<template
slot-scope=
"scope"
>
<img
class=
"avatar"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
(ID:
{{
scope
.
row
.
user_id
}}
)
<img
class=
"avatar"
:src=
"scope.row.avatar"
>
{{
scope
.
row
.
nickname
}}
<br>
(ID:
{{
scope
.
row
.
user_id
}}
)
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"mobile"
label=
"手机号"
></el-table-column>
prop=
"mobile"
<el-table-column
prop=
"created_at"
label=
"注册时间"
width=
"105px"
sortable
></el-table-column>
label=
"手机号"
>
<el-table-column
prop=
"last_login_at"
label=
"最后登录"
width=
"105px"
sortable
></el-table-column>
</el-table-column>
<!--<el-table-column prop="last_login_at" label="最后登录时间" width="120px" sortable></el-table-column>-->
<el-table-column
<el-table-column
prop=
"baby_name"
label=
"宝宝名称"
></el-table-column>
prop=
"created_at"
<el-table-column
prop=
"birthday"
label=
"宝宝生日"
width=
"105px"
></el-table-column>
label=
"注册时间"
sortable
>
<el-table-column
prop=
"sex"
label=
"宝宝性别"
width=
"80px"
:formatter=
"sexFormatter"
></el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"100px"
>
<el-table-column
prop=
"last_login_at"
label=
"最后登录时间"
sortable
>
</el-table-column>
<el-table-column
prop=
"baby_name"
label=
"宝宝名称"
>
</el-table-column>
<el-table-column
prop=
"birthday"
label=
"宝宝生日"
>
</el-table-column>
<el-table-column
prop=
"sex"
label=
"宝宝性别"
:formatter=
"sexFormatter"
>
</el-table-column>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
plain
type=
"primary"
@
click=
"goToDetail(scope.row.user_id)"
>
<el-button
size=
"mini"
plain
type=
"primary"
@
click=
"goToDetail(scope.row.user_id)"
>
查看详情
</el-button>
查看详情
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -123,6 +106,9 @@
...
@@ -123,6 +106,9 @@
this
.
getUser
()
this
.
getUser
()
},
},
methods
:{
methods
:{
tagChange
()
{
},
sexFormatter
(
item
){
sexFormatter
(
item
){
if
(
item
.
sex
==
0
){
if
(
item
.
sex
==
0
){
return
'保密'
return
'保密'
...
@@ -204,16 +190,10 @@
...
@@ -204,16 +190,10 @@
}
}
</
script
>
</
script
>
<
style
scoped
lang=
"less"
>
<
style
lang=
"less"
>
@import "../../util/public";
/*@import "../../util/public";*/
.avatar {
width: 50px;
margin-right: 5px;
border-radius: 50%;
height: 50px;
}
.user{
.user{
height: 100%;
/*height: 100%;*/
overflow: auto;
overflow: auto;
padding: 20px 0;
padding: 20px 0;
.btn-content{
.btn-content{
...
@@ -228,11 +208,3 @@
...
@@ -228,11 +208,3 @@
}
}
</
style
>
</
style
>
<
style
>
.f-c
>
div
{
display
:
flex
!important
;
flex-flow
:
row
;
justify-content
:
flex-start
;
align-items
:
center
;
}
</
style
>
src/components/userDetail/index.vue
View file @
a49dae2b
...
@@ -97,24 +97,19 @@
...
@@ -97,24 +97,19 @@
</el-table>
</el-table>
</template>
</template>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"periods_title"
label=
"期数名称"
>
prop=
"periods_title"
label=
"期数名称"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"
{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.periods_id}}" >
<router-link
:to=
"
{name:'class', query: { goods_id: scope.row.goods_id, periods_id: scope.row.periods_id}}" >
{{
scope
.
row
.
periods_title
}}
{{
scope
.
row
.
periods_title
}}
</router-link>
</router-link>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
label=
"看课权限"
>
label=
"看课权限"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
is_view_course
===
1
?
'是'
:
'否'
}}
{{
scope
.
row
.
is_view_course
===
1
?
'是'
:
'否'
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
className=
"f-c"
label=
"老师"
>
className=
"f-c"
label=
"老师"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<router-link
:to=
"`/teacher/$
{scope.row.teacher_id}`" >
<router-link
:to=
"`/teacher/$
{scope.row.teacher_id}`" >
<div
class=
"f-c"
>
<div
class=
"f-c"
>
...
@@ -125,24 +120,11 @@
...
@@ -125,24 +120,11 @@
</router-link>
</router-link>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
prop=
"join_num"
label=
"加入人数"
></el-table-column>
prop=
"join_num"
<el-table-column
prop=
"max_join_num"
label=
"最大加入人数"
></el-table-column>
label=
"加入人数"
>
<el-table-column
prop=
"start_at"
label=
"开课时间"
></el-table-column>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"创建时间"
></el-table-column>
<el-table-column
<el-table-column
label=
"操作"
width=
"340px"
>
prop=
"max_join_num"
label=
"最大加入人数"
>
</el-table-column>
<el-table-column
prop=
"start_at"
label=
"开课时间"
>
</el-table-column>
<el-table-column
prop=
"created_at"
label=
"创建时间"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"400px"
>
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"showUser(scope.row)"
size=
"mini"
type=
"primary"
>
班级成员
</el-button>
<el-button
@
click=
"showUser(scope.row)"
size=
"mini"
type=
"primary"
>
班级成员
</el-button>
<el-button
size=
"mini"
type=
"warning"
v-if=
"!$store.state.readonly"
@
click=
"editPrivilege(scope.row)"
>
编辑
</el-button>
<el-button
size=
"mini"
type=
"warning"
v-if=
"!$store.state.readonly"
@
click=
"editPrivilege(scope.row)"
>
编辑
</el-button>
...
...
src/service/api.js
View file @
a49dae2b
...
@@ -1337,6 +1337,14 @@ export const postTagApi = function (json) {
...
@@ -1337,6 +1337,14 @@ export const postTagApi = function (json) {
export
const
putTagApi
=
function
(
json
)
{
export
const
putTagApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$put
(
`
${
_baseUrl
}
api/admin/category/
${
json
.
category_id
}
`
,
json
)
return
Vue
.
prototype
.
$put
(
`
${
_baseUrl
}
api/admin/category/
${
json
.
category_id
}
`
,
json
)
};
};
// 根据标签搜索用户
export
const
getTagUserApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/advanced/search`
,
json
)
};
// 根据标签搜索用户
export
const
TagUserApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/advanced/search`
,
json
)
};
// 获取员工列表
// 获取员工列表
export
const
getStaffListApi
=
function
(
json
)
{
export
const
getStaffListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/staff/list`
,
json
)
return
Vue
.
prototype
.
$fetch
(
`
${
_baseUrl
}
api/admin/staff/list`
,
json
)
...
...
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