| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- let memberChart = null;
- const newMemberChartOption = {
- tooltip: {
- show: true,
- trigger: 'axis',
- axisPointer: {
- lineStyle: {
- width: 6,
- type: "solid",
- color: "#ffbf0d",
- opacity: 0.5
- }
- }
- },
- grid: {
- bottom: 34,
- top: 83,
- left: 44,
- right: 37
- },
- itemStyle: {
- color: "#ffa958"
- },
- legend: {
- data: [{
- name: "新增会员数"
- }],
- left: 4,
- top: 25,
- icon: "circle",
- },
- xAxis: {
- type: 'category',
- data: [],
- boundaryGap: false,
- },
- yAxis: {
- type: 'value',
- splitLine: {
- show: true,
- lineStyle: {
- type: 'dashed',
- color: "#ffb767",
- opacity: 0.2
- }
- }
- },
- series: [{
- name: "新增会员数",
- data: [],
- type: 'line',
- smooth: true,
- showSymbol: false,
- lineStyle: {
- color: "#ffbf0d"
- },
- symbolSize: 8,
- itemStyle: {
- color: "#ffa958"
- },
- areaStyle: {
- color: "#ffbf0d",
- opacity: 0.1
- }
- }]
- };
- let pageTypeChart = null;
- const pageTypeChartOption = {
- tooltip: {
- trigger: 'axis'
- },
- legend: {
- data: ['浏览量', '访问量'],
- right: 0
- },
- grid: {
- left: '3%',
- right: '4%',
- bottom: '3%',
- containLabel: true
- },
- xAxis: {
- type: 'category',
- boundaryGap: false,
- data: [],
- },
- yAxis: {
- type: 'value',
- splitLine: {
- show: true,
- lineStyle: {
- type: 'dashed',
- color: "#f0f3f6",
- opacity: 1
- }
- }
- },
- series: [
- {
- name: '浏览量',
- type: 'line',
- stack: '总量',
- data: [],
- },
- {
- name: '访问量',
- type: 'line',
- stack: '总量',
- data: [],
- }
- ]
- }
- const memberDistributionChartOption = {
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'shadow'
- }
- },
- barMaxWidth: 12,
- grid: {
- top: 0,
- left: 0,
- right: 20,
- bottom: 0,
- containLabel: true
- },
- xAxis: {
- type: 'value',
- splitLine: {
- show: true,
- lineStyle: {
- type: 'dashed',
- color: "#f0f3f6",
- opacity: 1
- }
- }
- },
- yAxis: {
- type: 'category',
- data: [],
- },
- series: [
- {
- type: 'bar',
- data: [],
- itemStyle: {
- color: "#a193f4"
- },
- }
- ]
- }
- const sexRatioChartOption = {
- tooltip: {
- trigger: 'item',
- show: true,
- formatter: "{b}:{c}人,占比:{d}%"
- },
- labelLine: {
- normal: {
- show: false,
- smooth: true
- },
- emphasis: {
- show: true,
- },
- },
- legend: {
- orient: "horizontal",
- left: 'center',
- bottom: 10,
- },
- series: [
- {
- name: '占比图',
- type: 'pie',
- radius: ['40%', '50%'],
- center: ["50%", "40%"],
- avoidLabelOverlap: false,
- top: "top",
- label: {
- normal: {
- show: false,
- formatter: '{d}%',
- textStyle: {
- fontWeight: 'normal',
- fontSize: 12
- }
- },
- emphasis: {
- show: true
- },
- },
- data: []
- }
- ]
- }
- const mixin = {
- mounted() {
- const sexRatio = echarts.init(this.$refs['sexRatio']);
- const memberDistribution = echarts.init(this.$refs['memberDistribution']);
- sexRatio.showLoading();
- memberDistribution.showLoading();
- this.fetchData(GetMemberStatisticsUrl, {}).then(res => {
- this.members = res.member_total;
- this.memberNews = res.member_new.member_new;
- if (res.browse_footprint) {
- this.broweFootprintPluginTurnon = true;
- this.$nextTick(() => {
- pageTypeChart = echarts.init(this.$refs['pageTypeChart']);
- this.getPageTypeStatisticsData();
- })
- }
- for (const item of res.memberStructure) {
- memberDistributionChartOption.yAxis.data.push(item.name);
- memberDistributionChartOption.series[0].data.push(item.value);
- }
- memberDistribution.setOption(memberDistributionChartOption);
- memberDistribution.hideLoading();
- let sexData = {};
- let memberTotal = 0;
- for (const item of res.sex_ratio
- ) {
- sexData[item.name] = item.value;
- memberTotal += item.value;
- switch (item.name) {
- case "男":
- item.itemStyle = {
- color: "#005bff"
- }
- break;
- case "女":
- item.itemStyle = {
- color: "#7466ff"
- }
- break;
- case "未知":
- item.itemStyle = {
- color: "#ffcd30"
- }
- break;
- }
- }
- sexRatioChartOption.legend.formatter = (name) => {
- return name + ":" + sexData[name] + "人,占比" + ((sexData[name] / memberTotal) * 100).toFixed(2) + "%";
- }
- sexRatioChartOption.series[0]['data'] = res.sex_ratio;
- sexRatio.setOption(sexRatioChartOption);
- sexRatio.hideLoading();
- });
- memberChart = echarts.init(this.$refs['memberNewsChart']);
- this.getMemberNewsStatisticsData();
- this.getMemberLevels();
- this.getMemberShip();
- },
- data() {
- return {
- members: 0,
- memberNews: 0,
- views: 0,
- visitors: 0,
- newMember: {
- search: {
- timeRangeType: "day",
- timeRange: null
- }
- },
- pageType: {
- search: {
- timeRangeType: "day",
- timeRange: null
- },
- selectedType: 0,
- types: [],
- series: {}
- },
- levelMembers: [],
- levelMembersPagination: {
- limit: 15,
- total: 50,
- pages: 1
- },
- membership: {
- search: {
- keywordType: 1,
- keyword: ""
- },
- datas: [],
- pagination: {
- limit: 15,
- total: 50,
- pages: 1
- },
- searchLoading: false
- },
- broweFootprintPluginTurnon: false
- }
- },
- methods: {
- newMembertimeRangeChanged(range) {
- this.newMember.search = range;
- range['timeRange'] = range['timeRange'] ? range['timeRange'] / 1000 : null;
- this.getMemberNewsStatisticsData();
- },
- getMemberNewsStatisticsData() {
- memberChart.showLoading();
- this.fetchData(GetMemberNewsStatisticsUrl, {
- time_type: this.newMember.search.timeRangeType,
- time: this.newMember.search.timeRange
- }).then(res => {
- newMemberChartOption.xAxis.data = res.x_axis;
- newMemberChartOption.series[0].data = res.series;
- this.memberNews = res.member_new;
- memberChart.setOption(newMemberChartOption);
- memberChart.hideLoading();
- });
- },
- pageTypeRangeChanged(range) {
- range['timeRange'] = range['timeRange'] ? range['timeRange'] / 1000 : null;
- this.pageType.search = range;
- this.pageType.selectedType = 0;
- this.getPageTypeStatisticsData();
- },
- getPageTypeStatisticsData() {
- pageTypeChart.showLoading();
- this.fetchData(GetPageTypeStatisticsUrl, {
- time_type: this.pageType.search.timeRangeType,
- time: this.pageType.search.timeRange
- }).then(res => {
- this.views = res.search_data.count;
- this.visitors = res.search_data.cookie_count;
- let types = [];
- for (const item of res.data) {
- this.$set(this.pageType.series, item.key, item);
- types.push({
- value: item.key,
- text: item.name
- });
- }
- this.pageType.types = types;
- pageTypeChart.setOption(pageTypeChartOption);
- this.switchPageTypeChartData();
- })
- },
- switchPageTypeChartData() {
- pageTypeChart.showLoading();
- let showSeries = this.pageType.series[this.pageType.selectedType];
- pageTypeChart.setOption({
- xAxis: {
- data: showSeries.x_axis
- },
- series: [
- {
- name: '浏览量',
- data: showSeries.series.count
- },
- {
- name: '访问量',
- data: showSeries.series.cookie_count
- }
- ]
- });
- pageTypeChart.hideLoading();
- },
- getMemberLevels(page = this.levelMembersPagination.pages) {
- const dataLoading = this.$loading({
- target: "#memberLevelsPanel"
- });
- this.fetchData(GetMemberLevelsDataUrl, {
- page
- }).then(({ total, data, per_page }) => {
- dataLoading.close();
- this.levelMembersPagination.limit = per_page;
- this.levelMembersPagination.total = total;
- this.levelMembers = data;
- }).catch(() => { dataLoading.close(); })
- },
- searchMembership() {
- this.membership.pagination.pages = 1;
- this.getMemberShip();
- },
- getMemberShip(page = this.membership.pagination.pages) {
- this.membership.pagination.pages = page;
- this.membership.searchLoading = true;
- this.fetchData(GetMembershipDataUrl, {
- page,
- search_type: this.membership.search.keywordType,
- search_data: this.membership.search.keyword
- }).then(({
- data, per_page, total
- }) => {
- this.membership.pagination.total = total;
- this.membership.pagination.limit = per_page;
- for (let index = 0; index < data.length; index++) {
- data[index]['rank'] = ((this.membership.pagination.pages - 1) * this.membership.pagination.limit) + index + 1
- }
- this.membership.datas = data;
- this.membership.searchLoading = false;
- }).catch(() => {
- this.membership.searchLoading = false;
- })
- },
- exportMemberShip() {
- window.location.href = ExportMemberRelationDataUrl + '&search_type=' + this.membership.search.keywordType + '&search_data=' + this.membership.search.keyword;
- }
- },
- watch: {
- "pageType.selectedType"() {
- this.switchPageTypeChartData();
- }
- }
- };
|