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
99e7c80d
Commit
99e7c80d
authored
Jul 10, 2019
by
liwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
liwei
parent
c7356ded
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
619 additions
and
483 deletions
+619
-483
index.vue
src/components/channelTransList/index.vue
+118
-13
index.vue
src/components/class/index.vue
+35
-122
index.vue
src/components/logistics/index.vue
+260
-198
receiveInfoDialog.vue
src/components/logistics/receiveInfoDialog.vue
+70
-0
index.vue
src/components/marketStatistics/index.vue
+104
-132
api.js
src/service/api.js
+13
-0
menuList.js
src/util/menuList.js
+19
-18
No files found.
src/components/channelTransList/index.vue
View file @
99e7c80d
...
...
@@ -6,7 +6,7 @@
style=
"background:#fff;textAlign: center;color: #909399;padding: 10px 0;"
>
暂无数据
</div>
<el-form
ref=
"searchFrom"
:model=
"searchFrom"
label-width=
"100px"
inline
v-if=
"list.length > 0"
>
<el-form-item
label=
"
进量
日期"
>
<el-form-item
label=
"
起止
日期"
>
<el-date-picker
v-model=
"searchFrom.payTime"
type=
"datetimerange"
...
...
@@ -73,30 +73,52 @@
<el-form-item>
<div
class=
"flexRow"
>
<el-button
type=
"primary"
plain
@
click=
"getChannelTransList"
>
搜索
</el-button>
<el-button
type=
"primary"
plain
@
click=
"exportDataTable"
>
导出
</el-button>
</div>
</el-form-item>
</el-form>
<el-table
border
:span-method=
"objectSpanMethod"
v-if=
"list.length > 0"
:data=
"list"
:style=
"
{width: width+'px'}"
:default-sort="{prop: 'cur_date', order: 'descending'}"
>
<el-table-column
prop=
"cur_date"
label=
"支付日期"
sortable
></el-table-column>
<el-table-column
prop=
"invite_type"
label=
"渠道类型"
sortable
></el-table-column>
<el-table-column
prop=
"cur_date"
label=
"进量日期"
></el-table-column>
<el-table-column
prop=
"invite_type"
label=
"渠道类型"
></el-table-column>
<!--
<el-table-column
prop=
"watch_num"
label=
"商品课时数"
></el-table-column>
-->
<el-table-column
prop=
"periods_title"
label=
"期数名称"
></el-table-column>
<el-table-column
prop=
"goods_name"
label=
"商品名称"
></el-table-column>
<el-table-column
prop=
"squad"
label=
"组ID"
></el-table-column>
<el-table-column
prop=
"teacher_name"
label=
"老师名称"
></el-table-column>
<el-table-column
prop=
"total_num"
label=
"购买人数"
></el-table-column>
<el-table-column
prop=
"class_num"
label=
"班级人数"
></el-table-column>
<el-table-column
prop=
"teacher_friend_num"
label=
"老师主动添加好友人数"
></el-table-column>
<el-table-column
prop=
"user_friend_num"
label=
"用户主动添加好友人数"
></el-table-column>
<el-table-column
prop=
"come_num"
label=
"到课人数"
></el-table-column>
<el-table-column
prop=
"one_buy_num"
label=
"一年课购买人数"
></el-table-column>
<el-table-column
prop=
"two_buy_num"
label=
"两年课购买人数"
></el-table-column>
<el-table-column
prop=
"one_buy_money"
label=
"一年课转化金额"
></el-table-column>
<el-table-column
prop=
"two_buy_money"
label=
"两年课转化金额"
></el-table-column>
</el-table>
<!--
<el-table
v-if=
"list.length > 0"
:data=
"list"
:style=
"
{width: width+'px'}">
<el-table-column
prop=
"cur_date"
label=
"进量日期"
></el-table-column>
<el-table-column
prop=
"invite_type"
label=
"渠道类型"
></el-table-column>
<el-table-column
prop=
"watch_num"
label=
"商品课时数"
></el-table-column>
<el-table-column
prop=
"periods_title"
label=
"期数名称"
></el-table-column>
<el-table-column
prop=
"squad"
label=
"组ID"
></el-table-column>
<el-table-column
prop=
"watch_num"
label=
"商品课时数"
></el-table-column>
<el-table-column
prop=
"teacher_name"
label=
"老师名称"
></el-table-column>
<el-table-column
prop=
"total_num"
label=
"购买人数"
></el-table-column>
<el-table-column
prop=
"class_num"
label=
"班级人数"
></el-table-column>
<el-table-column
prop=
"teacher_friend_num"
label=
"老师主动添加好友人数"
></el-table-column>
<el-table-column
prop=
"user_friend_num"
label=
"用户主动添加好友人数"
></el-table-column>
<el-table-column
prop=
"come_num"
label=
"到课人数"
></el-table-column>
<el-table-column
prop=
"one_buy_num"
label=
"年课购买人数"
></el-table-column>
<el-table-column
prop=
"two_buy_num"
label=
"两年课购买人数"
></el-table-column>
<el-table-column
prop=
"one_buy_money"
label=
"一年课转化金额"
></el-table-column>
<el-table-column
prop=
"two_buy_money"
label=
"两年课转化金额"
></el-table-column>
</el-table>
</el-table>
-->
<page
v-if=
"list.length > 0"
:nowPage=
"nowPage"
...
...
@@ -112,7 +134,8 @@ import {
getTeacherListApi
,
getchannelTransListApi
,
getPeriodsApi
,
getGoodsListApi
getGoodsListApi
,
exportExcelApi
}
from
"../../service/api"
;
import
page
from
"../framework/page"
;
import
{
GOODSTYPE
,
CLASSSOURCE
}
from
"../../util/wordbook"
;
...
...
@@ -175,6 +198,8 @@ export default {
];
}
},
propertyList
:
[],
spanArr
:
[],
searchFrom
:
{
payTime
:
[],
start_at
:
""
,
...
...
@@ -195,9 +220,66 @@ export default {
]
};
},
components
:
{
page
},
methods
:
{
exportDataTable
()
{
let
json
=
{};
if
(
this
.
searchFrom
.
start_at
.
length
>
0
&&
this
.
searchFrom
.
end_at
.
length
>
0
)
{
json
.
start_at
=
this
.
searchFrom
.
start_at
;
json
.
end_at
=
this
.
searchFrom
.
end_at
;
}
if
(
this
.
searchFrom
.
teacher_id
)
{
json
.
teacher_id
=
this
.
searchFrom
.
teacher_id
;
}
if
(
this
.
searchFrom
.
invite_type
.
length
>
0
)
{
json
.
invite_type
=
this
.
searchFrom
.
invite_type
;
}
if
(
this
.
searchFrom
.
periods_id
)
{
json
.
periods_id
=
this
.
searchFrom
.
periods_id
;
}
if
(
this
.
searchFrom
.
squad
)
{
json
.
squad
=
this
.
searchFrom
.
squad
;
}
if
(
this
.
searchFrom
.
watch_num
)
{
json
.
watch_num
=
this
.
searchFrom
.
watch_num
;
}
console
.
log
(
"json======"
,
json
);
exportExcelApi
(
"/api/admin/channel/class/list/export"
,
json
);
},
objectSpanMethod
(
data
)
{
if
(
this
.
propertyList
.
indexOf
(
data
.
column
.
property
)
>
-
1
)
{
if
(
data
.
rowIndex
===
0
||
data
.
row
.
cur_date
!==
this
.
list
[
data
.
rowIndex
-
1
].
cur_date
)
{
let
rowspan
=
1
;
for
(
let
i
=
data
.
rowIndex
+
1
;
i
<
this
.
list
.
length
;
i
++
)
{
if
(
data
.
row
.
cur_date
===
this
.
list
[
i
].
cur_date
)
{
rowspan
++
;
}
else
{
break
;
}
}
return
{
rowspan
:
rowspan
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
};
}
}
else
{
return
{
rowspan
:
1
,
colspan
:
1
};
}
},
handleItemChange
(
val
)
{
getPeriodsApi
({
goods_id
:
val
[
0
],
limit
:
100
}).
then
(
res
=>
{
res
.
list
.
forEach
(
i
=>
{
...
...
@@ -320,20 +402,43 @@ export default {
}
getchannelTransListApi
(
json
).
then
(
res
=>
{
if
(
res
)
{
this
.
total
=
res
.
total
;
if
(
res
.
list
&&
res
.
list
.
length
>
0
)
{
this
.
list
=
res
.
list
.
map
(
item
=>
{
this
.
total
=
res
.
total
;
this
.
list
=
res
.
list
.
map
((
item
,
index
)
=>
{
item
.
index
=
index
;
if
(
index
==
0
)
{
this
.
spanArr
.
push
(
1
);
this
.
pos
=
0
;
}
else
{
if
(
item
.
cur_date
==
res
.
list
[
index
-
1
].
cur_date
)
{
this
.
spanArr
[
this
.
pos
]
+=
1
;
this
.
spanArr
.
push
(
0
);
}
else
{
this
.
spanArr
.
push
(
1
);
this
.
pos
=
index
;
}
}
item
.
squad
=
"T"
+
item
.
squad
;
let
name
=
item
.
invite_name
&&
item
.
invite_name
.
length
>
0
?
`(
${
item
.
invite_name
}
)`
:
""
;
let
goods_id
=
item
.
goods_id
&&
item
.
goods_id
>
0
?
`【
${
item
.
goods_id
}
】`
:
""
;
let
watch_num
=
item
.
watch_num
&&
item
.
watch_num
>
0
?
`【
${
item
.
watch_num
}
个课时】`
:
""
;
item
.
invite_type
=
`
${
item
.
invite_type
}${
name
}
`
;
item
.
goods_name
=
`
${
goods_id
}${
item
.
goods_name
}${
watch_num
}
`
;
return
item
;
});
for
(
let
key
in
this
.
list
[
0
])
{
this
.
propertyList
.
push
(
key
);
}
this
.
width
=
document
.
documentElement
.
clientWidth
-
200
;
}
else
{
this
.
list
=
[];
}
}
else
{
this
.
list
=
[];
...
...
src/components/class/index.vue
View file @
99e7c80d
...
...
@@ -29,7 +29,6 @@
</el-form-item>
<el-form-item
label
>
<el-button
type=
"primary"
@
click=
"getClassList"
>
搜索
</el-button>
<el-button
type=
"success"
@
click=
"sendMsg"
>
发送活动通知
</el-button>
</el-form-item>
<el-form-item
style=
"float: right"
>
<el-button
@
click=
"onAdd"
type=
"success"
v-if=
"!$store.state.readonly"
>
+添加班级
</el-button>
...
...
@@ -323,127 +322,41 @@ export default {
this
.
initQuery
();
});
},
methods
:
{
sendMsg
()
{
if
(
this
.
title
&&
this
.
title
.
title
)
{
this
.
$confirm
(
"你将发送给"
+
this
.
title
.
title
+
"用户"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
}).
then
(()
=>
{
// console.log(this.selectedGoods)
postActiveNoticeApi
(
this
.
periods
.
id
).
then
(
res
=>
{
this
.
noticeDialog
=
false
;
this
.
$message
({
type
:
"success"
,
message
:
"发送成功"
+
res
.
num
+
"个"
});
});
});
}
else
{
this
.
$message
({
message
:
"请选择期数"
});
}
},
changeRow
(
data
,
b
)
{
if
(
b
.
indexOf
(
data
)
>
-
1
)
{
getClassStatisticsApi
(
data
.
periods_id
,
data
.
id
).
then
(
res
=>
{
data
.
arrive_course_rate
=
res
.
arrive_course_rate
;
data
.
watch_course_rate
=
res
.
watch_course_rate
;
data
.
over_course_rate
=
res
.
over_course_rate
;
data
.
work_rate
=
res
.
work_rate
;
data
.
over_work_rate
=
res
.
over_work_rate
;
data
.
clock_rate
=
res
.
clock_rate
;
data
.
over_clock_rate
=
res
.
over_clock_rate
;
data
.
transform_rate
=
res
.
transform_rate
;
});
}
},
initQuery
()
{
let
_query
=
this
.
$route
.
query
;
if
(
_query
&&
_query
.
goods_id
&&
_query
.
periods_id
)
{
this
.
goods_id
=
_query
.
goods_id
;
this
.
selectedGoods
=
[
parseInt
(
_query
.
goods_id
),
parseInt
(
_query
.
periods_id
)
];
getPeriodsApi
({
goods_id
:
this
.
selectedGoods
[
0
],
limit
:
100
}).
then
(
res
=>
{
res
.
list
.
forEach
(
i
=>
{
i
.
name
=
i
.
title
;
});
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
0
];
}).
children
=
res
.
list
;
let
nowGoods
=
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
0
];
});
this
.
periods
=
nowGoods
.
children
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
1
];
});
console
.
log
(
this
.
periods
);
this
.
teacher_id
=
""
;
this
.
getClassList
();
}
);
}
else
{
getDefaultPeriodsApi
().
then
(
res
=>
{
console
.
log
(
res
);
//
if
(
res
)
{
this
.
goods_id
=
res
.
goods_id
;
this
.
selectedGoods
=
[
parseInt
(
res
.
goods_id
),
parseInt
(
res
.
id
)];
getPeriodsApi
({
goods_id
:
this
.
selectedGoods
[
0
],
limit
:
100
}).
then
(
res
=>
{
res
.
list
.
forEach
(
i
=>
{
i
.
name
=
i
.
title
;
});
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
0
];
}).
children
=
res
.
list
;
let
nowGoods
=
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
0
];
});
this
.
periods
=
nowGoods
.
children
.
find
(
i
=>
{
return
i
.
id
===
this
.
selectedGoods
[
1
];
});
this
.
teacher_id
=
""
;
console
.
log
(
this
.
periods
);
this
.
getClassList
();
});
}
});
}
console
.
log
(
this
.
goodsList
);
},
initPage
()
{
let
json
=
{
page
:
1
,
limit
:
100
,
goods_type
:
"1,2"
};
getGoodsListApi
(
json
).
then
(
res
=>
{
console
.
log
(
res
);
res
.
list
.
forEach
(
i
=>
{
i
.
name
=
"["
+
i
.
id
+
"]"
+
"["
+
GOODSTYPE
[
i
.
goods_type
]
+
"]"
+
"["
+
i
.
current_price
/
100
+
"元]"
+
i
.
name
;
i
.
children
=
[];
});
this
.
goodsList
=
res
.
list
;
this
.
initQuery
();
showUser
(
data
)
{
let
classType
=
data
.
type
==
1
?
"(带班班级)"
:
"(观摩班级)"
;
console
.
log
(
data
);
// debugger
this
.
userObj
=
{
classId
:
data
.
id
,
periods_id
:
data
.
periods_id
,
show
:
true
,
goods_id
:
this
.
goods_id
,
title
:
`
${
data
.
teacher_name
}
班级用户列表
${
classType
}
`
,
teacherId
:
data
.
teacher_id
,
class_name
:
data
.
class_name
,
type
:
data
.
type
,
watch_num
:
this
.
title
.
watch_num
};
console
.
log
(
this
.
userObj
);
},
getTeacher
()
{
if
(
!
this
.
periods
)
return
;
getPeriodsTeacherApi
(
this
.
periods
.
id
).
then
(
res
=>
{
let
obj
=
{};
//班级老师去重
res
=
res
.
reduce
(
function
(
item
,
next
)
{
obj
[
next
.
teacher_id
]
?
""
:
(
obj
[
next
.
teacher_id
]
=
true
&&
item
.
push
(
next
));
return
item
;
},
[]);
this
.
teacherList
=
res
;
});
},
changePeriods
(
data
)
{
if
(
data
.
length
>
1
)
{
this
.
goods_id
=
data
[
0
];
let
nowGoods
=
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
data
[
0
];
});
this
.
periods
=
nowGoods
.
children
.
find
(
i
=>
{
return
i
.
id
===
data
[
1
];
...
...
src/components/logistics/index.vue
View file @
99e7c80d
This diff is collapsed.
Click to expand it.
src/components/logistics/receiveInfoDialog.vue
0 → 100644
View file @
99e7c80d
<
template
>
<el-dialog
:visible
.
sync=
"showFlag"
width=
"800px"
center
title=
"按期数导出收货信息"
>
<el-form
label-width=
"150px"
>
<el-form-item
label=
"期数"
>
<el-cascader
:options=
"goodsList"
:props=
"
{value:'id',label:'name'}"
@active-item-change="handleItemChange"
@change="changePeriods"
v-model="selectedGoods"
>
</el-cascader>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"cancelClick"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onAdd"
>
确 定
</el-button>
</span>
</el-dialog>
</
template
>
<
script
>
import
{
getPeriodsApi
,
exportReceiveInfoApi
}
from
"../../service/api"
;
export
default
{
name
:
"receiveInfoDialog"
,
props
:
[
"showFlag"
,
"goodsList"
,
"cancelEvent"
,
"sureEvent"
],
data
()
{
return
{};
},
methods
:
{
cancelClick
()
{
this
.
cancelEvent
();
},
onAdd
()
{
if
(
this
.
periods
&&
this
.
periods
.
id
)
{
this
.
exportReceiveInfo
().
then
(()
=>
{
this
.
sureEvent
();
});
}
else
{
Vue
.
prototype
.
$msgbox
({
message
:
"请选择期数"
,
type
:
"warning"
});
}
},
exportReceiveInfo
()
{
return
exportReceiveInfoApi
(
this
.
periods
.
id
);
},
changePeriods
(
data
)
{
if
(
data
.
length
>
1
)
{
this
.
goods_id
=
data
[
0
];
let
nowGoods
=
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
data
[
0
];
});
this
.
periods
=
nowGoods
.
children
.
find
(
i
=>
{
return
i
.
id
===
data
[
1
];
});
}
},
handleItemChange
(
val
)
{
getPeriodsApi
({
goods_id
:
val
[
0
],
limit
:
100
}).
then
(
res
=>
{
res
.
list
.
forEach
(
i
=>
{
i
.
name
=
i
.
title
;
});
this
.
goodsList
.
find
(
i
=>
{
return
i
.
id
===
val
[
0
];
}).
children
=
res
.
list
;
});
}
}
};
</
script
>
\ No newline at end of file
src/components/marketStatistics/index.vue
View file @
99e7c80d
...
...
@@ -8,91 +8,49 @@
height="calc(100vh - 60px)"
size="mini"
:row-class-name="tableRowClassName"
:span-method="arraySpanMethod">
<el-table-column
min-width=
"180"
prop=
"wait_join_num"
align=
"left"
fixed=
"left"
label=
"期数总状况"
>
:span-method="arraySpanMethod"
>
<el-table-column
min-width=
"180"
prop=
"wait_join_num"
align=
"left"
fixed=
"left"
label=
"期数总状况"
>
<template
slot-scope=
"scope"
>
期数名称:
{{
scope
.
row
.
title
}}
<br>
<br
/
>
开始时间:
{{
scope
.
row
.
start_at
}}
<br>
<br
/
>
团购待进班人数:
{{
scope
.
row
.
wait_join_num
}}
<br>
<br
/
>
外部订单待进班人数:
{{
scope
.
row
.
other_wait_join_num
}}
<br>
<br
/
>
总进班人数:
{{
scope
.
row
.
total_join_num
}}
<br>
<br
/
>
需求供量:
{{
scope
.
row
.
total_max_join_num
}}
<br>
目标差距:
{{
scope
.
row
.
target_diff
<
0
?
'超标'
+
scope
.
row
.
target_diff
*
-
1
:
scope
.
row
.
target_diff
}}
个
<br>
完成率:
<el-progress
style=
"display: inline-block;width: calc(90% - 50px)"
:text-inside=
"true"
:stroke-width=
"16"
:status=
"scope.row.complete_rate>=1?'exception':'success'"
:percentage=
"scope.row.complete_rate*1000/10"
></el-progress>
<br
/>
目标差距:
{{
scope
.
row
.
target_diff
<
0
?
'超标'
+
scope
.
row
.
target_diff
*
-
1
:
scope
.
row
.
target_diff
}}
个
<br
/>
完成率:
<el-progress
style=
"display: inline-block;width: calc(90% - 50px)"
:text-inside=
"true"
:stroke-width=
"16"
:status=
"scope.row.complete_rate>=1?'exception':'success'"
:percentage=
"scope.row.complete_rate*1000/10"
></el-progress>
</
template
>
<!-- exception -->
</el-table-column>
<el-table-column
prop=
"class_name"
align=
"center"
min-width=
"80"
fixed=
"left"
label=
"班级名称"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
title
===
'合计'
?
'合计'
:
scope
.
row
.
class_name
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"max_join_num"
min-width=
"60"
align=
"center"
label=
"预计加入人数"
>
</el-table-column>
<el-table-column
prop=
"join_num"
min-width=
"60"
align=
"center"
label=
"已进班人数"
>
<el-table-column
prop=
"class_name"
align=
"center"
min-width=
"80"
fixed=
"left"
label=
"班级名称"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
title
===
'合计'
?
'合计'
:
scope
.
row
.
class_name
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"other_allot_num"
align=
"center"
min-width=
"60"
label=
"外部订单已分配人数"
>
</el-table-column>
<el-table-column
v-for=
"(data,index) in dateList"
align=
"center"
:key=
"index"
:label=
"data"
>
<el-table-column
align=
"center"
min-width=
"60px"
prop=
"wait_join_num"
label=
"系统招生量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_buy_num
}}
</
template
>
<el-table-column
prop=
"max_join_num"
min-width=
"60"
align=
"center"
label=
"预计加入人数"
></el-table-column>
<el-table-column
prop=
"join_num"
min-width=
"60"
align=
"center"
label=
"已进班人数"
></el-table-column>
<el-table-column
prop=
"other_allot_num"
align=
"center"
min-width=
"60"
label=
"外部订单已分配人数"
></el-table-column>
<el-table-column
v-for=
"(data,index) in dateList"
align=
"center"
:key=
"index"
:label=
"data"
>
<el-table-column
align=
"center"
min-width=
"60px"
prop=
"wait_join_num"
label=
"系统招生量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_buy_num
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"60px"
prop=
"wait_join_num"
label=
"外部订单招生量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_other_buy_num
}}
</
template
>
<el-table-column
align=
"center"
min-width=
"60px"
prop=
"wait_join_num"
label=
"外部订单招生量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_other_buy_num
}}
</
template
>
</el-table-column>
<el-table-column
align=
"center"
min-width=
"60px"
label=
"进班量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_into_num
}}
</
template
>
<el-table-column
align=
"center"
min-width=
"60px"
label=
"进班量"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
date
[
index
].
total_into_num
}}
</
template
>
</el-table-column>
</el-table-column>
</el-table>
...
...
@@ -100,78 +58,92 @@
</template>
<
script
>
import
{
getPeriodsClassCurDataApi
}
from
"../../service/api"
;
export
default
{
name
:
"index"
,
data
(){
return
{
list
:[],
dateList
:[],
propertyList
:[
"title"
,
"start_at"
,
"total_join_num"
,
"total_max_join_num"
,
"total_target_join_num"
,
"complete_rate"
,
"target_diff"
,
'wait_join_num'
,
'other_wait_join_num'
],
import
{
getPeriodsClassCurDataApi
}
from
"../../service/api"
;
export
default
{
name
:
"index"
,
data
()
{
return
{
list
:
[],
dateList
:
[],
propertyList
:
[
"title"
,
"start_at"
,
"total_join_num"
,
"total_max_join_num"
,
"total_target_join_num"
,
"complete_rate"
,
"target_diff"
,
"wait_join_num"
,
"other_wait_join_num"
]
};
},
methods
:
{
initPage
()
{
getPeriodsClassCurDataApi
().
then
(
res
=>
{
this
.
list
=
res
;
if
(
res
[
0
].
date
)
{
res
[
0
].
date
.
forEach
(
i
=>
{
this
.
dateList
.
push
(
i
.
pay_date
);
});
}
});
},
tableRowClassName
({
row
,
rowIndex
})
{
if
(
rowIndex
===
0
)
{
return
"warning-row"
;
}
return
""
;
},
methods
:{
initPage
(){
getPeriodsClassCurDataApi
().
then
(
res
=>
{
this
.
list
=
res
;
if
(
res
[
0
].
date
){
res
[
0
].
date
.
forEach
(
i
=>
{
this
.
dateList
.
push
(
i
.
pay_date
)
})
}
})
},
tableRowClassName
({
row
,
rowIndex
})
{
if
(
rowIndex
===
0
)
{
return
'warning-row'
;
}
return
''
;
},
arraySpanMethod
(
data
){
if
(
this
.
propertyList
.
indexOf
(
data
.
column
.
property
)
>
-
1
){
if
(
data
.
rowIndex
===
0
||
data
.
row
.
id
!==
this
.
list
[
data
.
rowIndex
-
1
].
id
){
let
rowspan
=
1
;
for
(
let
i
=
data
.
rowIndex
+
1
;
i
<
this
.
list
.
length
;
i
++
){
if
(
data
.
row
.
id
===
this
.
list
[
i
].
id
){
rowspan
++
}
else
{
break
;
}
arraySpanMethod
(
data
)
{
if
(
this
.
propertyList
.
indexOf
(
data
.
column
.
property
)
>
-
1
)
{
if
(
data
.
rowIndex
===
0
||
data
.
row
.
id
!==
this
.
list
[
data
.
rowIndex
-
1
].
id
)
{
let
rowspan
=
1
;
for
(
let
i
=
data
.
rowIndex
+
1
;
i
<
this
.
list
.
length
;
i
++
)
{
if
(
data
.
row
.
id
===
this
.
list
[
i
].
id
)
{
rowspan
++
;
}
else
{
break
;
}
return
{
rowspan
:
rowspan
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
};
}
}
else
{
return
{
rowspan
:
1
,
rowspan
:
rowspan
,
colspan
:
1
};
}
else
{
return
{
rowspan
:
0
,
colspan
:
0
};
}
}
else
{
return
{
rowspan
:
1
,
colspan
:
1
};
}
},
created
()
{
this
.
initPage
()
}
},
created
()
{
this
.
initPage
();
}
};
</
script
>
<
style
scoped
lang=
"less"
>
/deep/.el-table--enable-row-hover .el-table__body tr:hover>td {
background-color: #fff;
}
/deep/ .el-table .warning-row {
background: oldlace;
}
/deep/.el-progress-bar__inner{
max-width: 100% !important;
}
.el-main .content .router-block .child-view{height: 100vh;}
/deep/.el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #fff;
}
/deep/ .el-table .warning-row {
background: oldlace;
}
/deep/.el-progress-bar__inner {
max-width: 100% !important;
}
.el-main .content .router-block .child-view {
height: 100vh;
}
</
style
>
src/service/api.js
View file @
99e7c80d
...
...
@@ -1179,4 +1179,17 @@ const getchannelTransListUrl = `${_baseUrl}api/admin/channel/conversion/list`;
export
const
getchannelTransListApi
=
function
(
json
)
{
return
Vue
.
prototype
.
$fetch
(
getchannelTransListUrl
,
json
)
};
//按期数导出收货信息
const
exportReceiveInfoUrl
=
`
${
_baseUrl
}
api/admin/order/deliver/periods/export/`
;
export
const
exportReceiveInfoApi
=
function
(
periods_id
)
{
let
url
=
`
${
exportReceiveInfoUrl
}${
periods_id
}
`
;
window
.
open
(
url
);
return
new
Promise
((
resolve
,
reject
)
=>
{
resolve
();
})
};
// /api/admin/student/deliver/record/list
\ No newline at end of file
src/util/menuList.js
View file @
99e7c80d
...
...
@@ -321,6 +321,24 @@ export default [{
}
]
},
{
name
:
''
,
value
:
'数据管理'
,
icon
:
'icon-shezhi'
,
list
:
[
{
value
:
'渠道转化列表'
,
routerName
:
'channelTransList'
,
path
:
'/channelTransList'
,
cover
:
'9-1'
,
router
:
{
path
:
'/channelTransList'
,
name
:
'channelTransList'
,
component
:
e
=>
require
([
'@/components/channelTransList'
],
e
),
}
}
]
},
{
name
:
''
,
value
:
'实物管理'
,
...
...
@@ -541,24 +559,7 @@ export default [{
},
]
},
{
name
:
''
,
value
:
'数据管理'
,
icon
:
'icon-shezhi'
,
list
:
[
{
value
:
'渠道转化列表'
,
routerName
:
'channelTransList'
,
path
:
'/channelTransList'
,
cover
:
'9-1'
,
router
:
{
path
:
'/channelTransList'
,
name
:
'channelTransList'
,
component
:
e
=>
require
([
'@/components/channelTransList'
],
e
),
}
}
]
},
{
name
:
''
,
value
:
'后台管理'
,
...
...
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