index.vue 20 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2 3 4 5 6 7 8 9 10
<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      size="small"
      :inline="true"
      v-show="showSearch"
      label-width="100px"
    >
lanbaoming's avatar
lanbaoming committed
11
      <el-form-item label="选择日期" prop="DateQuery">
lanbaoming's avatar
lanbaoming committed
12
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
13 14
          v-model="queryParams.sDate"
          type="month"
lanbaoming's avatar
lanbaoming committed
15
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
16 17 18 19 20 21 22
          value-format="yyyy-MM"
          clearable
          placeholder="请输起始月"
        />
        <el-date-picker
          v-model="queryParams.eDate"
          type="month"
lanbaoming's avatar
lanbaoming committed
23
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
24 25 26
          value-format="yyyy-MM"
          clearable
          placeholder="请输截止月"
lanbaoming's avatar
lanbaoming committed
27 28 29
        />
      </el-form-item>
      <el-form-item label="同比年份" prop="duibiYear">
lanbaoming's avatar
lanbaoming committed
30
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
31
          v-model="queryParams.duibiYear"
lanbaoming's avatar
lanbaoming committed
32
          type="year"
lanbaoming's avatar
lanbaoming committed
33
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
34 35
          value-format="yyyy"
          placeholder="请选择同比年份"
lanbaoming's avatar
lanbaoming committed
36 37 38
        />
      </el-form-item>

lanbaoming's avatar
lanbaoming committed
39
      <el-form-item label="部门" prop="deptid" v-show="showDept">
lanbaoming's avatar
lanbaoming committed
40 41 42 43
        <treeselect
          v-model="queryParams.deptid"
          :options="deptOptions"
          :show-count="true"
lanbaoming's avatar
lanbaoming committed
44
          :placeholder="$t('请选择部门')"
lanbaoming's avatar
lanbaoming committed
45 46
          :normalizer="normalizer"
        />
lanbaoming's avatar
lanbaoming committed
47
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
48 49 50 51 52
      <el-form-item
        label="客户经理"
        prop="salesmanid"
        v-show="showCustomsManage"
      >
lanbaoming's avatar
lanbaoming committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
        <user-selector
          manage
          v-model="queryParams.salesmanid"
          clearable
          @change="handleQuery"
          :prepend="{ id: 0, nickname: $t('未分配客户经理') }"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery"
          >搜索</el-button
        >
        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>
lanbaoming's avatar
lanbaoming committed
68
    <el-row :gutter="10" class="panel-group" style="margin: 5px">
lanbaoming's avatar
lanbaoming committed
69
      <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
lanbaoming's avatar
lanbaoming committed
70
        <div class="card-panel" @click="handleGoTo">
lanbaoming's avatar
lanbaoming committed
71 72
          <div class="card-panel-description">
            <div class="card-panel-text">
lanbaoming's avatar
lanbaoming committed
73
              {{ $t("业绩总览 Total") }}
lanbaoming's avatar
lanbaoming committed
74
            </div>
lanbaoming's avatar
lanbaoming committed
75 76 77 78 79 80
            <div class="card-panel-num">
              {{ SalesReportCountList1.curValue }}V
            </div>
            <div style="text-align: right">
              同比:{{ SalesReportCountList1.tbShow }}
            </div>
lanbaoming's avatar
lanbaoming committed
81 82 83 84
          </div>
        </div>
      </el-col>
      <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
lanbaoming's avatar
lanbaoming committed
85
        <div class="card-panel" @click="handleGoTo">
lanbaoming's avatar
lanbaoming committed
86 87 88 89
          <div class="card-panel-description">
            <div class="card-panel-text">
              {{ $t("海运拼柜") }}
            </div>
lanbaoming's avatar
lanbaoming committed
90 91 92 93 94 95
            <div class="card-panel-num">
              {{ SalesReportCountList2.curValue }}M3
            </div>
            <div style="text-align: right">
              同比:{{ SalesReportCountList2.tbShow }}
            </div>
lanbaoming's avatar
lanbaoming committed
96 97 98 99
          </div>
        </div>
      </el-col>
      <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
