analysis.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  1. <template>
  2. <view>
  3. <cu-custom bgColor="bg-blue" :isBack="true" backUrl="/pages/index/index">
  4. <block slot="content">数据分析</block>
  5. </cu-custom>
  6. <view class="header-line-2">
  7. <!-- <jp-picker v-model="yqid" rangeKey="label" rangeValue="value" :range="parkList"
  8. :onChangeNew="changeYQId" empty="选择园区">
  9. </jp-picker> -->
  10. <picker @change="changeYQId" :value="yqIndex" :range="showYQList">
  11. <view class=" picker action">
  12. <view style="color: #fff;">{{showYQList[yqIndex]}}</view>
  13. </view>
  14. </picker>
  15. </view>
  16. <view class="header-line">
  17. <view @click="changeShow(2)" :class="show == 2 ? 'actClass' : ''">楼宇</view>
  18. <view @click="changeShow(1)" :class="show == 1 ? 'actClass' : ''">统计报表</view>
  19. </view>
  20. <view class="page-box" v-show="show != 1">
  21. <view class="yqshpmfxBox">
  22. <view class="tab-header">
  23. <view class="header-name">楼宇税收排名分析</view>
  24. </view>
  25. <view class="pmfx-box">
  26. <qiun-data-charts type="column" :opts="opts" :chartData="chartData" :ontouch="true" />
  27. </view>
  28. <view class="line-box"></view>
  29. <view class="ssbox">
  30. <view class="ss-left-box">
  31. <view class="num">{{ssInfo.yearTax}}<text class="unit">万元</text></view>
  32. <view style="height: 20rpx;"></view>
  33. <view class="unit">税收总额</view>
  34. </view>
  35. <view class="ss-right-box">
  36. <view class="right-text-box">
  37. <view class="num">{{ssInfo.monthrTax}}<text class="unit">万元</text></view>
  38. <view style="height: 20rpx;"></view>
  39. <view class="unit">本月税收(占比)</view>
  40. </view>
  41. <view class="pie-box">
  42. <qiun-data-charts type="arcbar" :opts="opts2" :chartData="chartData2" />
  43. </view>
  44. </view>
  45. </view>
  46. </view>
  47. <view class="page-center-box">
  48. <view class="center-left-box">
  49. <view class="center-title">楼宇入住率排名分析</view>
  50. <view class="table-line" v-for="(item, index) in rzList" :key="index">
  51. <view class="index">{{index + 1 }}</view>
  52. <view class="name">{{item.name}}</view>
  53. <view class="percent">{{item.value}}%</view>
  54. </view>
  55. </view>
  56. <view class="center-right-box">
  57. <view class="center-title">楼宇企业数量类型分析</view>
  58. <view class="right-box-in">
  59. <qiun-data-charts type="pie" :opts="opts3" :chartData="chartData3" />
  60. </view>
  61. </view>
  62. </view>
  63. <view class="yqqsBox">
  64. <view class="tab-header">
  65. <view class="header-name">楼宇税收趋势分析</view>
  66. <jp-picker v-model="ssqsLYid" rangeKey="label" rangeValue="value" :range="LYList"
  67. :onChangeNew="changeSSLYId">
  68. </jp-picker>
  69. </view>
  70. <view class="pmfx-box">
  71. <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataSSLY" />
  72. </view>
  73. <view style="height: 20rpx;"></view>
  74. </view>
  75. <view class="yqqsBox">
  76. <view class="tab-header">
  77. <view class="header-name">楼宇新增企业月增长量</view>
  78. <jp-picker v-model="yzlLYid" rangeKey="label" rangeValue="value" :range="LYList"
  79. :onChangeNew="changeData">
  80. </jp-picker>
  81. </view>
  82. <view class="pmfx-box">
  83. <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataLLXZL" />
  84. </view>
  85. <view style="height: 20rpx;"></view>
  86. </view>
  87. </view>
  88. <view v-show="show == 1">
  89. <view class="page-box">
  90. <view class="yqqsBox">
  91. <view class="tab-header">
  92. <view class="header-name">园区企业总数统计分析</view>
  93. </view>
  94. <view class="pmfx-box">
  95. <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataYQQYZS" />
  96. </view>
  97. <view style="height: 20rpx;"></view>
  98. </view>
  99. </view>
  100. <view class="page-box">
  101. <view class="yqqsBox">
  102. <view class="tab-header">
  103. <view class="header-name">本年度税收额分析</view>
  104. </view>
  105. <view class="pmfx-box">
  106. <qiun-data-charts type="column" :opts="opts" :chartData="BNDSSchartData" :ontouch="true" />
  107. </view>
  108. <view style="height: 20rpx;"></view>
  109. </view>
  110. </view>
  111. <view class="page-box">
  112. <view class="yqqsBox">
  113. <view class="tab-header">
  114. <view class="header-name">本年度销售额分析</view>
  115. </view>
  116. <view class="pmfx-box">
  117. <qiun-data-charts type="column" :opts="opts" :chartData="BNDXSchartData" :ontouch="true" />
  118. </view>
  119. <view style="height: 20rpx;"></view>
  120. </view>
  121. </view>
  122. <view class="page-box">
  123. <view class="yqqsBox">
  124. <view class="tab-header">
  125. <view class="header-name">园区企业参保人数统计分析</view>
  126. </view>
  127. <view class="pmfx-box">
  128. <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataYQSBRS" />
  129. </view>
  130. <view style="height: 20rpx;"></view>
  131. </view>
  132. </view>
  133. <view class="page-box">
  134. <view class="yqqsBox">
  135. <view class="tab-header">
  136. <view class="header-name">人才分析</view>
  137. </view>
  138. <view class="pmfx-box">
  139. <qiun-data-charts type="pie" :opts="optsSS" :chartData="chartDataSBRS" />
  140. </view>
  141. <view style="height: 20rpx;"></view>
  142. </view>
  143. </view>
  144. </view>
  145. </view>
  146. </template>
  147. <script>
  148. import uniFab from '@/components/uni-fab/uni-fab.vue';
  149. import loginService from '@/api/auth/loginService.js'
  150. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  151. import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
  152. export default {
  153. mixins: [MescrollMixin, MescrollMoreItemMixin], // 使用mixin (在main.js注册全局组件)
  154. onShow(option) {
  155. this.$auth.checkLogin()
  156. },
  157. components: {
  158. },
  159. data() {
  160. return {
  161. yqIndex: 0,
  162. show: 2,
  163. parkList: [],
  164. LYList: [],
  165. ssInfo: {},
  166. rzList: [],
  167. ssqsLYid: '',
  168. yzlLYid: '',
  169. yqid: '',
  170. chartData: {},
  171. BNDSSchartData: {},
  172. BNDXSchartData: {},
  173. //您可以通过修改 config-ucharts.js 文件中下标为 ['column'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
  174. opts: {
  175. color: ["#1FD094"],
  176. padding: [15, 15, 0, 5],
  177. touchMoveLimit: 24,
  178. enableScroll: true,
  179. legend: {
  180. show: false
  181. },
  182. xAxis: {
  183. disableGrid: true,
  184. scrollShow: true,
  185. itemCount: 4
  186. },
  187. yAxis: {
  188. data: [{
  189. min: 0
  190. }]
  191. },
  192. extra: {
  193. column: {
  194. type: "group",
  195. width: 30,
  196. activeBgColor: "#000000",
  197. activeBgOpacity: 0.08
  198. }
  199. }
  200. },
  201. chartData2: {},
  202. //您可以通过修改 config-ucharts.js 文件中下标为 ['arcbar'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
  203. opts2: {
  204. color: ["#1890FF"],
  205. title: {
  206. name: '',
  207. fontSize: 0,
  208. },
  209. subtitle: {
  210. name: '',
  211. fontSize: 0,
  212. },
  213. extra: {
  214. arcbar: {
  215. type: "circle",
  216. width: 4,
  217. backgroundColor: "#E9E9E9",
  218. startAngle: 1.5,
  219. endAngle: 0.25,
  220. gap: 2
  221. }
  222. }
  223. },
  224. chartData3: {},
  225. //您可以通过修改 config-ucharts.js 文件中下标为 ['pie'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
  226. opts3: {
  227. color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
  228. "#ea7ccc"
  229. ],
  230. padding: [5, 5, 5, 5],
  231. enableScroll: true,
  232. legend: {
  233. show: false
  234. },
  235. dataLabel: false,
  236. extra: {
  237. pie: {
  238. activeOpacity: 0.5,
  239. activeRadius: 10,
  240. offsetAngle: 0,
  241. labelWidth: 15,
  242. border: true,
  243. borderWidth: 3,
  244. borderColor: "#FFFFFF"
  245. }
  246. }
  247. },
  248. chartData4: {},
  249. chartDataSSLY: {},
  250. chartDataLLXZL: {},
  251. //您可以通过修改 config-ucharts.js 文件中下标为 ['line'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
  252. opts4: {
  253. color: ["#1890FF"],
  254. padding: [15, 10, 30, 15],
  255. enableScroll: false,
  256. legend: {
  257. show: false
  258. },
  259. xAxis: {
  260. disableGrid: true,
  261. rotateLabel: true,
  262. rotateAngle: 45,
  263. },
  264. yAxis: {
  265. gridType: "dash",
  266. dashLength: 2
  267. },
  268. extra: {
  269. line: {
  270. type: "straight",
  271. width: 2,
  272. activeType: "hollow"
  273. }
  274. }
  275. },
  276. chartDataSBRS: {},
  277. chartDataYQQYZS: {},
  278. chartDataYQSBRS: {},
  279. chartDataSSEFX: {},
  280. showYQList: [],
  281. optsSS: {
  282. color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
  283. "#ea7ccc"
  284. ],
  285. padding: [5, 5, 5, 5],
  286. enableScroll: true,
  287. extra: {
  288. pie: {
  289. activeOpacity: 0.5,
  290. activeRadius: 10,
  291. offsetAngle: 0,
  292. labelWidth: 15,
  293. border: false,
  294. borderWidth: 3,
  295. borderColor: "#FFFFFF"
  296. }
  297. }
  298. }
  299. }
  300. },
  301. created() {
  302. this.getParkList()
  303. this.getAllparkList()
  304. },
  305. mounted() {
  306. this.AppFirst()
  307. },
  308. methods: {
  309. changeData() {
  310. this.AppFirstAddNwe()
  311. },
  312. getAllparkList() {
  313. loginService.parkList({
  314. current: 1,
  315. size: 1000000,
  316. }).then(({
  317. data
  318. }) => {
  319. this.parkList = data.records.map((item) => {
  320. return {
  321. label: item.parkName,
  322. value: item.id
  323. }
  324. })
  325. this.showYQList = data.records.map((item) => item.parkName)
  326. this.yqid = this.parkList[0].value
  327. }).catch(e => {
  328. console.log(e)
  329. })
  330. },
  331. changeYQId(e) {
  332. console.log('更改园区id')
  333. console.log(e, '================>e')
  334. this.yqIndex = e.detail.value
  335. this.yqid = this.parkList[this.yqIndex].value
  336. },
  337. changeShow(index) {
  338. this.show = index
  339. if (index == 1) {
  340. this.getStatisticsForPark()
  341. this.getSaleStatisticsForPark()
  342. this.getSaleStatisticsForYear2()
  343. }
  344. },
  345. getSaleStatisticsForYear2() {
  346. loginService
  347. .getSaleStatisticsForYear2({
  348. yqid: this.yqid,
  349. lyid: '',
  350. })
  351. .then(({ data }) => {
  352. let keys = data.map(item => item.building_name);
  353. let values = data.map(item => item.nowYearIncome);
  354. let res = {
  355. categories: keys,
  356. series: [{
  357. name: "税收",
  358. data: values
  359. }]
  360. };
  361. this.BNDSSchartData = JSON.parse(JSON.stringify(res));
  362. let values2 = data.map(item => item.nowYearSale);
  363. let res2 = {
  364. categories: keys,
  365. series: [{
  366. name: "销售",
  367. data: values2
  368. }]
  369. };
  370. this.BNDXSchartData = JSON.parse(JSON.stringify(res2));
  371. });
  372. },
  373. // 楼宇新增企业月增量
  374. AppFirstAddNwe() {
  375. loginService.AppFirstAddNwe({
  376. searchid: this.yzlLYid
  377. }).then(({
  378. data
  379. }) => {
  380. let keys = Object.keys(data[0]);
  381. let values = Object.values(data[0]);
  382. let res4 = {
  383. categories: keys,
  384. series: [{
  385. name: "新增企业数",
  386. data: values
  387. }]
  388. };
  389. this.chartDataLLXZL = JSON.parse(JSON.stringify(res4));
  390. }).catch(e => {
  391. console.log(e)
  392. })
  393. },
  394. changeSSLYId() {
  395. this.AppFirstAddTotle()
  396. },
  397. // 税收
  398. AppFirstAddTotle() {
  399. loginService.AppFirstAddTotle({
  400. searchid: this.ssqsLYid
  401. }).then(({
  402. data
  403. }) => {
  404. let keys = Object.keys(data[0]);
  405. let values = Object.values(data[0]);
  406. let res4 = {
  407. categories: keys,
  408. series: [{
  409. name: "税收",
  410. data: values
  411. }]
  412. };
  413. this.chartDataSSLY = JSON.parse(JSON.stringify(res4));
  414. }).catch(e => {
  415. console.log(e)
  416. })
  417. },
  418. getSaleStatisticsForPark() {
  419. loginService.getSaleStatisticsForPark({
  420. }).then(({
  421. data
  422. }) => {
  423. console.log(data, '===============.data')
  424. let peopelList = [{
  425. name: '博士生',
  426. value: data[0].DoctoralStudent,
  427. },
  428. {
  429. name: '硕士生',
  430. value: data[0].Postgraduate,
  431. },
  432. {
  433. name: '本科生',
  434. value: data[0].Undergraduate,
  435. },
  436. {
  437. name: '本科以下',
  438. value: data[0].BelowUndergraduate,
  439. },
  440. ]
  441. let res2 = {
  442. series: [{
  443. data: peopelList
  444. }]
  445. };
  446. this.chartDataSBRS = JSON.parse(JSON.stringify(res2));
  447. }).catch(e => {
  448. console.log(e)
  449. })
  450. },
  451. getParkList() {
  452. loginService.list({
  453. current: 1,
  454. size: 1000000,
  455. }).then(({
  456. data
  457. }) => {
  458. this.LYList = data.records.map((item) => {
  459. return {
  460. label: item.buildingName,
  461. value: item.id
  462. }
  463. })
  464. this.ssqsLYid = this.LYList[0].value
  465. this.yzlLYid = this.LYList[0].value
  466. this.AppFirstAddTotle()
  467. this.AppFirstAddNwe()
  468. }).catch(e => {
  469. console.log(e)
  470. })
  471. },
  472. AppFirst() {
  473. loginService.AppFirst().then(({
  474. data
  475. }) => {
  476. let lyssList = data[0];
  477. let keys = Object.keys(lyssList);
  478. let values = Object.values(lyssList);
  479. let res = {
  480. categories: keys,
  481. series: [{
  482. name: "税收",
  483. data: values
  484. }]
  485. };
  486. this.chartData = JSON.parse(JSON.stringify(res));
  487. this.ssInfo = data[1]
  488. let res2 = {
  489. series: [{
  490. color: "#2fc25b",
  491. data: Number(this.ssInfo.percentage).toFixed(2)
  492. }]
  493. };
  494. this.chartData2 = JSON.parse(JSON.stringify(res2));
  495. let rzList = data[2];
  496. const rzListNew = [];
  497. for (const key in rzList) {
  498. if (rzList.hasOwnProperty(key)) {
  499. rzListNew.push({
  500. name: key,
  501. value: parseFloat(rzList[key]).toFixed(2)
  502. });
  503. }
  504. }
  505. this.rzList = rzListNew.slice(0, 5)
  506. let lyslList = data[3]
  507. let lyslListNew = []
  508. for (const key in lyslList) {
  509. if (lyslList.hasOwnProperty(key)) {
  510. lyslListNew.push({
  511. 'name': this.$dictUtils.getDictLabel("industrial_type", key, '-'),
  512. 'value': parseFloat(lyslList[key]).toFixed(2) * 100
  513. });
  514. }
  515. }
  516. let res3 = {
  517. series: [{
  518. data: lyslListNew
  519. }]
  520. }
  521. this.chartData3 = JSON.parse(JSON.stringify(res3));
  522. }).catch(e => {
  523. console.log(e)
  524. })
  525. },
  526. getStatisticsForPark() {
  527. loginService.getStatisticsForPark({
  528. }).then(({
  529. data
  530. }) => {
  531. let buildNameArr = data.map(item => item.park_name)
  532. let buildQYZS = data.map(item => item.qycount)
  533. let buildSSZE = data.map(item => item.ssze)
  534. let buildSBRS = data.map(item => item.sbuser)
  535. let res = {
  536. categories: buildNameArr,
  537. series: [{
  538. name: "企业总数",
  539. data: buildQYZS
  540. }]
  541. };
  542. this.chartDataYQQYZS = JSON.parse(JSON.stringify(res));
  543. // chartDataSBRS
  544. let resCB = {
  545. categories: buildNameArr,
  546. series: [{
  547. name: "企业参保人数统计",
  548. data: buildSBRS
  549. }]
  550. };
  551. this.chartDataYQSBRS = JSON.parse(JSON.stringify(resCB));
  552. }).catch(e => {
  553. console.log(e)
  554. })
  555. },
  556. },
  557. }
  558. </script>
  559. <style>
  560. @font-face {
  561. font-family: 'DIN';
  562. /* 自定义字体名称 */
  563. src: url('/static/fonts/DINSchrift.ttf');
  564. /* 字体文件路径 */
  565. }
  566. .header-line {
  567. display: flex;
  568. background: #36A7F3;
  569. font-weight: normal;
  570. font-size: 32rpx;
  571. color: #fff;
  572. justify-content: space-around;
  573. height: 240rpx;
  574. line-height: 80rpx;
  575. }
  576. .header-line-2{
  577. background: #36A7F3;
  578. font-weight: normal;
  579. font-size: 32rpx;
  580. color: #fff !important;
  581. line-height: 40rpx;
  582. padding-left: 40rpx;
  583. }
  584. .text-grey {
  585. color: #fff;
  586. }
  587. .page-box {
  588. position: relative;
  589. top: -160rpx;
  590. }
  591. .yqshpmfxBox {
  592. width: 706rpx;
  593. border-radius: 40rpx;
  594. background: #fff;
  595. margin-left: auto;
  596. margin-right: auto;
  597. box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
  598. }
  599. .actClass {
  600. color: #FAF82F;
  601. }
  602. .yqqsBox {
  603. margin-top: 30rpx;
  604. width: 706rpx;
  605. border-radius: 40rpx;
  606. background: #fff;
  607. margin-left: auto;
  608. margin-right: auto;
  609. box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
  610. }
  611. .tab-header {
  612. display: flex;
  613. justify-content: space-between;
  614. padding-left: 40rpx;
  615. padding-right: 40rpx;
  616. border-bottom: 1rpx solid #D5D4D0;
  617. align-items: center;
  618. }
  619. .header-name {
  620. font-size: 32rpx;
  621. color: #40547E;
  622. line-height: 102rpx;
  623. }
  624. .pmfx-box {
  625. height: 440rpx;
  626. }
  627. .ssfx-box {
  628. height: 650rpx;
  629. }
  630. .line-box {
  631. height: 30rpx;
  632. border-bottom: 1rpx solid #D5D4D0;
  633. }
  634. .ssbox {
  635. display: flex;
  636. }
  637. .ss-left-box {
  638. flex: 1;
  639. display: flex;
  640. flex-direction: column;
  641. align-items: center;
  642. justify-content: center;
  643. height: 156rpx;
  644. border-right: 1rpx solid #D5D4D0;
  645. }
  646. .ss-right-box {
  647. flex: 1;
  648. display: flex;
  649. justify-content: center;
  650. align-items: center;
  651. }
  652. .num {
  653. font-weight: bold;
  654. font-size: 44rpx;
  655. font-family: 'DIN';
  656. color: #070303;
  657. }
  658. .unit {
  659. font-size: 28rpx;
  660. color: #07245A;
  661. opacity: 0.7;
  662. }
  663. .right-text-box {
  664. flex: 1;
  665. }
  666. .pie-box {
  667. height: 156rpx;
  668. width: 110rpx;
  669. }
  670. .page-center-box {
  671. display: flex;
  672. width: 706rpx;
  673. margin-left: auto;
  674. margin-right: auto;
  675. justify-content: space-between;
  676. margin-top: 30rpx;
  677. }
  678. .center-left-box {
  679. width: 344rpx;
  680. border-radius: 40rpx;
  681. border-radius: 40rpx;
  682. padding-left: 20rpx;
  683. padding-right: 20rpx;
  684. background: #fff;
  685. box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
  686. padding-bottom: 30rpx;
  687. }
  688. .center-right-box {
  689. width: 344rpx;
  690. border-radius: 40rpx;
  691. border-radius: 40rpx;
  692. padding-left: 20rpx;
  693. padding-right: 20rpx;
  694. background: #fff;
  695. box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
  696. padding-bottom: 30rpx;
  697. }
  698. .center-title {
  699. font-size: 24rpx;
  700. color: #064875;
  701. line-height: 18px;
  702. opacity: 0.7;
  703. padding-left: 22rpx;
  704. padding-top: 23rpx;
  705. padding-bottom: 23rpx;
  706. }
  707. .table-line {
  708. display: flex;
  709. line-height: 50rpx;
  710. height: 50rpx;
  711. }
  712. .table-line:nth-child(odd) {
  713. background-color: #fff;
  714. }
  715. .table-line:nth-child(even) {
  716. background-color: #F1F6F9;
  717. }
  718. .index {
  719. width: 15%;
  720. text-align: center;
  721. font-size: 28rpx;
  722. color: #122F64;
  723. font-family: 'DIN';
  724. }
  725. .name {
  726. font-size: 26rpx;
  727. color: #242323;
  728. width: 65%;
  729. overflow: hidden;
  730. text-overflow: ellipsis;
  731. white-space: nowrap;
  732. }
  733. .percent {
  734. font-weight: bold;
  735. font-size: 28rpx;
  736. color: #219BED;
  737. font-family: 'DIN';
  738. }
  739. .right-box-in {
  740. height: 220rpx;
  741. }
  742. </style>