1ded28eecb28aef8cae7f2cab4f3e90c.json 15 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\statistic\\order\\index.vue?vue&type=style&index=0&id=2ffea7be&scoped=true&lang=css","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\statistic\\order\\index.vue","mtime":1761614939064},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\css-loader\\index.js","mtime":1761614929364},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":1761614937403},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\postcss-loader\\src\\index.js","mtime":1761614935133},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQouY2wgew0KICBtYXJnaW4tcmlnaHQ6IDIwcHg7DQp9DQouY29kZS1yb3ctYmcgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LXdyYXA6IG5vd3JhcDsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KfQ0KLmNvZGUtcm93LWJnIC5pdnUtbXQgew0KICB3aWR0aDogY2FsYyg1MCUgLSA4cHgpOw0KfQ0KLmVjaC1ib3ggew0KICBtYXJnaW4tdG9wOiAxMHB4Ow0KfQ0KLmNoYW5nZS1zdHlsZSB7DQogIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7DQogIGJvcmRlci1yYWRpdXM6IDE1cHg7DQogIHBhZGRpbmc6IDBweCAxMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoucGVyY2VudC1ib3ggew0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nLXJpZ2h0OiAxMHB4Ow0KfQ0KLmxpbmUgew0KICB3aWR0aDogMTAwJTsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KLmJnIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiA4cHg7DQogIGJvcmRlci1yYWRpdXM6IDhweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsNCn0NCi5wZXJjZW50IHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIGhlaWdodDogOHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmV2LWNvbG9yLXByaW1hcnkpOw0KICB6LWluZGV4OiA5OTk7DQp9DQoubnVtIHsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgbWFyZ2luOiAwIDEwcHg7DQogIHdpZHRoOiAyMHB4Ow0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAsVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/statistic/order","sourcesContent":["<template>\r\n <div v-loading=\"spinShow\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mb-16\">\r\n <div class=\"acea-row row-middle\">\r\n <span class=\"label_text\">时间选择:</span>\r\n <el-date-picker\r\n clearable\r\n v-model=\"timeVal\"\r\n type=\"daterange\"\r\n :editable=\"false\"\r\n @change=\"onchangeTime\"\r\n format=\"yyyy/MM/dd\"\r\n value-format=\"yyyy/MM/dd\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n :picker-options=\"pickerOptions\"\r\n style=\"width: 250px\"\r\n class=\"mr20\"\r\n ></el-date-picker>\r\n </div>\r\n </el-card>\r\n <cards-data :cardLists=\"cardLists\" v-if=\"cardLists.length >= 0\"></cards-data>\r\n <el-card class=\"ivu-mb-16\" :bordered=\"false\" shadow=\"never\">\r\n <h4 class=\"statics-header-title\">营业趋势</h4>\r\n <echarts-new :option-data=\"optionData\" :styles=\"style\" height=\"100%\" width=\"100%\" v-if=\"optionData\"></echarts-new>\r\n </el-card>\r\n <div class=\"code-row-bg\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\">\r\n <div class=\"acea-row row-between-wrapper\">\r\n <h4 class=\"statics-header-title\">订单来源分析</h4>\r\n <div class=\"change-style\" v-db-click @click=\"echartLeft = !echartLeft\">切换样式</div>\r\n </div>\r\n <div class=\"ech-box\">\r\n <echarts-from v-if=\"echartLeft\" ref=\"visitChart\" :infoList=\"infoList\" echartsTitle=\"circle\"></echarts-from>\r\n <el-table\r\n v-show=\"!echartLeft\"\r\n ref=\"selection\"\r\n :data=\"tabList\"\r\n v-loading=\"loading\"\r\n empty-text=\"暂无数据\"\r\n highlight-current-row\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"50\"> </el-table-column>\r\n <el-table-column label=\"来源\" min-width=\"80\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.name }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"订单数\" min-width=\"130\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.value }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"占比率\" min-width=\"130\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"percent-box\">\r\n <div class=\"line\">\r\n <div class=\"bg\"></div>\r\n <div class=\"percent\" :style=\"'width:' + scope.row.percent + '%;'\"></div>\r\n </div>\r\n <div class=\"num\">{{ scope.row.percent }}%</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n </el-card>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\">\r\n <div class=\"acea-row row-between-wrapper\">\r\n <h4 class=\"statics-header-title\">订单类型分析</h4>\r\n <div class=\"change-style\" v-db-click @click=\"echartRight = !echartRight\">切换样式</div>\r\n </div>\r\n <div class=\"ech-box\">\r\n <echarts-from v-if=\"echartRight\" ref=\"visitChart\" :infoList=\"infoList2\" echartsTitle=\"circle\"></echarts-from>\r\n <el-table\r\n v-show=\"!echartRight\"\r\n ref=\"selection\"\r\n :data=\"tabList2\"\r\n v-loading=\"loading2\"\r\n empty-text=\"暂无数据\"\r\n highlight-current-row\r\n >\r\n <el-table-column type=\"index\" label=\"序号\" width=\"50\"> </el-table-column>\r\n <el-table-column label=\"来源\" min-width=\"80\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.name }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"金额\" min-width=\"130\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.value }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"占比率\" min-width=\"130\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"percent-box\">\r\n <div class=\"line\">\r\n <div class=\"bg\"></div>\r\n <div class=\"percent\" :style=\"'width:' + scope.row.percent + '%;'\"></div>\r\n </div>\r\n <div class=\"num\">{{ scope.row.percent }}%</div>\r\n </div>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n </el-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport cardsData from '@/components/cards/cards';\r\nimport echartsNew from '@/components/echartsNew/index';\r\nimport { getBasic, getTrend, getChannel, getType } from '@/api/statistic';\r\nimport { formatDate } from '@/utils/validate';\r\nimport echartsFrom from '@/components/echarts/index';\r\nimport timeOptions from '@/libs/timeOptions';\r\n\r\nexport default {\r\n name: 'index',\r\n components: { cardsData, echartsNew, echartsFrom },\r\n data() {\r\n return {\r\n timeVal: [],\r\n style: { height: '400px' },\r\n infoList: {},\r\n infoList2: {},\r\n echartLeft: true,\r\n echartRight: false,\r\n loading: false,\r\n loading2: false,\r\n formValidate: {\r\n time: '',\r\n },\r\n cardLists: [\r\n {\r\n col: 6,\r\n count: 0,\r\n name: '订单量',\r\n className: 'icondingdanliang',\r\n },\r\n {\r\n col: 6,\r\n count: 0,\r\n name: '订单销售额',\r\n className: 'icondingdanjine',\r\n },\r\n {\r\n col: 6,\r\n count: 0,\r\n name: '退款订单数',\r\n className: 'icontuikuandingdanliang',\r\n },\r\n {\r\n col: 6,\r\n count: 0,\r\n name: '退款金额',\r\n className: 'icontuikuanjine',\r\n },\r\n ],\r\n optionData: {},\r\n spinShow: false,\r\n tabList: [],\r\n tabList2: [],\r\n pickerOptions: timeOptions,\r\n };\r\n },\r\n created() {\r\n const end = new Date();\r\n const start = new Date();\r\n start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 29)));\r\n this.timeVal = [start, end];\r\n this.formValidate.time = formatDate(start, 'yyyy/MM/dd') + '-' + formatDate(end, 'yyyy/MM/dd');\r\n this.onInit();\r\n },\r\n methods: {\r\n onInit() {\r\n this.getBasic();\r\n this.getTrend();\r\n this.getChannel();\r\n this.getType();\r\n },\r\n onSelectDate(e) {\r\n this.formValidate.time = e;\r\n this.onInit();\r\n },\r\n timeG(dd) {\r\n var d = new Date(dd);\r\n var datetime =\r\n d.getFullYear() +\r\n '-' +\r\n (d.getMonth() + 1) +\r\n '-' +\r\n d.getDate() +\r\n ' ' +\r\n d.getHours() +\r\n ':' +\r\n d.getMinutes() +\r\n ':' +\r\n d.getSeconds();\r\n return datetime;\r\n },\r\n getBasic() {\r\n getBasic(this.formValidate).then((res) => {\r\n let arr = ['pay_count', 'pay_price', 'refund_count', 'refund_price'];\r\n this.cardLists.map((i, index) => {\r\n i.count = res.data[arr[index]];\r\n });\r\n });\r\n },\r\n getChannel() {\r\n this.loading = true;\r\n getChannel(this.formValidate).then((res) => {\r\n this.infoList = res.data;\r\n this.tabList = res.data.list;\r\n this.loading = false;\r\n });\r\n },\r\n getType() {\r\n this.loading2 = true;\r\n getType(this.formValidate).then((res) => {\r\n this.infoList2 = res.data;\r\n this.tabList2 = res.data.list;\r\n this.loading2 = false;\r\n });\r\n },\r\n selectChange(e) {},\r\n // 具体日期\r\n onchangeTime(e) {\r\n this.timeVal = e;\r\n this.formValidate.time = this.timeVal ? this.timeVal.join('-') : '';\r\n this.name = this.formValidate.time;\r\n this.getBasic();\r\n this.getTrend();\r\n this.getChannel();\r\n this.getType();\r\n },\r\n // 统计图\r\n getTrend() {\r\n this.spinShow = true;\r\n getTrend(this.formValidate)\r\n .then(async (res) => {\r\n let legend = res.data.series.map((item) => {\r\n return item.name;\r\n });\r\n let xAxis = res.data.xAxis;\r\n let col = ['#5B8FF9', '#5AD8A6', '#FFAB2B', '#5D7092'];\r\n let series = [];\r\n res.data.series.map((item, index) => {\r\n series.push({\r\n name: item.name,\r\n type: 'line',\r\n data: item.data,\r\n itemStyle: {\r\n normal: {\r\n color: col[index],\r\n },\r\n },\r\n smooth: 0,\r\n });\r\n });\r\n this.optionData = {\r\n tooltip: {\r\n trigger: 'axis',\r\n axisPointer: {\r\n type: 'cross',\r\n label: {\r\n backgroundColor: '#6a7985',\r\n },\r\n },\r\n },\r\n legend: {\r\n x: 'center',\r\n data: legend,\r\n },\r\n grid: {\r\n left: '3%',\r\n right: '4%',\r\n bottom: '3%',\r\n containLabel: true,\r\n },\r\n toolbox: {\r\n feature: {\r\n saveAsImage: {},\r\n },\r\n },\r\n xAxis: {\r\n type: 'category',\r\n boundaryGap: true,\r\n // axisTick:{\r\n // show:false\r\n // },\r\n // axisLine:{\r\n // show:false\r\n // },\r\n // splitLine: {\r\n // show: false\r\n // },\r\n axisLabel: {\r\n interval: 0,\r\n rotate: 40,\r\n textStyle: {\r\n color: '#000000',\r\n },\r\n },\r\n data: xAxis,\r\n },\r\n yAxis: {\r\n type: 'value',\r\n axisLine: {\r\n show: false,\r\n },\r\n axisTick: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n textStyle: {\r\n color: '#7F8B9C',\r\n },\r\n },\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#F5F7F9',\r\n },\r\n },\r\n },\r\n series: series,\r\n };\r\n this.spinShow = false;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n this.spinShow = false;\r\n });\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.cl {\r\n margin-right: 20px;\r\n}\r\n.code-row-bg {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n justify-content: space-between;\r\n}\r\n.code-row-bg .ivu-mt {\r\n width: calc(50% - 8px);\r\n}\r\n.ech-box {\r\n margin-top: 10px;\r\n}\r\n.change-style {\r\n border: 1px solid #ccc;\r\n border-radius: 15px;\r\n padding: 0px 10px;\r\n cursor: pointer;\r\n}\r\n.percent-box {\r\n display: flex;\r\n align-items: center;\r\n padding-right: 10px;\r\n}\r\n.line {\r\n width: 100%;\r\n position: relative;\r\n}\r\n.bg {\r\n position: absolute;\r\n width: 100%;\r\n height: 8px;\r\n border-radius: 8px;\r\n background-color: #f2f2f2;\r\n}\r\n.percent {\r\n position: absolute;\r\n border-radius: 5px;\r\n height: 8px;\r\n background-color: var(--prev-color-primary);\r\n z-index: 999;\r\n}\r\n.num {\r\n white-space: nowrap;\r\n margin: 0 10px;\r\n width: 20px;\r\n}\r\n</style>\r\n"]}]}