lanbaoming's avatar
lanbaoming committed
100
        <div class="card-panel" @click="handleGoTo">
lanbaoming's avatar
lanbaoming committed
101 102 103 104
          <div class="card-panel-description">
            <div class="card-panel-text">
              {{ $t("专线空运") }}
            </div>
lanbaoming's avatar
lanbaoming committed
105 106 107 108 109 110
            <div class="card-panel-num">
              {{ SalesReportCountList3.curValue }}KG
            </div>
            <div style="text-align: right">
              同比:{{ SalesReportCountList3.tbShow }}
            </div>
lanbaoming's avatar
lanbaoming committed
111 112 113 114
          </div>
        </div>
      </el-col>
    </el-row>
lanbaoming's avatar
lanbaoming committed
115
    <el-row :gutter="10" class="panel-group" style="margin: 5px">
lanbaoming's avatar
lanbaoming committed
116
      <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
lanbaoming's avatar
lanbaoming committed
117
        <div class="card-panel" @click="handleGoTo">
lanbaoming's avatar
lanbaoming committed
118 119
          <div class="card-panel-description">
            <div class="card-panel-text">
lanbaoming's avatar
lanbaoming committed
120
              {{ $t("成交总览 Total") }}
lanbaoming's avatar
lanbaoming committed
121
            </div>
lanbaoming's avatar
lanbaoming committed
122 123 124 125 126 127
            <div class="card-panel-num">
              {{ sumCustomerObject.sumCustomerCount }}
            </div>
            <div style="text-align: right">
              同比:{{ sumCustomerObject.tbShow }}
            </div>
lanbaoming's avatar
lanbaoming committed
128 129 130 131
          </div>
        </div>
      </el-col>
      <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
lanbaoming's avatar
lanbaoming committed
132
        <div class="card-panel" @click="handleGoTo">
lanbaoming's avatar
lanbaoming committed
133 134 135 136
          <div class="card-panel-description">
            <div class="card-panel-text">
              {{ $t("首次成交") }}
            </div>
lanbaoming's avatar
lanbaoming committed
137 138 139 140 141 142
            <div class="card-panel-num">
              {{ fisCustomerObject.sumCustomerCount }}
            </div>
            <div style="text-align: right">
              同比:{{ fisCustomerObject.tbShow }}
            </div>
lanbaoming's avatar
lanbaoming committed
143 144 145
          </div>
        </div>
      </el-col>
lanbaoming's avatar
lanbaoming committed
146 147 148 149 150 151 152 153 154
    </el-row>
    <div
      ref="mainBar"
      :class="className"
      :style="{ height: height, width: width }"
    />
  </div>
</template>
      
lanbaoming's avatar
lanbaoming committed
155
<script>
lanbaoming's avatar
lanbaoming committed
156 157 158 159 160 161
import UserSelector from "@/components/UserSelector";
import Treeselect from "@riophae/vue-treeselect";
//自定义目录数样式
import "@/assets/styles/vue-treeselect.css";
import { listSimpleDepts } from "@/api/system/dept";
//报表权限接口
lanbaoming's avatar
lanbaoming committed
162 163 164 165
import {
  getCurUserPermission,
  getDeptChild,
} from "@/api/report/EcwReportPermission";
lanbaoming's avatar
lanbaoming committed
166 167 168
import {
  SalesReportCount,
  FirstCustomerCount,
lanbaoming's avatar
lanbaoming committed
169
  CustomerTargetCount,
lanbaoming's avatar
lanbaoming committed
170 171
  getEChartData,
} from "@/api/report/salesreport";
lanbaoming's avatar
lanbaoming committed
172 173 174 175
import * as echarts from "echarts";
require("echarts/theme/macarons");
import resize from "../../dashboard/mixins/resize";
import SalesPanelGroup from "../../dashboard/SalesPanelGroup";
lanbaoming's avatar
lanbaoming committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
import { MessageBox } from "element-ui";

const CurDate = new Date();
function currentTime() {
  var date = new Date();
  var year = date.getFullYear();
  //月份从0~11,所以加一
  let month = date.getMonth() + 1;
  //如果格式是MM则需要此步骤,如果是M格式则此处注释掉
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  let strDate = year + "-" + month;
  return strDate;
}

