Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

974 righe
26 KiB

  1. <template>
  2. <div class="pages">
  3. <!-- 头 -->
  4. <div class="app-top">
  5. <div class="app-titel" style="margin-top: 10px">
  6. <div class="div-lab">
  7. <div class="titel-text">筛选日期:</div>
  8. <div style="margin-left: 14px">
  9. <el-button
  10. :class="{ 'el-button--primary': params.dateType == 1 }"
  11. @click="tabtimetap(1)"
  12. >近七天</el-button
  13. >
  14. <el-button
  15. :class="{ 'el-button--primary': params.dateType == 3 }"
  16. @click="tabtimetap(3)"
  17. >近15天</el-button
  18. >
  19. <el-button
  20. :class="{ 'el-button--primary': params.dateType == 2 }"
  21. @click="tabtimetap(2)"
  22. >近30天</el-button
  23. >
  24. </div>
  25. <div style="margin-left: 26px">
  26. <el-date-picker
  27. @change="confirmtime()"
  28. v-model="customtime"
  29. :clearable="false"
  30. type="daterange"
  31. range-separator="-"
  32. :default-time="['00:00:00', '23:59:59']"
  33. value-format="yyyy-MM-dd"
  34. start-placeholder="开始日期"
  35. end-placeholder="结束日期"
  36. >
  37. </el-date-picker>
  38. </div>
  39. </div>
  40. <div class="div-lab" v-if="params.orgType != 3">
  41. <div class="label">项目名称:</div>
  42. <el-select
  43. class="div-inp"
  44. v-model="params.houseId"
  45. filterable
  46. clearable
  47. @change="houseChange"
  48. placeholder="请选择项目"
  49. >
  50. <el-option
  51. v-for="item in houseList"
  52. :key="item.id"
  53. :label="item.propertyName"
  54. :value="item.id"
  55. >
  56. </el-option>
  57. </el-select>
  58. </div>
  59. <div
  60. class="div-lab"
  61. style="padding: 0 20px 0 0; flex-grow: 1; justify-content: flex-end"
  62. >
  63. <div style="margin-left: 5px">
  64. <el-button @click="screen" type="primary">搜索</el-button>
  65. </div>
  66. <div style="margin-left: 20px">
  67. <el-button @click="empty" type="text">清空</el-button>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. <div class="app-box-er">
  73. <div class="title">
  74. <div class="lefts">消费趋势</div>
  75. <el-select
  76. v-model="echarValue1"
  77. @change="echarValue1Change"
  78. style="width: 100px; margin-left: 10px"
  79. placeholder="请选择"
  80. >
  81. <el-option
  82. v-for="item in options1"
  83. :key="item.value"
  84. :label="item.label"
  85. :value="item.value"
  86. >
  87. </el-option>
  88. </el-select>
  89. </div>
  90. <template v-if="echarValue1 == 0">
  91. <div class="tabcard">
  92. <el-card
  93. shadow="hover"
  94. v-for="(data, index) in showList"
  95. :key="index"
  96. :class="{ tophovese: selectShowIndex == index }"
  97. >
  98. <div @click="selectShowList(index)">
  99. <div class="text1">
  100. {{ data.title }}
  101. </div>
  102. <div class="text2">
  103. {{ data.value }}
  104. </div>
  105. <div class="text3">
  106. <span>对比时段 {{ data.value1 || 0 }}</span>
  107. <span class="textUp" v-if="data.value2 > 0">
  108. +{{ data.value2 || 0 }}
  109. <i class="up"></i>
  110. </span>
  111. <span class="textDown" v-if="data.value2 < 0">
  112. -{{ data.value2 || 0 }}
  113. <i class="down"></i>
  114. </span>
  115. </div>
  116. </div>
  117. </el-card>
  118. </div>
  119. <div id="main"></div>
  120. </template>
  121. <div v-else>
  122. <el-table
  123. :header-cell-style="{ background: '#F5F7FA', color: '#333333' }"
  124. :data="tableData"
  125. stripe
  126. style="width: 100%"
  127. height="440"
  128. >
  129. <el-table-column prop="date" label="日期" align="center">
  130. </el-table-column>
  131. <el-table-column prop="surplusSum" label="总时长" align="center">
  132. </el-table-column>
  133. <el-table-column
  134. prop="longTransferSum"
  135. label="长录音时长"
  136. align="center"
  137. >
  138. </el-table-column>
  139. <el-table-column
  140. prop="shortTransferSum"
  141. label="短录音时长"
  142. align="center"
  143. >
  144. </el-table-column>
  145. <el-table-column
  146. prop="avgTransferSum"
  147. label="平均接待转写时长"
  148. align="center"
  149. >
  150. </el-table-column>
  151. </el-table>
  152. <div style="display: flex; justify-content: flex-end; margin-top: 10px">
  153. <el-pagination
  154. @size-change="handleSizeChange"
  155. @current-change="handleCurrentChange"
  156. :current-page="params.current"
  157. :page-sizes="[10, 30, 50]"
  158. :page-size="params.size"
  159. layout="total, sizes, prev, pager, next, jumper"
  160. :total="params.total"
  161. >
  162. </el-pagination>
  163. </div>
  164. </div>
  165. </div>
  166. <section class="barBox">
  167. <div class="item l-side">
  168. <div class="title">
  169. <p>项目消费时长排名(top10)</p>
  170. <el-button type="text" size="medium" @click="allHousePage"
  171. >查看全部</el-button
  172. >
  173. </div>
  174. <div class="bar" id="lSideBar"></div>
  175. </div>
  176. <div class="item r-side">
  177. <div class="title">
  178. <p>项目平均接待转写时长排名(top10)</p>
  179. <el-button type="text" size="medium" @click="allHousePage"
  180. >查看全部</el-button
  181. >
  182. </div>
  183. <div class="bar" id="rSideBar"></div>
  184. </div>
  185. </section>
  186. <el-dialog
  187. title="项目转写时长"
  188. :visible.sync="housePageShow"
  189. :close-on-click-modal="false"
  190. >
  191. <div class="z-title">
  192. <p>
  193. 统计时间:{{ housePageParams.date }}
  194. </p>
  195. <el-button @click="downloadExcel" type="primary">导出</el-button>
  196. </div>
  197. <el-table :data="housePage" height="400px">
  198. <el-table-column prop="houseName" label="项目名称"></el-table-column>
  199. <el-table-column prop="rechargeCount" label="消费时长"></el-table-column>
  200. <el-table-column prop="data" label="平均接待转写时长"> </el-table-column>
  201. </el-table>
  202. <div
  203. style="
  204. padding: 10px 0;
  205. width: 100%;
  206. display: flex;
  207. justify-content: flex-end;
  208. "
  209. >
  210. <el-pagination
  211. @size-change="handleSizeChangeLog"
  212. @current-change="handleCurrentChangeLog"
  213. :current-page="housePageParams.current"
  214. :page-sizes="[10, 50, 100]"
  215. :page-size="housePageParams.size"
  216. layout="total, sizes, prev, pager, next, jumper"
  217. :total="housePageParams.total"
  218. >
  219. </el-pagination>
  220. </div>
  221. </el-dialog>
  222. </div>
  223. </template>
  224. <script>
  225. import * as echarts from "echarts";
  226. import { exportMethodPost } from "@/util/util";
  227. export default {
  228. data() {
  229. return {
  230. // 入参
  231. params: {
  232. current: 1, //
  233. size: 10, // 分页
  234. total: 0, // 总条数
  235. dateType: 3, // 1近七天 3 近十五天 2近三十天
  236. startDate: "", // 开始时间
  237. endDate: "", // 结束时间
  238. operateType: "", // 0:购买,1: 赠送,2:扣除购买,3:扣除赠送,4:长录音转写扣除,5:短录音转写扣除
  239. houseId: "", // 项目id
  240. orgType: localStorage.getItem("orgType") || "", // 登陆后台
  241. agentId: localStorage.getItem("agentId") || "", // 代理商id
  242. orgCode: localStorage.getItem("orgCode") || "", // 公司code
  243. },
  244. customtime: [], // 自定义筛选的时间
  245. houseList: [], // 项目列表
  246. echarValue1: "0", // 0折线趋势图 1表格
  247. options1: [
  248. // 筛选表格类型
  249. {
  250. label: "趋势图",
  251. value: "0",
  252. },
  253. {
  254. label: "表格",
  255. value: "1",
  256. },
  257. ],
  258. showList: [
  259. // 展示四个模块
  260. {
  261. title: "转写总时长(小时)",
  262. paramsName: "allCostTransferTime", // 折线统计图&表格数据
  263. value: "", // 第一时段转写总时长值
  264. valueName: "useSum", // 转写总时长公用一个名字
  265. value1: "", // 第二时段转写总时长
  266. value2: "", // 第一二时段总时长对比
  267. // 折线统计图数据
  268. data: [], //时段a
  269. data1: [], //时段b
  270. },
  271. {
  272. title: "长录音时长(小时)",
  273. paramsName: "longCostTransferTime", // 折线统计图&表格数据
  274. value: "", // 第一时段长录音时长
  275. valueName: "longTransferSum", // 长录音时长 公用一个名字
  276. value1: "", // 第二时段长录音时长
  277. value2: "", // 第一二时段长录音对比
  278. // 折线统计图数据
  279. data: [], //时段a
  280. data1: [], //时段b
  281. },
  282. {
  283. title: "短录音时长(小时)",
  284. paramsName: "shortCostTransferTime", // 折线统计图&表格数据
  285. value: "", // 第一短录音时长
  286. valueName: "shortTransferSum", // 短录音时长
  287. value1: "", // 第二时段短录音时长
  288. value2: "", // 第一二时段短录音时长
  289. // 折线统计图数据
  290. data: [], //时段a
  291. data1: [], //时段b
  292. },
  293. {
  294. title: "平均接待转写时长(分)",
  295. paramsName: "avgCostTransferTime", // 折线统计图&表格数据
  296. value: "", // 第一时段平均接待转写时长
  297. valueName: "avgTransferSum", // 平均接待转写时长
  298. value1: "", // 第二时段平均接待转写时长
  299. value2: "", // 第一二时段平均接待转写时长
  300. // 折线统计图数据
  301. data: [], //时段a
  302. data1: [], //时段b
  303. },
  304. ], // 筛选用的数据
  305. selectShowIndex: 0, // 选中下标
  306. tableData: [], // 表格数据
  307. housePageShow: false,// 展示消费统计时长弹窗
  308. housePage: [], // 项目转写、消费统计时长
  309. housePageParams: {
  310. current: 1, //
  311. size: 10, // 分页
  312. total: 0, // 总条数
  313. date: '', //
  314. }, // 全部撰写消费
  315. };
  316. },
  317. created() {
  318. this.getHouseList();
  319. this.consumptionTrend();
  320. },
  321. methods: {
  322. // 导出
  323. downloadExcel() {
  324. exportMethodPost(
  325. "/autoSR/zk/recharge/houseTransferTimeExport",
  326. "项目转写消费时长",
  327. this.params
  328. );
  329. },
  330. // 选择消费趋势的选项卡 只使用下标方便取当前选中的数组数据
  331. selectShowList(index) {
  332. // if (index == this.selectShowIndex) return
  333. this.selectShowIndex = index;
  334. let array = this.showList[index];
  335. console.log(array);
  336. let xAxis1 = array.data.map((item) => {
  337. return item.date;
  338. });
  339. let xAxis2 = array.data1.map((item) => {
  340. return item.date;
  341. });
  342. let yAxis1 = array.data.map((item) => {
  343. return item.data;
  344. });
  345. let yAxis2 = array.data1.map((item) => {
  346. return item.data;
  347. });
  348. let nameTime1 = `${array.data[0].date}-${
  349. array.data[array.data.length - 1].date
  350. }`;
  351. let nameTime2 = `${array.data1[0].date}-${
  352. array.data1[array.data1.length - 1].date
  353. }`;
  354. this.housePageParams.date = nameTime1
  355. let arr = [
  356. {
  357. name: nameTime1,
  358. type: "line",
  359. data: yAxis1,
  360. },
  361. {
  362. name: nameTime2,
  363. type: "line",
  364. data: yAxis2,
  365. },
  366. ];
  367. this.SwitchCARDS(arr, "main", [xAxis1, xAxis2], [nameTime1, nameTime2]);
  368. },
  369. // 消费趋势切换展示方式
  370. echarValue1Change(e) {
  371. if (e == 0) {
  372. this.$nextTick(() => {
  373. this.selectShowList(this.selectShowIndex);
  374. });
  375. }
  376. },
  377. tabtimetap(index) {
  378. this.params.dateType = index;
  379. this.consumptionTrend();
  380. },
  381. // 筛选
  382. screen() {
  383. this.consumptionTrend();
  384. },
  385. // 楼盘筛选
  386. houseChange() {
  387. this.consumptionTrend();
  388. },
  389. // 清空筛选
  390. empty() {
  391. this.params.dateType = 3; // 1近七天 2 近十五天 3近三十天
  392. this.params.operateType = ""; // 0:购买,1: 赠送,2:扣除购买,3:扣除赠送,4:长录音转写扣除,5:短录音转写扣除
  393. this.params.houseId = ""; // 项目id
  394. this.emptyTimePickerChoose();
  395. },
  396. // 清空时间选择器
  397. emptyTimePickerChoose() {
  398. this.customtime = [];
  399. this.params.startDate = ""; // 开始时间
  400. this.params.endDate = ""; // 结束时间
  401. },
  402. // 自定义时间筛选
  403. confirmtime() {
  404. this.params.startDate = this.customtime[0];
  405. this.params.endDate = this.customtime[1];
  406. this.params.dateType = null;
  407. this.consumptionTrend();
  408. },
  409. handleCurrentChange(e) {
  410. this.params.current = e;
  411. this.consumptionTrend();
  412. },
  413. handleSizeChange(e) {
  414. this.params.size = e;
  415. this.consumptionTrend();
  416. },
  417. // 获取转写消费统计
  418. consumptionTrend() {
  419. this.$api.http.consumptionTrend(this.params).then((res) => {
  420. console.log(res);
  421. if (res.data) {
  422. let obj = res.data;
  423. this.showList.forEach((item) => {
  424. // 这部分是消费趋势的card数据
  425. if (obj.firstValue) {
  426. item.value = obj.firstValue[item.valueName] || 0;
  427. }
  428. if (obj.secondValue) {
  429. item.value1 = obj.secondValue[item.valueName] || 0;
  430. }
  431. if (obj.contrast) {
  432. item.value2 = obj.contrast[item.valueName] || 0;
  433. }
  434. // 这部分是折线统计图数据
  435. if (obj.dataTable) {
  436. item.data = obj.dataTable[item.paramsName] || [];
  437. }
  438. if (obj.dataTable2) {
  439. item.data1 = obj.dataTable2[item.paramsName] || [];
  440. }
  441. });
  442. if (this.echarValue1 == 0) {
  443. this.selectShowList(this.selectShowIndex);
  444. }
  445. // 转写消费趋势表格数据
  446. if (obj.dataTablePage) {
  447. this.tableData = obj.dataTablePage.records;
  448. this.params.total = obj.dataTablePage.total;
  449. }
  450. // 项目消费时长Top10
  451. if (obj.houseCostTopTen) {
  452. this.creatHouseCostTopTen(obj.houseCostTopTen);
  453. }
  454. // 项目平均转写时长Top10
  455. if (obj.houseAvgCostTopTen) {
  456. this.creatHouseAvgCostTopTen(obj.houseAvgCostTopTen);
  457. }
  458. }
  459. });
  460. },
  461. handleSizeChangeLog(val) {
  462. this.housePageParams.current = val;
  463. this.allHousePage();
  464. },
  465. handleCurrentChangeLog(val) {
  466. this.housePageParams.size = val;
  467. this.allHousePage();
  468. },
  469. // 获取转写消费统计
  470. allHousePage() {
  471. let params = {
  472. dateType: this.params.dateType, // 1近七天 3 近十五天 2近三十天
  473. startDate: this.params.startDate, // 开始时间
  474. endDate: this.params.endDate, // 结束时间
  475. operateType: this.params.operateType, // 0:购买,1: 赠送,2:扣除购买,3:扣除赠送,4:长录音转写扣除,5:短录音转写扣除
  476. houseId: this.params.houseId, // 项目id
  477. orgType: this.params.orgType, // 登陆后台
  478. agentId: this.params.agentId, // 代理商id
  479. orgCode: this.params.orgCode, // 公司code
  480. ...this.housePageParams, // 合并分页
  481. };
  482. this.$api.http.allHousePage(params).then((res) => {
  483. console.log(res);
  484. if (res.data) {
  485. this.housePage = res.data.records;
  486. this.housePageParams.total = res.data.total;
  487. console.log(res.data.records, "housePage");
  488. this.housePageShow = true
  489. }
  490. });
  491. },
  492. // 处理项目消费时长Top10的数据
  493. creatHouseCostTopTen(data) {
  494. let [xAxis, yAxis] = [[], []];
  495. console.log(data);
  496. data.forEach((item, index) => {
  497. xAxis.push(item.houseName);
  498. yAxis.push({
  499. value: item.data,
  500. itemStyle: {
  501. color: this.setColor(index),
  502. },
  503. });
  504. });
  505. this.createdBar({
  506. id: "lSideBar",
  507. xAxis,
  508. yAxis,
  509. });
  510. },
  511. // 处理项目消费时长Top10的数据
  512. creatHouseAvgCostTopTen(data) {
  513. let [xAxis, yAxis] = [[], []];
  514. console.log(data);
  515. data.forEach((item, index) => {
  516. xAxis.push(item.houseName);
  517. yAxis.push({
  518. value: item.data,
  519. itemStyle: {
  520. color: this.setColor(index),
  521. },
  522. });
  523. });
  524. this.createdBar({
  525. id: "rSideBar",
  526. xAxis,
  527. yAxis,
  528. });
  529. },
  530. // 设置颜色
  531. setColor(index) {
  532. let color = "";
  533. switch (index) {
  534. case 0:
  535. color = "#E7483C";
  536. break;
  537. case 1:
  538. color = "#FF8C13";
  539. break;
  540. case 2:
  541. color = "#FFCC00";
  542. break;
  543. default:
  544. color = "#4FC78F";
  545. break;
  546. }
  547. return color;
  548. },
  549. //获取项目数据
  550. getHouseList() {
  551. this.$api.api.findHouseByUser({
  552. orgType: localStorage.getItem("orgType"),
  553. }).then((res) => {
  554. this.houseList = res.data;
  555. });
  556. },
  557. //卡片下折线图
  558. SwitchCARDS(arr, str, timeDate, Strname) {
  559. let chartDom = document.getElementById(str);
  560. echarts.init(chartDom).dispose();
  561. let myChart = echarts.init(chartDom);
  562. myChart.clear();
  563. let option = {
  564. color: [
  565. "#6F8EDC",
  566. "#EE6666",
  567. "#F98120",
  568. "#1CC99E",
  569. "#9474FB",
  570. "#66AFF5",
  571. "#FABD2B",
  572. "#FFCF8F",
  573. "#657292",
  574. "#7A6A99",
  575. "#BF5D52",
  576. "#77B7E4",
  577. "#E6A065",
  578. "#9D5139",
  579. "#C1AA88",
  580. "#F87F7A",
  581. "#F6CF74",
  582. "#7F5506",
  583. "#88BB9B",
  584. "#6E99AA",
  585. "#5789D0",
  586. ],
  587. tooltip: {
  588. trigger: "axis",
  589. },
  590. legend: {
  591. data: Strname,
  592. top: "10",
  593. icon: "roundRect",
  594. },
  595. grid: {
  596. left: 10,
  597. right: 10,
  598. bottom: 18,
  599. containLabel: true,
  600. },
  601. xAxis: [
  602. {
  603. type: "category",
  604. data: timeDate[0],
  605. axisLabel: {
  606. //重点在这一块,其余可以忽略
  607. textStyle: {
  608. color: "#212121", //更改坐标轴文字颜色
  609. },
  610. },
  611. axisLine: {
  612. lineStyle: {
  613. type: "solid",
  614. color: "#DDE1EE", //x线的颜色
  615. width: "1", //坐标线的宽度
  616. },
  617. },
  618. },
  619. {
  620. type: "category",
  621. data: timeDate[1],
  622. axisLabel: {
  623. //重点在这一块,其余可以忽略
  624. textStyle: {
  625. color: "#212121", //更改坐标轴文字颜色
  626. },
  627. },
  628. axisLine: {
  629. lineStyle: {
  630. type: "solid",
  631. color: "#DDE1EE", //x线的颜色
  632. width: "1", //坐标线的宽度
  633. },
  634. },
  635. },
  636. ],
  637. yAxis: {
  638. type: "value",
  639. splitNumber: 4,
  640. axisLabel: {
  641. //重点在这一块,其余可以忽略
  642. textStyle: {
  643. color: "#212121", //更改坐标轴文字颜色
  644. },
  645. },
  646. axisLine: {
  647. lineStyle: {
  648. ype: "solid",
  649. color: "#DDE1EE", //x线的颜色
  650. width: "1", //坐标线的宽度
  651. },
  652. },
  653. splitLine: {
  654. lineStyle: {
  655. type: "dashed", // y轴分割线类型
  656. },
  657. },
  658. axisTick: {
  659. //y轴刻度线
  660. show: false,
  661. },
  662. },
  663. series: arr,
  664. };
  665. option && myChart.setOption(option);
  666. window.addEventListener("resize", () => {
  667. myChart.resize();
  668. });
  669. },
  670. // 柱状图
  671. createdBar(data) {
  672. let chartDom = document.getElementById(data.id);
  673. let myChart = echarts.init(chartDom);
  674. myChart.clear();
  675. let option = {
  676. tooltip: {
  677. trigger: "axis",
  678. axisPointer: {
  679. type: "shadow",
  680. },
  681. formatter: (e) => {
  682. let obj = e[0];
  683. return `${obj.name}<br/>${obj.marker}转写时长:${obj.value}`;
  684. },
  685. },
  686. grid: {
  687. left: "3%",
  688. right: "4%",
  689. bottom: "3%",
  690. containLabel: true,
  691. },
  692. legend: {
  693. data: data.xAxis,
  694. top: "10",
  695. icon: "roundRect",
  696. },
  697. xAxis: {
  698. type: "category",
  699. data: data.xAxis,
  700. },
  701. yAxis: {
  702. type: "value",
  703. name: "单位(小时)",
  704. nameTextStyle: {
  705. color: "#aaa",
  706. nameLocation: "start",
  707. },
  708. },
  709. series: {
  710. data: data.yAxis,
  711. type: "bar",
  712. },
  713. };
  714. option && myChart.setOption(option);
  715. },
  716. },
  717. };
  718. </script>
  719. <style lang="scss" scoped>
  720. .pages {
  721. .app-top {
  722. margin: 0 auto;
  723. width: 98%;
  724. background: #ffffff;
  725. box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04);
  726. border-radius: 4px;
  727. padding-top: 15px;
  728. padding-bottom: 15px;
  729. .app-titel {
  730. width: 100%;
  731. display: flex;
  732. align-items: center;
  733. .div-lab {
  734. padding: 0 0 0 20px;
  735. display: flex;
  736. align-items: center;
  737. }
  738. .titel-text {
  739. font-size: 16px;
  740. color: #32363d;
  741. }
  742. .toptimeqhuan {
  743. width: 190px;
  744. height: 32px;
  745. background: #ffffff;
  746. border-radius: 4px;
  747. border: 1px solid #e0e0e0;
  748. display: flex;
  749. align-items: center;
  750. overflow: hidden;
  751. margin-left: 20px;
  752. cursor: pointer;
  753. }
  754. .toptimeqhuan div {
  755. flex: 1;
  756. text-align: center;
  757. line-height: 32px;
  758. font-size: 14px;
  759. }
  760. }
  761. }
  762. .app-box-er {
  763. margin: 0 auto;
  764. width: 98%;
  765. background: #ffffff;
  766. box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.04);
  767. border-radius: 4px;
  768. margin-top: 15px;
  769. padding: 15px;
  770. .title {
  771. display: flex;
  772. justify-content: space-between;
  773. .lefts {
  774. font-weight: bold;
  775. line-height: 40px;
  776. }
  777. }
  778. .tabcard {
  779. display: grid;
  780. grid-template-columns: repeat(6, 16%);
  781. grid-column-gap: 12px;
  782. grid-row-gap: 18px;
  783. /deep/ .el-card__body {
  784. padding: 8px;
  785. cursor: pointer;
  786. }
  787. .text1 {
  788. height: 16px;
  789. font-size: 16px;
  790. font-weight: 400;
  791. line-height: 16px;
  792. text-indent: 20px;
  793. margin-top: 10px;
  794. color: #666666;
  795. display: flex;
  796. align-items: center;
  797. }
  798. .text2 {
  799. height: 32px;
  800. font-size: 32px;
  801. font-weight: normal;
  802. line-height: 32px;
  803. text-indent: 20px;
  804. margin-top: 10px;
  805. }
  806. .text3 {
  807. font-size: 14px;
  808. margin: 10px 0;
  809. width: 100%;
  810. text-indent: 20px;
  811. display: flex;
  812. align-items: center;
  813. .textUp {
  814. font-size: 14px;
  815. display: flex;
  816. font-weight: 600;
  817. color: rgba(231, 72, 60, 1);
  818. background: rgba(253, 240, 239, 1);
  819. align-items: center;
  820. padding: 3px 12px 3px 0;
  821. border-radius: 3px;
  822. margin-left: 8px;
  823. .up {
  824. font-size: 14px;
  825. display: block;
  826. width: 20px;
  827. height: 15px;
  828. background: url("../../../public/img/indexIcon/indexCardUp.png")
  829. no-repeat;
  830. background-size: 100%;
  831. margin-left: 8px;
  832. }
  833. }
  834. .textDown {
  835. font-size: 14px;
  836. display: flex;
  837. font-weight: 600;
  838. color: rgba(7, 183, 157, 1);
  839. background: rgba(235, 250, 246, 1);
  840. align-items: center;
  841. padding: 3px 12px 3px 0;
  842. border-radius: 3px;
  843. margin-left: 8px;
  844. .down {
  845. display: block;
  846. width: 20px;
  847. height: 15px;
  848. background: url("../../../public/img/indexIcon/indexCardDown.png")
  849. no-repeat;
  850. background-size: 100%;
  851. margin-left: 8px;
  852. }
  853. }
  854. }
  855. .tophovese {
  856. border: 1px solid #2671e2 !important;
  857. background: rgba(38, 113, 226, 0.04);
  858. color: #666 !important;
  859. }
  860. }
  861. .tophovese {
  862. color: #2671e2 !important;
  863. }
  864. }
  865. .barBox {
  866. margin: 20px auto 0;
  867. width: 98%;
  868. height: 500px;
  869. display: grid;
  870. grid-template-columns: repeat(2, 1fr);
  871. grid-gap: 1%;
  872. .item {
  873. display: flex;
  874. flex-direction: column;
  875. background: #fff;
  876. .title {
  877. padding: 10px 20px;
  878. display: flex;
  879. justify-content: space-between;
  880. align-content: center;
  881. flex-shrink: 0;
  882. p {
  883. font-weight: bold;
  884. }
  885. }
  886. .bar {
  887. padding: 0 10px;
  888. flex-grow: 1;
  889. }
  890. }
  891. }
  892. #main {
  893. width: 100%;
  894. height: 380px;
  895. }
  896. }
  897. .z-title {
  898. width: 100%;
  899. display: flex;
  900. justify-content: space-between;
  901. align-items: center;
  902. }
  903. </style>