generalSituation.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898
  1. <template>
  2. <div class="pp">
  3. <!-- <img style="width:90%;" src="../../assets/report/home2.png" /> -->
  4. <div class="general_situation">
  5. <div class="number_people">
  6. <div class="number_people_top">人数统计</div>
  7. <div class="number_people_yuan">
  8. <div class="out">
  9. <span :title="userInfo.orgName" class="yuan_name">{{
  10. userInfo.orgName
  11. }}</span>
  12. <span class="yuan_people">{{ peopleData["总人数"] }}人</span>
  13. </div>
  14. <!-- <div class="computer">
  15. <div v-for="(item, key) in peopleData" :key="key">
  16. <div class="computer_detail" v-if="key != '总人数'">
  17. {{ key }}:{{ item }}人
  18. </div>
  19. </div>
  20. </div> -->
  21. </div>
  22. </div>
  23. <div class="plan">
  24. <div class="plan_inner">
  25. <span class="plan_top">近期测试</span>
  26. <div class="table_header">
  27. <div class="detail">计划名称</div>
  28. <div class="detail">创建时间</div>
  29. <div class="detail">结束时间</div>
  30. <div class="detail">状态</div>
  31. </div>
  32. <div class="table_a">
  33. <div v-if="tableData.length == 0">
  34. <div style="text-align: center; margin-top: 10px">暂无数据</div>
  35. </div>
  36. <div v-else>
  37. <div
  38. class="table_body"
  39. v-for="(item, index) in tableData"
  40. :key="item.id"
  41. :style="{ backgroundColor: index % 2 == 0 ? '#ffffff' : '#F8F8F8' }"
  42. >
  43. <!-- <div :style="{backgroundColor:index ==0?'':'s'}">
  44. </div> -->
  45. <div class="detail" :title="item.planName">{{ item.planName }}</div>
  46. <div class="detail">{{ item.createTime }}</div>
  47. <div class="detail">{{ item.planEndTime }}</div>
  48. <!-- item.planStatus -->
  49. <div class="detail">
  50. <!-- {{ planStatusFun(item) }} -->
  51. <div
  52. style="display: flex; justify-content: center; align-items: center"
  53. v-if="item.planStatus == '3'"
  54. >
  55. <img
  56. style="width: 16px"
  57. src="../../assets/img/home/isCom.png"
  58. alt=""
  59. />&nbsp;&nbsp;
  60. <div style="color: #333333">已完成</div>
  61. </div>
  62. <div
  63. style="display: flex; justify-content: center; align-items: center"
  64. v-if="item.planStatus == '2'"
  65. >
  66. <img
  67. style="width: 16px"
  68. src="../../assets/img/home/isRun.png"
  69. alt=""
  70. />&nbsp;&nbsp;
  71. <div style="color: #f6cb00">进行中</div>
  72. </div>
  73. <div
  74. style="display: flex; justify-content: center; align-items: center"
  75. v-if="item.planStatus == '1'"
  76. >
  77. <img
  78. style="width: 16px"
  79. src="../../assets/img/home/isNo.png"
  80. alt=""
  81. />&nbsp;&nbsp;
  82. <div style="color: #d52121">未开始</div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. </div>
  90. </div>
  91. <div class="recently">
  92. <!-- <div class="recently_bottom_font">
  93. 最近测试结果: {{ planData.planName }} &nbsp;&nbsp;&nbsp;&nbsp;<span
  94. style="cursor: pointer; color: #00bf78"
  95. @click="queryDetail"
  96. >查看详情</span
  97. >
  98. </div> -->
  99. <div class="block_left">
  100. <div class="block_ren">
  101. <div class="re">最近测评结果</div>
  102. <div class="detail">
  103. <img
  104. @click="queryDetail"
  105. style="width: 120px; cursor: pointer"
  106. src="../../assets//img/home/detail.png"
  107. alt=""
  108. />
  109. </div>
  110. </div>
  111. <div style="width: 100%">
  112. <div class="block_table">
  113. <div class="block_detail">计划名称</div>
  114. <div class="block_detail">测试人数</div>
  115. <div class="block_detail">测试时间</div>
  116. </div>
  117. <div class="block_body">
  118. <div
  119. v-if="planData.hasOwnProperty('planName')"
  120. style="display: flex; padding-left: 20px; padding-right: 20px;flex:1"
  121. >
  122. <!-- <div style='width:20px'></div> -->
  123. <div class="block_detail" >
  124. <!-- {{ planData.planName }} -->
  125. <span class="plan_dp" :title="planData.planName"> {{ planData.planName }}</span>
  126. </div>
  127. <div class="block_detail" >
  128. <span class="plan_dp" :title="planData.userNum"> {{ planData.userNum }}</span>
  129. </div>
  130. <div class="block_detail" >
  131. <span class="plan_dp" :title="planData.createTime"> {{ planData.createTime }}</span>
  132. </div>
  133. </div>
  134. <div v-else style="width: 100%; text-align: center; margin-top: 10px">
  135. <div>暂无数据</div>
  136. </div>
  137. </div>
  138. </div>
  139. <div
  140. v-if="planData.hasOwnProperty('planName')"
  141. class="echarts_style"
  142. ref="echarts_zhu"
  143. ></div>
  144. <div
  145. v-else
  146. style="
  147. display: flex;
  148. align-items: center;
  149. justify-content: center;
  150. height: 100%;
  151. "
  152. >
  153. <span style="text-align: center">暂无数据</span>
  154. </div>
  155. </div>
  156. <div class="block_right">
  157. <div class="block_avg">
  158. 各个专业维度平均分
  159. <el-select v-model="profession" placeholder="请选择" @change="professionChange">
  160. <el-option
  161. v-for="item in professionOptions"
  162. :key="item.value"
  163. :label="item.label"
  164. :value="item.value"
  165. >
  166. </el-option>
  167. </el-select>
  168. </div>
  169. <div v-if="profession != ''" class="block_lei" ref="echarts_lei"></div>
  170. <div
  171. v-else
  172. style="
  173. display: flex;
  174. justify-content: center;
  175. align-items: center;
  176. height: 100%;
  177. "
  178. >
  179. 暂无数据
  180. </div>
  181. </div>
  182. </div>
  183. <PlanReport ref="register" />
  184. </div>
  185. </template>
  186. <script>
  187. import { oSessionStorage } from "../../utils/utils";
  188. import * as echarts from "echarts";
  189. import PieChart from "@/components/PieChart";
  190. import PlanReport from "@/components/PlanReport";
  191. export default {
  192. components: {
  193. PieChart,
  194. PlanReport,
  195. },
  196. data() {
  197. return {
  198. tableData: [],
  199. pageSize: 10,
  200. pageNum: 1,
  201. userInfo: {},
  202. echarts_zhu: "",
  203. option: {},
  204. echarts_lei: "",
  205. option_lei: {},
  206. //获取总人数字段
  207. //返回的总人数字段
  208. peopleData: {},
  209. //返回的最新的计划字段
  210. planData: {},
  211. planId: "",
  212. //组织下已选的专业
  213. profession: "",
  214. //组织下专业
  215. professionOptions: [],
  216. //各个维度平均分的数组
  217. avgData: [],
  218. options1: [],
  219. options2: [],
  220. options3: [],
  221. options4: [],
  222. options5: [],
  223. options6: [],
  224. abnormalNum: 0,
  225. };
  226. },
  227. mounted() {
  228. this.userInfo = JSON.parse(oSessionStorage.getItem("userInfo"));
  229. //查询最新人数统计
  230. this.queryAllPeople();
  231. //查询最新计划
  232. this.findNewPlan();
  233. //查询最近计划
  234. this.searchList();
  235. this.option = {
  236. title: {
  237. text: "",
  238. },
  239. tooltip: {
  240. trigger: "axis",
  241. axisPointer: {
  242. type: "shadow",
  243. },
  244. // formatter: function (arg) {
  245. // console.log("arg");
  246. // console.log(arg);
  247. // return "我就是提示的内容";
  248. // },
  249. },
  250. legend: {},
  251. grid: {
  252. left: "3%",
  253. right: "4%",
  254. bottom: "3%",
  255. containLabel: true,
  256. },
  257. xAxis: {
  258. type: "category",
  259. data: [],
  260. // axisLabel: {
  261. // width: 40, //设置内容宽度
  262. // // overflow:'break',
  263. // overflow: "truncate",
  264. // },
  265. // axisLabel: {
  266. // formatter: function (params) {
  267. // return "中等分值";
  268. // },
  269. // },
  270. },
  271. dataZoom: {
  272. type: "inside", //放大缩小x轴数值
  273. },
  274. yAxis: {
  275. max: 100,
  276. type: "value",
  277. boundaryGap: [0, 0.01],
  278. minInterval: 1,
  279. },
  280. series: [
  281. {
  282. type: "bar",
  283. data: [],
  284. barWidth: "15", //修改柱状图的宽度
  285. itemStyle: {
  286. color: new echarts.graphic.LinearGradient(
  287. //前四个参数用于配置渐变色的起止位置,这四个参数依次对应 右下左上 四个方位。也就是从右边开始顺时针方向。
  288. //通过修改前4个参数,可以实现不同的渐变方向
  289. /*第五个参数则是一个数组,用于配置颜色的渐变过程。
  290. 每项为一个对象,包含offset和color两个参数
  291. */
  292. 0,
  293. 0,
  294. 0,
  295. 1,
  296. [
  297. {
  298. //代表渐变色从正上方开始
  299. offset: 0, //offset范围是0~1,用于表示位置,0是指0%处的颜色
  300. color: "#644BFD",
  301. }, //柱图渐变色
  302. {
  303. offset: 1, //指100%处的颜色
  304. color: "#00F6E3",
  305. },
  306. ]
  307. ),
  308. borderWidth: 2,
  309. // borderColor: "#2EE053",
  310. barBorderRadius: [10, 10, 10, 10], //修改柱状图圆角
  311. },
  312. label: {
  313. show: true,
  314. position: "top",
  315. color: "#006FFF",
  316. formatter: function (params) {
  317. return params.value + "%";
  318. },
  319. },
  320. },
  321. ],
  322. };
  323. // echarts.init(this.echarts_zhu).setOption(this.option);
  324. this.option_lei = {
  325. radar: {
  326. // shape: 'circle',
  327. indicator: [
  328. { name: "Sales", max: 100 },
  329. { name: "Administration", max: 100 },
  330. { name: "Information Technology", max: 100 },
  331. { name: "Customer Support", max: 100 },
  332. { name: "Development", max: 100 },
  333. { name: "Marketing", max: 100 },
  334. ],
  335. },
  336. // label:{
  337. // show:true,
  338. // textStyle:{
  339. // color:'#000000'
  340. // }
  341. // },
  342. name: {
  343. //修改indicator文字的颜色
  344. textStyle: {
  345. color: "#000000",
  346. },
  347. },
  348. axisLine: {
  349. lineStyle: {
  350. color: "#000000",
  351. },
  352. },
  353. series: [
  354. {
  355. name: "",
  356. type: "radar",
  357. data: [
  358. {
  359. value: [20, 30, 40, 50, 60, 70],
  360. name: "",
  361. itemStyle: {
  362. //该数值区域样式设置
  363. //边框及原点颜色
  364. normal: {
  365. color: "#FF1E00", //背景颜色,还需设置areaStyle
  366. lineStyle: {
  367. color: "rgba(255,225,0,.3)", //边框颜色
  368. },
  369. },
  370. },
  371. // label: {
  372. // //显示value中具体的数值
  373. // normal: {
  374. // show: true,
  375. // textStyle: {
  376. // //更改数值样式
  377. // color: "orange",
  378. // },
  379. // },
  380. // },
  381. areaStyle: {
  382. //设置区域背景颜色透明度
  383. normal: {
  384. width: 1,
  385. opacity: 0.3,
  386. },
  387. },
  388. },
  389. ],
  390. },
  391. ],
  392. };
  393. // this.getOrg();
  394. },
  395. methods: {
  396. queryDetail() {
  397. console.log(this.planData);
  398. this.$refs.register.open(this.planData);
  399. },
  400. //根据组织编号查询总人数
  401. queryAllPeople() {
  402. let url = `/user/countUserByOrgNo?orgNo=${this.userInfo.orgNo}`;
  403. this.$http.get(url, {}, (res) => {
  404. if (res && res.code == 200) {
  405. this.peopleData = res.data;
  406. // this.tableData = res.data.content;
  407. // this.total = res.data.totalElements;
  408. } else {
  409. // this.$toast.fail(res.msg);
  410. this.$message.error(res.msg);
  411. }
  412. });
  413. },
  414. searchList() {
  415. let url = `/plan/findListByPage?pageSize=${this.pageSize}&pageNum=${this.pageNum}&orgNo=${this.userInfo.orgNo}`;
  416. this.$http.get(url, {}, (res) => {
  417. if (res && res.code == 200) {
  418. this.tableData = res.data.content;
  419. debugger;
  420. // this.total = res.data.totalElements;
  421. } else {
  422. // this.$toast.fail(res.msg);
  423. this.$message.error(res.msg);
  424. }
  425. });
  426. },
  427. //查询最新结束的计划
  428. findNewPlan() {
  429. let url = `/plan/findNewCompletedPlan?orgNo=${this.userInfo.orgNo}`;
  430. this.$http.get(url, {}, (res) => {
  431. if (res && res.code == 200) {
  432. if (res.data != null) {
  433. this.planId = res.data.id;
  434. let list = Object.entries(res.data);
  435. //开始过滤
  436. let list1 = list.filter(([key, val]) => {
  437. return (
  438. key == "planName" ||
  439. key == "planOrgName" ||
  440. key == "createTime" ||
  441. key == "userNum" ||
  442. key == "id"
  443. );
  444. });
  445. let list2 = Object.fromEntries(list1);
  446. this.planData = list2;
  447. //调用各个专业不同总分人数
  448. // this.isScore();
  449. // this.getPlanDimNun();
  450. this.isFin();
  451. }
  452. } else {
  453. // this.$toast.fail(res.msg);
  454. this.$message.error(res.msg);
  455. }
  456. });
  457. },
  458. //查询统计端的--心理健康异常的人员
  459. isAbnormal() {
  460. //调用接口返回信息
  461. let url = `/planUser/countCompletedUserHighRisk?planId=${this.planId}`;
  462. this.$http.get(url, {}, (res) => {
  463. if (res.code == 200) {
  464. // this.unComplete = res.data[0];
  465. // this.completeNum = res.data[1];
  466. this.abnormalNum = res.data;
  467. this.getPlanDimNun();
  468. }
  469. });
  470. },
  471. //管理端统计完成情况
  472. isFin() {
  473. //调用接口返回信息
  474. let url = `/plan/countComplete?planId=${this.planId}`;
  475. this.$http.get(url, {}, (res) => {
  476. if (res.code == 200) {
  477. this.unComplete = res.data[0];
  478. this.completeNum = res.data[1];
  479. this.isAbnormal();
  480. }
  481. });
  482. },
  483. //查询各个维度占比
  484. getPlanDimNun() {
  485. this.$http.get(
  486. `userRecordScore/countNumByPlanDim?planId=${this.planId}`,
  487. {},
  488. (res) => {
  489. let dimensionList = res.data;
  490. let nameList = [];
  491. nameList.push("心理健康");
  492. nameList.push("抑郁");
  493. nameList.push("压力");
  494. nameList.push("焦虑");
  495. nameList.push("精神障碍");
  496. let scoreList = [];
  497. scoreList.push(
  498. parseInt(((this.completeNum - this.abnormalNum) / this.completeNum) * 100)
  499. );
  500. scoreList.push((parseInt(dimensionList[1]["抑郁"]) / this.completeNum) * 100);
  501. scoreList.push((parseInt(dimensionList[2]["压力"]) / this.completeNum) * 100);
  502. scoreList.push((parseInt(dimensionList[0]["焦虑"]) / this.completeNum) * 100);
  503. scoreList.push(
  504. (parseInt(dimensionList[3]["精神障碍"]) / this.completeNum) * 100
  505. );
  506. this.echarts_zhu = this.$refs.echarts_zhu;
  507. this.option.xAxis.data = nameList;
  508. this.option.series[0].data = scoreList;
  509. debugger;
  510. let myChart1 = echarts.init(this.echarts_zhu);
  511. myChart1.setOption(this.option);
  512. }
  513. );
  514. },
  515. //各个专业不同总分人数
  516. isScore() {
  517. let url = `/plan/countTotalNumber?planId=${this.planId}`;
  518. this.$http.get(url, {}, (res) => {
  519. if (res.code == 200) {
  520. let nameList = [];
  521. let scoreList = [];
  522. for (const item in res.data) {
  523. //
  524. nameList.push(item);
  525. scoreList.push(res.data[item]);
  526. }
  527. // nameList= ["中等", "高等", "低等", "多喝", "大"]
  528. // console.log(nameList)
  529. this.echarts_zhu = this.$refs.echarts_zhu;
  530. this.option.xAxis.data = nameList;
  531. this.option.series[0].data = scoreList;
  532. debugger;
  533. let myChart1 = echarts.init(this.echarts_zhu);
  534. myChart1.setOption(this.option);
  535. }
  536. });
  537. },
  538. //获取子组织
  539. getOrg() {
  540. let url = `/org/findChildOrg?orgNo=${this.userInfo.orgNo}`;
  541. this.$http.get(url, {}, (res) => {
  542. if (res && res.code == 200) {
  543. if (res.data.length > 0) {
  544. let list = [];
  545. for (let i = 0; i < res.data.length; i++) {
  546. let obj = { value: "", label: "" };
  547. obj.value = res.data[i].orgNo;
  548. obj.label = res.data[i].orgName;
  549. list.push(obj);
  550. }
  551. this.professionOptions = list;
  552. this.profession = list[0].value;
  553. //然后根据选择的这个选项、、查询具体数据
  554. this.queryDetailScore(list[0].value);
  555. }
  556. } else {
  557. // this.$toast.fail(res.msg);
  558. this.$message.error(res.msg);
  559. }
  560. });
  561. },
  562. //查看各个组织下各个维度的平均得分
  563. queryDetailScore(val) {
  564. let url = `/userRecordScore/findAvgScoreByOrgNo?orgNo=${val}`;
  565. this.$http.get(url, {}, (res) => {
  566. if (res.code == 200) {
  567. this.avgData = res.data;
  568. let nameList = [];
  569. let scoreList = [];
  570. //设置总共维度
  571. for (let i = 0; i < res.data.length; i++) {
  572. let obj = { name: res.data[i].name, max: 100, color: "#000000" };
  573. nameList.push(obj);
  574. scoreList.push(res.data[i].score);
  575. }
  576. //测试计划---
  577. //修改option
  578. this.echarts_lei = this.$refs.echarts_lei;
  579. this.option_lei.radar.indicator = nameList;
  580. this.option_lei.series[0].data[0].value = scoreList;
  581. echarts.init(this.echarts_lei).setOption(this.option_lei);
  582. }
  583. });
  584. },
  585. //选择的专业改变后接着调用
  586. professionChange(val) {
  587. this.queryDetailScore(val);
  588. },
  589. //状态---
  590. planStatusFun(val) {
  591. let planStatus = val.planStatus;
  592. if (planStatus == "1") {
  593. return "未开始";
  594. } else if (planStatus == "2") {
  595. return "进行中";
  596. } else if (planStatus == "3") {
  597. return "已完成";
  598. } else {
  599. return val.planStatus;
  600. }
  601. },
  602. },
  603. };
  604. </script>
  605. <style lang="less" scoped>
  606. .computer::-webkit-scrollbar {
  607. width: 6px;
  608. }
  609. .computer::-webkit-scrollbar-track {
  610. background: rgb(239, 239, 239);
  611. border-radius: 2px;
  612. }
  613. .computer::-webkit-scrollbar-thumb {
  614. background: #40a0ff49;
  615. border-radius: 10px;
  616. }
  617. .computer::-webkit-scrollbar-thumb:hover {
  618. background: #40a0ff;
  619. }
  620. .table_a::-webkit-scrollbar {
  621. width: 6px;
  622. }
  623. .table_a::-webkit-scrollbar-track {
  624. background: rgb(239, 239, 239);
  625. border-radius: 2px;
  626. }
  627. .table_a::-webkit-scrollbar-thumb {
  628. background: #afafaf49;
  629. border-radius: 10px;
  630. }
  631. .table_a::-webkit-scrollbar-thumb:hover {
  632. background: #b6b6b6;
  633. }
  634. .pp {
  635. display: flex;
  636. flex-direction: column;
  637. /* justify-content: center; */
  638. height: 100%;
  639. width: 100%;
  640. background-color: #f7f7f7;
  641. // background-color: aqua;
  642. .general_situation {
  643. height: 260px;
  644. width: 100%;
  645. display: flex;
  646. min-width: 980px;
  647. .number_people {
  648. background: url(../../assets/img/home/bg.png) no-repeat;
  649. background-size: cover;
  650. border-radius: 20px;
  651. flex: 5;
  652. // background-color: #48d68e;
  653. display: flex;
  654. flex-direction: column;
  655. .number_people_top {
  656. margin-top: 20px;
  657. margin-left: 20px;
  658. color: #ffffff;
  659. font-size: 24px;
  660. letter-spacing: 3px;
  661. margin-bottom: 20px;
  662. font-weight: 700;
  663. }
  664. .number_people_yuan {
  665. display: flex;
  666. color: #ffffff;
  667. .out {
  668. border-radius: 20px;
  669. margin-left: 20px;
  670. // background-color: #7fe2b0;
  671. display: flex;
  672. flex-direction: column;
  673. .yuan_name {
  674. overflow: hidden;
  675. text-overflow: ellipsis;
  676. white-space: nowrap;
  677. margin-left: 20px;
  678. margin-top: 20px;
  679. color: #ffffff;
  680. letter-spacing: 3px;
  681. font-size: 32px;
  682. }
  683. .yuan_people {
  684. margin-left: 20px;
  685. margin-top: 20px;
  686. color: #ffffff;
  687. font-size: 60px;
  688. letter-spacing: 3px;
  689. }
  690. }
  691. .computer {
  692. max-height: 140px;
  693. // height: 140px;
  694. overflow-y: auto;
  695. flex: 1;
  696. display: flex;
  697. width: 100%;
  698. flex-wrap: wrap;
  699. justify-content: start;
  700. .computer_detail {
  701. width: 140px;
  702. // height: 20px;
  703. padding: 10px;
  704. }
  705. }
  706. }
  707. }
  708. .plan {
  709. display: flex;
  710. // height:30%;
  711. flex: 10;
  712. .plan_inner {
  713. padding: 20px;
  714. border-radius: 20px;
  715. margin-left: 20px;
  716. background-color: #ffffff;
  717. display: flex;
  718. width: 100%;
  719. flex-direction: column;
  720. .plan_top {
  721. font-size: 24px;
  722. letter-spacing: 3px;
  723. font-weight: 700;
  724. color: #000000;
  725. margin-bottom: 20px;
  726. }
  727. //表头
  728. .table_header {
  729. display: flex;
  730. // justify-content: space-around;
  731. background-color: #00bf78;
  732. border-radius: 20px;
  733. line-height: 40px;
  734. font-weight: 700;
  735. font-size: 18px;
  736. letter-spacing: 3px;
  737. color: #ffffff;
  738. .detail {
  739. flex: 1;
  740. text-align: center;
  741. }
  742. }
  743. .table_a {
  744. overflow-y: auto;
  745. .table_body {
  746. display: flex;
  747. // justify-content: space-around;
  748. line-height: 40px;
  749. .detail {
  750. display: inline-block;
  751. white-space: nowrap;
  752. overflow: hidden;
  753. text-overflow: ellipsis;
  754. width: 100%;
  755. flex: 1;
  756. text-align: center;
  757. }
  758. }
  759. }
  760. }
  761. }
  762. }
  763. .recently {
  764. width: 100%;
  765. background-color: #f7f7f7;
  766. height: calc(100% - 260px);
  767. display: flex;
  768. flex-direction: row;
  769. align-items: center;
  770. margin-top: 20px;
  771. .block_left {
  772. // box-sizing: border-box;
  773. // padding:10px;
  774. border-radius: 20px;
  775. display: flex;
  776. // padding-left: 10px;
  777. flex-direction: column;
  778. // padding: 10px;
  779. flex: 5;
  780. background-color: #ffffff;
  781. height: 100%;
  782. width: 100%;
  783. align-items: center;
  784. // background-color: #ffffff;
  785. .block_ren {
  786. padding-top: 10px;
  787. // padding-right: 20px;
  788. width: 100%;
  789. display: flex;
  790. justify-content: space-between;
  791. align-items: center;
  792. .re {
  793. letter-spacing: 3px;
  794. padding: 0 20px;
  795. color: #222222;
  796. font-weight: 700;
  797. font-size: 24px;
  798. }
  799. .detail {
  800. padding: 0 20px;
  801. }
  802. }
  803. .chart_wrap {
  804. flex: 1;
  805. // height: 450px;
  806. }
  807. .block_table {
  808. margin-top: 10px;
  809. margin-left: 20px;
  810. margin-right: 20px;
  811. background-color: #f8f8f8;
  812. border-radius: 20px;
  813. display: flex;
  814. .block_detail {
  815. font-weight: 700;
  816. padding: 10px;
  817. flex: 1;
  818. display: flex;
  819. justify-content: center;
  820. }
  821. }
  822. .block_body {
  823. width: 100%;
  824. display: flex;
  825. .block_detail {
  826. background-color: #ffffff;
  827. text-align: center;
  828. line-height: 36px;
  829. display: flex;
  830. flex: 1;
  831. width: 100%;
  832. overflow: hidden;
  833. .plan_dp{
  834. text-align: center;
  835. // flex: 1;
  836. display: inline-block;
  837. white-space: nowrap;
  838. // width: 100%;
  839. overflow: hidden;
  840. text-overflow: ellipsis;
  841. }
  842. }
  843. }
  844. .profession {
  845. font-weight: 700;
  846. }
  847. .echarts_style {
  848. width: 100%;
  849. flex: 1;
  850. // background-color: #000000;
  851. }
  852. }
  853. .block_right {
  854. box-sizing: border-box;
  855. flex: 10;
  856. // background-color: #d32d2d;
  857. height: 100%;
  858. display: flex;
  859. flex-direction: column;
  860. background-color: #f7f7f7;
  861. .block_avg {
  862. margin-left: 20px;
  863. font-weight: 700;
  864. }
  865. .block_lei {
  866. flex: 1;
  867. // background-color: #000000;
  868. margin-left: 20px;
  869. }
  870. }
  871. }
  872. }
  873. </style>