function getLastYear() {
  //获取上一年份
  var date = new Date();
  date.setFullYear(date.getFullYear() - 1);
  let year = date.getFullYear();
  return year.toString();
}
lanbaoming's avatar
lanbaoming committed
199 200 201
function goPage() {
  alert(11);
}
lanbaoming's avatar
lanbaoming committed
202

lanbaoming's avatar
lanbaoming committed
203
//2024-05-01合并
lanbaoming's avatar
lanbaoming committed
204
//https://2zmzrd.axshare.com  报表原型地址
lanbaoming's avatar
lanbaoming committed
205
export default {
206
  name: "ReportSalesreportIndex",
lanbaoming's avatar
lanbaoming committed
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
  components: {
    SalesPanelGroup,
    UserSelector,
    Treeselect,
  },
  mixins: [resize],
  props: {
    className: {
      type: String,
      default: "chart",
    },
    width: {
      type: String,
      default: "100%",
    },
    height: {
      type: String,
lanbaoming's avatar
lanbaoming committed
224
      default: "1000px",
lanbaoming's avatar
lanbaoming committed
225 226 227 228 229 230 231 232 233 234 235 236 237 238
    },
    autoResize: {
      type: Boolean,
      default: true,
    },
  },
  data() {
    return {
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
lanbaoming's avatar
lanbaoming committed
239 240
      showCustomsManage: true, //是否显示客户经理查询条件
      showDept: true, //是否显示部门查询条件
lanbaoming's avatar
lanbaoming committed
241
      chart: null,
lanbaoming's avatar
lanbaoming committed
242 243 244 245 246 247
      SalesReportCountList3: {},
      SalesReportCountList2: {},
      SalesReportCountList1: {},
      salesReportRespAll: [],
      sumCustomerObject: {}, //成交客户总数
      fisCustomerObject: {}, //首次成交客户户数
lanbaoming's avatar
lanbaoming committed
248
      dateRangeCreateTime: [],
lanbaoming's avatar
lanbaoming committed
249
      SalesReportRespShow: [],
lanbaoming's avatar
lanbaoming committed
250 251 252
      queryParams: {
        salesmanid: undefined, //销售经理
        deptid: undefined, //部门
lanbaoming's avatar
lanbaoming committed
253 254 255
        sDate: CurDate.getFullYear() + "-01", //开始日期
        eDate: currentTime(), //结束日期
        duibiYear: getLastYear(), //对比年份
lanbaoming's avatar
lanbaoming committed
256
      },
lanbaoming's avatar
lanbaoming committed
257
      deptOptions: [],
lanbaoming's avatar
lanbaoming committed
258 259 260 261 262 263
      deptData: [],
      //报表权限信息
      objEcwReportPermission: {},
    };
  },
  watch: {},
lanbaoming's avatar
lanbaoming committed
264 265
  mounted() {},
  created() {
lanbaoming's avatar
lanbaoming committed
266
    this.handleQuery();
lanbaoming's avatar
lanbaoming committed
267 268 269 270 271 272 273 274 275 276 277 278 279 280
  },
  beforeDestroy() {
    if (!this.chart) {
      return;
    }
    this.chart.dispose();
    this.chart = null;
  },
  methods: {
    getDept() {
      listSimpleDepts().then((response) => {
        //this.deptData.add
      });
    },
lanbaoming's avatar
lanbaoming committed
281 282
    getSalesReportCount() {
      //获取运输方式统计数 lanbm 2024-04-01 add
lanbaoming's avatar
lanbaoming committed
283 284
      //数据遍历参考地址
      //https://blog.csdn.net/weixin_49826079/article/details/132172368
lanbaoming's avatar
lanbaoming committed
285
      SalesReportCount(this.queryParams).then((response) => {
lanbaoming's avatar
lanbaoming committed
286 287 288
        this.SalesReportCountList1 = response.data[0];
        this.SalesReportCountList2 = response.data[1];
        this.SalesReportCountList3 = response.data[2];
lanbaoming's avatar
lanbaoming committed
289 290
      });
    },
lanbaoming's avatar
lanbaoming committed
291 292 293
    getCustomerTargetCount() {
      CustomerTargetCount(this.queryParams).then((response) => {
        this.sumCustomerObject = response.data;
lanbaoming's avatar
lanbaoming committed
294 295 296 297 298 299
      });
    },
    getFirstCustomerCount() {
      //获取首次成交客户数 lanbm 2024-04-01 add
      FirstCustomerCount(this.queryParams).then((response) => {
        //首次成交客户数
lanbaoming's avatar
lanbaoming committed
300
        this.fisCustomerObject = response.data;
lanbaoming's avatar
lanbaoming committed
301 302
      });
    },
lanbaoming's avatar
lanbaoming committed
303 304
    // 柱状图
    createChart() {
lanbaoming's avatar
lanbaoming committed
305
      getEChartData(this.queryParams).then((response) => {
lanbaoming's avatar
lanbaoming committed
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333
        //图表参考网址
        //https://blog.csdn.net/m0_65983287/article/details/133909409
        let salesReportRespAll1 = response.data.salesReportRespAll;
        var chartDom = this.$refs["mainBar"];
        this.chart = echarts.init(chartDom, "macarons");
        this.chart.on("click", (params) => {
          if (this.isRight() == false) return;
          let p = {};
          if (params.componentType === "title") {
            this.$router.push({
              path: "/report/sales_analysis",
              query: p,
            });
            return;
          }

          /*
          this.queryParams.salesmanid = parseInt(
            this.resultList[params.dataIndex].salesmanid
          );
          this.queryParams.number = this.resultList[params.dataIndex].number;
          Object.assign(p, this.queryParams);*/
          this.$router.push({
            path: "/report/sales_analysis",
            query: p,
          });
        });
        this.option = {
lanbaoming's avatar
lanbaoming committed
334
          title: {
lanbaoming's avatar
lanbaoming committed
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
            text: "月度业绩分布", //主标题
            link: "", //主标题链接
            target: "self", //窗口打开方式self本窗口,blank新窗口
            textStyle: {
              //color: "skyblue", //主标题颜色
              fontSize: "20", //主标题大小
            },
            subtext: "更多...", //副标题
            sublink: "javascript:goPage()", //副标题链接
            subtarget: "self", //self/blank
            subtextStyle: {
              //color: "#0f0",
              fontSize: "10",
              textAlign: "right",
            },
            left: "left", //位置
            show: true, //是否显示true/false
            textAlign: "left", //水平对齐:auto/left,right,center
            textVerticalAlign: "auto", //垂直对齐:auto,top,middle,bottom
lanbaoming's avatar
lanbaoming committed
354
          },
lanbaoming's avatar
lanbaoming committed
355 356 357 358 359 360 361 362 363 364 365 366
          tooltip: {
            trigger: "axis",
            axisPointer: {
              type: "shadow",
            },
            formatter: function (params) {
              //params 是一个数组,数组中每个元素代表一个系列的数据信息
              var result = "";
              params.forEach(function (item) {
                let vR = salesReportRespAll1.filter(
                  (r) => r.strMonth === item.name
                );
lanbaoming's avatar
lanbaoming committed
367
                result = "统计月份:" + item.name + "<br/>";
lanbaoming's avatar
lanbaoming committed
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
                result +=
                  "Total:" +
                  vR[0].curValue +
                  "   同比:" +
                  vR[0].tbShow +
                  ",环比:" +
                  vR[0].hbShow +
                  "<br/>";
                result +=
                  "海运拼柜:" +
                  vR[0].curValue1 +
                  "   同比:" +
                  vR[0].tbShow1 +
                  ",环比:" +
                  vR[0].hbShow1 +
                  "<br/>";
                result +=
                  "专线空运:" +
                  vR[0].curValue3 +
                  "   同比:" +
                  vR[0].tbShow3 +
                  ",环比:" +
                  vR[0].hbShow3 +
                  "<br/>";
              });
              return result;
            },
lanbaoming's avatar
lanbaoming committed
395
          },
lanbaoming's avatar
lanbaoming committed
396
          legend: {},
lanbaoming's avatar
lanbaoming committed
397 398 399 400
          xAxis: {
            type: "value",
            boundaryGap: [0, 0.5],
          },
lanbaoming's avatar
lanbaoming committed
401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488
          yAxis: {
            type: "category",
            data: response.data.objyAxis.data,
            axisLabel: {
              showMaxLabel: true,
              interval: 0,
              rotate: 0,
            },
          },
          grid: {
            show: false,
            top: "5%",
            right: "5%",
            bottom: "5%",
            left: "10%",
          },
          series: [
            {
              name: "Total",
              data: response.data.obSseries[0].data,
              type: "bar",
              barGap: "0px",
              label: {
                show: true,
                position: "right", //在上方显示
                textStyle: {
                  //数值样式
                  fontSize: "16px",
                  color: "#999",
                },
                formatter: function (d) {
                  return d.data;
                },
              },
            },
            {
              name: "海运拼柜",
              data: response.data.obSseries[1].data,
              type: "bar",
              barGap: "0px",
              label: {
                show: true,
                position: "right", //在上方显示
                textStyle: {
                  //数值样式
                  fontSize: "16px",
                  color: "##999",
                },
                formatter: function (d) {
                  /*
                  let sum =
                    (
                      (d.data / (d.data + res[d.dataIndex].maleCount)) *
                      100
                    ).toFixed(2) + "%";
                    */
                  return d.data;
                },
              },
            },
            {
              name: "专线空运",
              data: response.data.obSseries[2].data,
              type: "bar",
              barGap: "0px",
              label: {
                show: true,
                position: "right", //在上方显示
                textStyle: {
                  //数值样式
                  fontSize: "16px",
                  color: "##999",
                },
                formatter: function (d) {
                  /*
                  let sum =
                    (
                      (d.data / (d.data + res[d.dataIndex].maleCount)) *
                      100
                    ).toFixed(2) + "%";
                    */
                  return d.data;
                },
              },
            },
          ],
        };
        this.option && this.chart.setOption(this.option);
lanbaoming's avatar
lanbaoming committed
489 490
      });
    },
lanbaoming's avatar
lanbaoming committed
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524
    isChinese() {
      //基础函数,判断系统显示语言是中文还是英文
      return this.$i18n.locale === "zh_CN";
    },
    handleQuery() {
      if (this.isRight() == false) return;
      this.loading = true;
      //获取当前用户报表权限
      getCurUserPermission().then((response) => {
        this.objEcwReportPermission = response.data;
        if (this.objEcwReportPermission.permissionFw == 1) {
          //本人权限
          this.showCustomsManage = false;
          this.showDept = false;
          this.queryParams.salesmanid = this.objEcwReportPermission.userId;
        } else if (this.objEcwReportPermission.permissionFw == 2) {
          //本部门权限
          this.showCustomsManage = true;
          this.showDept = true;
          this.queryParams.deptid = parseInt(
            this.objEcwReportPermission.deptId
          );
        } else if (this.objEcwReportPermission.permissionFw == 3) {
          //全公司权限
          this.showCustomsManage = true;
          this.showDept = true;
        }

        this.getTreeselect();
        this.getSalesReportCount();
        this.getFirstCustomerCount();
        //获取成交客户数,出重结果
        this.getCustomerTargetCount();
        //获取权限后再初始化统计图表
lanbaoming's avatar
lanbaoming committed
525 526
        //this.initChart();
        this.createChart();
lanbaoming's avatar
lanbaoming committed
527 528 529
        this.loading = false;
      });
    },
lanbaoming's avatar
lanbaoming committed
530 531 532 533 534 535 536 537 538
    resetQuery() {
      this.queryParams = {
        salesmanid: undefined, //销售经理
        deptid: undefined, //部门
        sDate: undefined, //开始日期
        eDate: undefined, //结束日期
        duibiYear: undefined, //对比年份
      };
    },
lanbaoming's avatar
lanbaoming committed
539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
    handleGoTo() {
      if (this.isRight() == false) return;
      let p = {};
      Object.assign(p, this.queryParams);
      this.$router.push({
        path: "/report/sales_analysis",
        query: p,
      });
    },
    isRight() {
      //校验查询参数 lanbm 2024-05-09 add
      if (this.queryParams.sDate == undefined) {
        MessageBox("请输入起始月份。");
        return false;
      }
      if (this.queryParams.eDate == undefined) {
        MessageBox("请输入截止月份。");
        return false;
      }
      if (this.queryParams.duibiYear == undefined) {
        MessageBox("请输入对比年份。");
        return false;
      } else {
        let y = parseInt(this.queryParams.duibiYear);
        if (y < 2023) {
          MessageBox("对比年份只能选2023年和2023年之后的年份。");
          return false;
        }
        var date = new Date();
        var year = date.getFullYear();
        if (y > year) {
          MessageBox("对比年份只能选当前年份之前的年份。");
          return false;
        }
      }
      return true;
    },
lanbaoming's avatar
lanbaoming committed
576 577 578
    handleAdd() {
      alert(1);
    },
lanbaoming's avatar
lanbaoming committed
579
    handleExport() {},
lanbaoming's avatar
lanbaoming committed
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
    /** 查询部门下拉树结构 + 岗位下拉 */
    getTreeselect() {
      if (this.objEcwReportPermission.permissionFw == 3) {
        listSimpleDepts().then((response) => {
          // 处理deptOptions 参数
          this.deptOptions = [];
          this.deptOptions.push(...this.handleTree(response.data, "id"));
        });
      } else if (this.objEcwReportPermission.permissionFw == 2) {
        this.DeptEx.id = this.objEcwReportPermission.deptId;
        getDeptChild(this.DeptEx).then((response) => {
          // 处理deptOptions 参数
          this.deptOptions = [];
          this.deptOptions.push(...this.handleTree(response.data, "id"));
        });
      }
    },
    //格式化部门的下拉框
    normalizer(node) {
      return {
        id: node.id,
        label: node.name,
        children: node.children,
      };
    },
lanbaoming's avatar
lanbaoming committed
605 606 607
  },
};
</script>
lanbaoming's avatar
lanbaoming committed
608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681


<style lang="scss" scoped>
.panel-group {
  margin-top: 18px;

  .card-panel-col {
    margin-bottom: 32px;
  }

  .card-panel {
    display: flex;
    justify-content: space-between;
    height: 108px;
    cursor: pointer;
    font-size: 12px;
    position: relative;
    overflow: hidden;
    color: #666;
    background: #fff;
    box-shadow: 4px 4px 40px rgba(0, 0, 0, 0.05);
    border-color: rgba(0, 0, 0, 0.05);

    &:hover {
      .card-panel-icon-wrapper {
        color: #fff;
      }

      .icon-people {
        background: #40c9c6;
      }

      .icon-message {
        background: #36a3f7;
      }

      .icon-money {
        background: #f4516c;
      }

      .icon-shopping {
        background: #34bfa3;
      }
    }

    .icon-people {
      color: #40c9c6;
    }

    .icon-message {
      color: #36a3f7;
    }

    .icon-money {
      color: #f4516c;
    }

    .icon-shopping {
      color: #34bfa3;
    }

    .card-panel-icon-wrapper {
      margin: 14px 0 0 14px;
      padding: 16px;
      transition: all 0.38s ease-out;
      border-radius: 6px;
    }

    .card-panel-icon {
      font-size: 48px;
    }

    .card-panel-description {
      font-weight: bold;
lanbaoming's avatar
lanbaoming committed
682 683
      margin: 10px;
      margin-left: 10px;
lanbaoming's avatar
lanbaoming committed
684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717

      .card-panel-text {
        line-height: 18px;
        color: rgba(0, 0, 0, 0.45);
        font-size: 16px;
        margin-bottom: 12px;
      }

      .card-panel-num {
        font-size: 20px;
      }
    }
  }
}

@media (max-width: 550px) {
  .card-panel-description {
    display: none;
  }

  .card-panel-icon-wrapper {
    float: none !important;
    width: 100%;
    height: 100%;
    margin: 0 !important;

    .svg-icon {
      display: block;
      margin: 14px auto !important;
      float: none !important;
    }
  }
}
</style>
lanbaoming's avatar
lanbaoming committed
718