generalSituation.vue 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  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. <img
  7. style="width: 80px; position: absolute; right: 20px; top: 20px"
  8. src="../../assets/img/home/bg_p.png"
  9. alt=""
  10. />
  11. <div class="number_people_top">人数统计</div>
  12. <div class="number_people_yuan">
  13. <div class="out">
  14. <span :title="userInfo.orgName" class="yuan_name">{{
  15. userInfo.orgName
  16. }}</span>
  17. <span class="yuan_people">{{ peopleData["总人数"] }}人</span>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="plan">
  22. <div class="plan_inner">
  23. <span class="plan_top">近期测评</span>
  24. <div class="table_header">
  25. <div class="detail">计划名称</div>
  26. <div class="detail">创建时间</div>
  27. <div class="detail">结束时间</div>
  28. <div class="detail">状态</div>
  29. </div>
  30. <div class="table_a">
  31. <div v-if="tableData.length == 0">
  32. <div style="text-align: center; margin-top: 10px">暂无数据</div>
  33. </div>
  34. <div v-else>
  35. <div
  36. class="table_body"
  37. v-for="(item, index) in tableData"
  38. :key="item.id"
  39. :style="{ backgroundColor: index % 2 == 0 ? '#ffffff' : '#F8F8F8' }"
  40. >
  41. <!-- <div :style="{backgroundColor:index ==0?'':'s'}">
  42. </div> -->
  43. <div class="detail" :title="item.planName">{{ item.planName }}</div>
  44. <div class="detail">{{ item.createTime }}</div>
  45. <div class="detail">{{ item.planEndTime }}</div>
  46. <!-- item.planStatus -->
  47. <div class="detail">
  48. <!-- {{ planStatusFun(item) }} -->
  49. <div
  50. style="display: flex; justify-content: center; align-items: center"
  51. v-if="item.planStatus == '3'"
  52. >
  53. <img
  54. style="width: 16px"
  55. src="../../assets/img/home/isCom.png"
  56. alt=""
  57. />&nbsp;&nbsp;
  58. <div style="color: #333333">已完成</div>
  59. </div>
  60. <div
  61. style="display: flex; justify-content: center; align-items: center"
  62. v-if="item.planStatus == '2'"
  63. >
  64. <img
  65. style="width: 16px"
  66. src="../../assets/img/home/isRun.png"
  67. alt=""
  68. />&nbsp;&nbsp;
  69. <div style="color: #f6cb00">进行中</div>
  70. </div>
  71. <div
  72. style="display: flex; justify-content: center; align-items: center"
  73. v-if="item.planStatus == '1'"
  74. >
  75. <img
  76. style="width: 16px"
  77. src="../../assets/img/home/isNo.png"
  78. alt=""
  79. />&nbsp;&nbsp;
  80. <div style="color: #d52121">未开始</div>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. </div>
  88. </div>
  89. <div class="recently">
  90. <!-- <div class="recently_bottom_font">
  91. 最近测试结果: {{ planData.planName }} &nbsp;&nbsp;&nbsp;&nbsp;<span
  92. style="cursor: pointer; color: #00bf78"
  93. @click="queryDetail"
  94. >查看详情</span
  95. >
  96. </div> -->
  97. <div class="block_left">
  98. <div class="block_ren">
  99. <div class="re">最近测评结果</div>
  100. <!-- 当没有测试计划是则不显示 -->
  101. <div class="detail" v-show="planData.hasOwnProperty('planName')">
  102. <img
  103. @click="queryDetail"
  104. style="width: 80px; cursor: pointer"
  105. src="../../assets//img/home/detail.png"
  106. alt=""
  107. />
  108. </div>
  109. </div>
  110. <div style="width: 100%">
  111. <div class="block_table">
  112. <div class="block_detail">计划名称</div>
  113. <div class="block_detail">测试人数</div>
  114. <div class="block_detail">测试时间</div>
  115. </div>
  116. <div class="block_body">
  117. <div
  118. v-if="planData.hasOwnProperty('planName')"
  119. style="display: flex; padding-left: 20px; padding-right: 20px; flex: 1"
  120. >
  121. <!-- <div style='width:20px'></div> -->
  122. <div class="block_detail">
  123. <!-- {{ planData.planName }} -->
  124. <span class="plan_dp" :title="planData.planName">
  125. {{ planData.planName }}</span
  126. >
  127. </div>
  128. <div class="block_detail">
  129. <span class="plan_dp" :title="planData.userNum">
  130. {{ planData.userNum }}</span
  131. >
  132. </div>
  133. <div class="block_detail">
  134. <span class="plan_dp" :title="planData.createTime">
  135. {{ planData.createTime }}</span
  136. >
  137. </div>
  138. </div>
  139. <div v-else style="width: 100%; text-align: center; margin-top: 10px">
  140. <div>暂无数据</div>
  141. </div>
  142. </div>
  143. </div>
  144. <div
  145. v-if="planData.hasOwnProperty('planName')"
  146. class="echarts_style"
  147. ref="echarts_zhu"
  148. ></div>
  149. <div
  150. v-else
  151. style="
  152. display: flex;
  153. align-items: center;
  154. justify-content: center;
  155. height: 100%;
  156. "
  157. >
  158. <span style="text-align: center">暂无数据</span>
  159. </div>
  160. </div>
  161. <div class="block_right">
  162. <div class="right_zu">
  163. <div class="cpqs">
  164. 测评趋势<span style="font-size: 16px; margin-left: 10px"
  165. >(近期10次测试趋势图)</span
  166. >
  167. </div>
  168. <div v-if="planData.hasOwnProperty('planName')" class="block_lei" ref="echarts_lei"></div>
  169. <div
  170. v-else
  171. style="
  172. display: flex;
  173. justify-content: center;
  174. align-items: center;
  175. height: 100%;
  176. "
  177. >
  178. 暂无数据
  179. </div>
  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. // shadowStyle:{
  244. // color:'rgba(0,0,0,0.5)',
  245. // shadowBlur: 10,
  246. // shadowOffsetX:0,
  247. // shadowOffsetY:'0'
  248. // }
  249. },
  250. formatter: function (params) {
  251. var relVal = '';
  252. let na = params[0].name;
  253. for (var i = 0, l = params.length; i < l; i++) {
  254. relVal +=
  255. params[i].marker +
  256. na +
  257. " : " +
  258. params[i].value +
  259. "%";
  260. }
  261. return relVal;
  262. },
  263. // formatter: "{b} : {c} % ",
  264. // formatter: function (params,trigger) {
  265. // return '{a} <br/>{b} : {c} <br/>百分比 : {d}%'
  266. // },
  267. },
  268. legend: {},
  269. grid: {
  270. left: "3%",
  271. right: "4%",
  272. bottom: "3%",
  273. containLabel: true,
  274. },
  275. xAxis: {
  276. type: "category",
  277. data: [],
  278. // axisLabel: {
  279. // width: 40, //设置内容宽度
  280. // // overflow:'break',
  281. // overflow: "truncate",
  282. // },
  283. // axisLabel: {
  284. // formatter: function (params) {
  285. // return "中等分值";
  286. // },
  287. // },
  288. },
  289. dataZoom: {
  290. type: "inside", //放大缩小x轴数值
  291. },
  292. yAxis: {
  293. max: 100,
  294. type: "value",
  295. boundaryGap: [0, 0.01],
  296. minInterval: 1,
  297. },
  298. series: [
  299. {
  300. type: "bar",
  301. data: [],
  302. barWidth: "15", //修改柱状图的宽度
  303. itemStyle: {
  304. color: new echarts.graphic.LinearGradient(
  305. //前四个参数用于配置渐变色的起止位置,这四个参数依次对应 右下左上 四个方位。也就是从右边开始顺时针方向。
  306. //通过修改前4个参数,可以实现不同的渐变方向
  307. /*第五个参数则是一个数组,用于配置颜色的渐变过程。
  308. 每项为一个对象,包含offset和color两个参数
  309. */
  310. 0,
  311. 0,
  312. 0,
  313. 1,
  314. [
  315. {
  316. //代表渐变色从正上方开始
  317. offset: 0, //offset范围是0~1,用于表示位置,0是指0%处的颜色
  318. color: "#644BFD",
  319. }, //柱图渐变色
  320. {
  321. offset: 1, //指100%处的颜色
  322. color: "#00F6E3",
  323. },
  324. ]
  325. ),
  326. borderWidth: 2,
  327. // borderColor: "#2EE053",
  328. barBorderRadius: [10, 10, 10, 10], //修改柱状图圆角
  329. },
  330. label: {
  331. show: true,
  332. position: "top",
  333. color: "#006FFF",
  334. formatter: function (params) {
  335. return parseInt(params.value) + "%";
  336. },
  337. },
  338. },
  339. ],
  340. };
  341. // echarts.init(this.echarts_zhu).setOption(this.option);
  342. this.option_lei = {
  343. title: {
  344. text: "",
  345. },
  346. // tooltip: {
  347. // trigger: "axis",
  348. // },
  349. tooltip: {
  350. trigger: "axis",
  351. axisPointer: {
  352. type: "shadow",
  353. },
  354. // formatter: '{b} : {c} % '
  355. // formatter: function (params,trigger) {
  356. formatter: function (params) {
  357. var relVal = params[0].name;
  358. for (var i = 0, l = params.length; i < l; i++) {
  359. relVal +=
  360. "<br/>" +
  361. params[i].marker +
  362. params[i].seriesName +
  363. " : " +
  364. params[i].value +
  365. "%";
  366. }
  367. return relVal;
  368. },
  369. // return '{a} <br/>{b} : {c} <br/>百分比 : {d}%'
  370. // },
  371. },
  372. legend: {
  373. data: ["焦虑", "抑郁", "压力", "精神障碍", "心理健康"],
  374. },
  375. grid: {
  376. left: "3%",
  377. right: "4%",
  378. bottom: "3%",
  379. containLabel: true,
  380. },
  381. toolbox: {
  382. feature: {
  383. // saveAsImage: {},
  384. },
  385. },
  386. xAxis: {
  387. type: "category",
  388. boundaryGap: false,
  389. data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
  390. axisLabel: {
  391. interval: 0,
  392. // rotate:'-90',
  393. formatter: function (value) {
  394. // return ''
  395. // return value
  396. return value.substring(0, 4) + "...";
  397. },
  398. },
  399. },
  400. yAxis: {
  401. max: 100,
  402. type: "value",
  403. },
  404. series: [
  405. {
  406. name: "焦虑",
  407. type: "line",
  408. data: [],
  409. },
  410. {
  411. name: "抑郁",
  412. type: "line",
  413. data: [],
  414. },
  415. {
  416. name: "压力",
  417. type: "line",
  418. data: [],
  419. },
  420. {
  421. name: "精神障碍",
  422. type: "line",
  423. data: [],
  424. },
  425. {
  426. name: "心理健康",
  427. type: "line",
  428. data: [],
  429. },
  430. ],
  431. };
  432. this.queryDetailScore();
  433. },
  434. methods: {
  435. queryDetail() {
  436. this.$refs.register.open(this.planData);
  437. },
  438. //根据组织编号查询总人数
  439. queryAllPeople() {
  440. let url = `/user/countUserByOrgNo?orgNo=${this.userInfo.orgNo}`;
  441. this.$http.get(url, {}, (res) => {
  442. if (res && res.code == 200) {
  443. this.peopleData = res.data;
  444. // this.tableData = res.data.content;
  445. // this.total = res.data.totalElements;
  446. } else {
  447. // this.$toast.fail(res.msg);
  448. this.$message.error(res.msg);
  449. }
  450. });
  451. },
  452. searchList() {
  453. let url = `/plan/findListByPage?pageSize=${this.pageSize}&pageNum=${this.pageNum}&orgNo=${this.userInfo.orgNo}`;
  454. this.$http.get(url, {}, (res) => {
  455. if (res && res.code == 200) {
  456. this.tableData = res.data.content;
  457. // this.total = res.data.totalElements;
  458. } else {
  459. // this.$toast.fail(res.msg);
  460. this.$message.error(res.msg);
  461. }
  462. });
  463. },
  464. //查询最新结束的计划
  465. findNewPlan() {
  466. let url = `/plan/findNewCompletedPlan?orgNo=${this.userInfo.orgNo}`;
  467. this.$http.get(url, {}, (res) => {
  468. if (res && res.code == 200) {
  469. if (res.data != null) {
  470. this.planId = res.data.id;
  471. let list = Object.entries(res.data);
  472. //开始过滤
  473. let list1 = list.filter(([key, val]) => {
  474. return (
  475. key == "planName" ||
  476. key == "planOrgName" ||
  477. key == "createTime" ||
  478. key == "userNum" ||
  479. key == "id"
  480. );
  481. });
  482. let list2 = Object.fromEntries(list1);
  483. this.planData = list2;
  484. //调用各个专业不同总分人数
  485. // this.isScore();
  486. // this.getPlanDimNun();
  487. this.isFin();
  488. }
  489. } else {
  490. // this.$toast.fail(res.msg);
  491. this.$message.error(res.msg);
  492. }
  493. });
  494. },
  495. //查询统计端的--心理健康异常的人员
  496. isAbnormal() {
  497. //调用接口返回信息
  498. let url = `/planUser/countCompletedUserHighRisk?planId=${this.planId}`;
  499. this.$http.get(url, {}, (res) => {
  500. if (res.code == 200) {
  501. // this.unComplete = res.data[0];
  502. // this.completeNum = res.data[1];
  503. this.abnormalNum = res.data;
  504. this.getPlanDimNun();
  505. }
  506. });
  507. },
  508. //管理端统计完成情况
  509. isFin() {
  510. //调用接口返回信息
  511. let url = `/plan/countComplete?planId=${this.planId}`;
  512. this.$http.get(url, {}, (res) => {
  513. if (res.code == 200) {
  514. this.unComplete = res.data[0];
  515. this.completeNum = res.data[1];
  516. this.isAbnormal();
  517. }
  518. });
  519. },
  520. //查询各个维度占比
  521. getPlanDimNun() {
  522. this.$http.get(
  523. `userRecordScore/countNumByPlanDim?planId=${this.planId}`,
  524. {},
  525. (res) => {
  526. let dimensionList = res.data;
  527. let nameList = [];
  528. nameList.push("心理健康");
  529. nameList.push("抑郁");
  530. nameList.push("压力");
  531. nameList.push("焦虑");
  532. nameList.push("精神障碍");
  533. let scoreList = [];
  534. scoreList.push(this.completeNum==0?0:
  535. parseInt(((this.completeNum - this.abnormalNum) / this.completeNum) * 100)
  536. );
  537. scoreList.push(this.completeNum==0?0:parseInt((dimensionList[1]["抑郁"] / this.completeNum) * 100));
  538. scoreList.push(this.completeNum==0?0:parseInt((dimensionList[2]["压力"] / this.completeNum) * 100));
  539. scoreList.push(this.completeNum==0?0:parseInt((dimensionList[0]["焦虑"] / this.completeNum) * 100));
  540. scoreList.push(
  541. parseInt(this.completeNum==0?0:(dimensionList[3]["精神障碍"] / this.completeNum) * 100)
  542. );
  543. this.echarts_zhu = this.$refs.echarts_zhu;
  544. this.option.xAxis.data = nameList;
  545. this.option.series[0].data = scoreList;
  546. let myChart1 = echarts.init(this.echarts_zhu);
  547. myChart1.setOption(this.option);
  548. }
  549. );
  550. },
  551. //各个专业不同总分人数
  552. isScore() {
  553. let url = `/plan/countTotalNumber?planId=${this.planId}`;
  554. this.$http.get(url, {}, (res) => {
  555. if (res.code == 200) {
  556. let nameList = [];
  557. let scoreList = [];
  558. for (const item in res.data) {
  559. //
  560. nameList.push(item);
  561. scoreList.push(res.data[item]);
  562. }
  563. // nameList= ["中等", "高等", "低等", "多喝", "大"]
  564. // console.log(nameList)
  565. this.echarts_zhu = this.$refs.echarts_zhu;
  566. this.option.xAxis.data = nameList;
  567. this.option.series[0].data = scoreList;
  568. let myChart1 = echarts.init(this.echarts_zhu);
  569. myChart1.setOption(this.option);
  570. }
  571. });
  572. },
  573. //获取子组织
  574. // getOrg() {
  575. // let url = `/org/findChildOrg?orgNo=${this.userInfo.orgNo}`;
  576. // this.$http.get(url, {}, (res) => {
  577. // if (res && res.code == 200) {
  578. // if (res.data.length > 0) {
  579. // let list = [];
  580. // for (let i = 0; i < res.data.length; i++) {
  581. // let obj = { value: "", label: "" };
  582. // obj.value = res.data[i].orgNo;
  583. // obj.label = res.data[i].orgName;
  584. // list.push(obj);
  585. // }
  586. // this.professionOptions = list;
  587. // this.profession = list[0].value;
  588. // //然后根据选择的这个选项、、查询具体数据
  589. // this.queryDetailScore(list[0].value);
  590. // }
  591. // } else {
  592. // // this.$toast.fail(res.msg);
  593. // this.$message.error(res.msg);
  594. // }
  595. // });
  596. // },
  597. //查看各个组织下各个维度的平均得分
  598. queryDetailScore() {
  599. let url = `/plan/countRecentPlanDetails`;
  600. this.$http.get(url, {}, (res) => {
  601. if (res.code == 200) {
  602. this.avgData = res.data;
  603. let scoreList = [
  604. {
  605. name: "焦虑",
  606. type: "line",
  607. stack: "Total",
  608. data: [],
  609. symbolSize: 6,
  610. lineStyle: {
  611. // type: "dashed",
  612. width: 3,
  613. },
  614. },
  615. {
  616. name: "抑郁",
  617. type: "line",
  618. data: [],
  619. symbolSize: 6,
  620. lineStyle: {
  621. // type: "dashed",
  622. width: 3,
  623. },
  624. },
  625. {
  626. name: "压力",
  627. type: "line",
  628. data: [],
  629. symbolSize: 6,
  630. lineStyle: {
  631. // type: "dashed",
  632. width: 3,
  633. },
  634. },
  635. {
  636. name: "精神障碍",
  637. type: "line",
  638. data: [],
  639. symbolSize: 6,
  640. lineStyle: {
  641. type: "dashed",
  642. width: 3,
  643. },
  644. },
  645. {
  646. name: "心理健康",
  647. type: "line",
  648. data: [],
  649. symbolSize: 6,
  650. lineStyle: {
  651. type: "dashed",
  652. width: 3,
  653. },
  654. },
  655. ];
  656. let nameList = [];
  657. if (res.data.length > 0) {
  658. //
  659. for (let i = 0; i < res.data.length; i++) {
  660. let k = Object.keys(res.data[i])[0];
  661. nameList.push(k);
  662. let subList = res.data[i][k];
  663. for (let j = 0; j < subList.length; j++) {
  664. //当前对象 例如 //{"焦虑":"1"}
  665. let currentObj = subList[j];
  666. //修改焦虑
  667. if (currentObj.hasOwnProperty("焦虑")) {
  668. //
  669. scoreList[0].data.push(currentObj["焦虑"]);
  670. }
  671. //修改抑郁
  672. if (currentObj.hasOwnProperty("抑郁")) {
  673. //
  674. scoreList[1].data.push(currentObj["抑郁"]);
  675. }
  676. //压力
  677. if (currentObj.hasOwnProperty("压力")) {
  678. //
  679. scoreList[2].data.push(currentObj["压力"]);
  680. }
  681. //精神障碍
  682. if (currentObj.hasOwnProperty("精神障碍")) {
  683. //
  684. scoreList[3].data.push(currentObj["精神障碍"]);
  685. }
  686. //心理健康
  687. if (currentObj.hasOwnProperty("心理健康")) {
  688. //
  689. scoreList[4].data.push(currentObj["心理健康"]);
  690. }
  691. }
  692. }
  693. }
  694. // {
  695. // name: "焦虑",
  696. // type: "line",
  697. // stack: "Total",
  698. // data: [132, 101, 134],
  699. // },
  700. //设置总共维度
  701. //测试计划---
  702. //修改option
  703. this.echarts_lei = this.$refs.echarts_lei;
  704. this.option_lei.xAxis.data = nameList;
  705. this.option_lei.series = scoreList;
  706. echarts.init(this.echarts_lei).setOption(this.option_lei);
  707. }
  708. });
  709. },
  710. //选择的专业改变后接着调用
  711. // professionChange(val) {
  712. // this.queryDetailScore(val);
  713. // },
  714. //状态---
  715. planStatusFun(val) {
  716. let planStatus = val.planStatus;
  717. if (planStatus == "1") {
  718. return "未开始";
  719. } else if (planStatus == "2") {
  720. return "进行中";
  721. } else if (planStatus == "3") {
  722. return "已完成";
  723. } else {
  724. return val.planStatus;
  725. }
  726. },
  727. },
  728. };
  729. </script>
  730. <style lang="less" scoped>
  731. .computer::-webkit-scrollbar {
  732. width: 6px;
  733. }
  734. .computer::-webkit-scrollbar-track {
  735. background: rgb(239, 239, 239);
  736. border-radius: 2px;
  737. }
  738. .computer::-webkit-scrollbar-thumb {
  739. background: #40a0ff49;
  740. border-radius: 10px;
  741. }
  742. .computer::-webkit-scrollbar-thumb:hover {
  743. background: #40a0ff;
  744. }
  745. .table_a::-webkit-scrollbar {
  746. width: 6px;
  747. }
  748. .table_a::-webkit-scrollbar-track {
  749. background: rgb(239, 239, 239);
  750. border-radius: 2px;
  751. }
  752. .table_a::-webkit-scrollbar-thumb {
  753. background: #afafaf49;
  754. border-radius: 10px;
  755. }
  756. .table_a::-webkit-scrollbar-thumb:hover {
  757. background: #b6b6b6;
  758. }
  759. .pp {
  760. display: flex;
  761. flex-direction: column;
  762. /* justify-content: center; */
  763. height: 100%;
  764. width: 100%;
  765. background-color: #f7f7f7;
  766. // background-color: aqua;
  767. .general_situation {
  768. height: 260px;
  769. width: 100%;
  770. display: flex;
  771. min-width: 980px;
  772. .number_people {
  773. position: relative;
  774. background: url(../../assets/img/home/bg.png) no-repeat;
  775. background-size: cover;
  776. border-radius: 20px;
  777. flex: 5;
  778. // background-color: #48d68e;
  779. display: flex;
  780. flex-direction: column;
  781. .number_people_top {
  782. margin-top: 20px;
  783. margin-left: 20px;
  784. color: #ffffff;
  785. font-size: 20px;
  786. letter-spacing: 3px;
  787. margin-bottom: 20px;
  788. font-weight: 700;
  789. }
  790. .number_people_yuan {
  791. display: flex;
  792. color: #ffffff;
  793. .out {
  794. border-radius: 20px;
  795. margin-left: 20px;
  796. // background-color: #7fe2b0;
  797. display: flex;
  798. flex-direction: column;
  799. .yuan_name {
  800. width: 80%;
  801. margin-left: 20px;
  802. margin-top: 10px;
  803. color: #ffffff;
  804. letter-spacing: 3px;
  805. font-size: 26px;
  806. // flex:1,;
  807. overflow: hidden;
  808. -webkit-line-clamp: 1;
  809. display: -webkit-box;
  810. -webkit-box-orient: vertical;
  811. }
  812. .yuan_people {
  813. margin-left: 20px;
  814. margin-top: 10px;
  815. color: #ffffff;
  816. font-size: 60px;
  817. letter-spacing: 3px;
  818. }
  819. }
  820. .computer {
  821. max-height: 140px;
  822. // height: 140px;
  823. overflow-y: auto;
  824. flex: 1;
  825. display: flex;
  826. width: 100%;
  827. flex-wrap: wrap;
  828. justify-content: start;
  829. .computer_detail {
  830. width: 140px;
  831. // height: 20px;
  832. padding: 10px;
  833. }
  834. }
  835. }
  836. }
  837. .plan {
  838. display: flex;
  839. // height:30%;
  840. flex: 10;
  841. .plan_inner {
  842. padding: 20px;
  843. border-radius: 20px;
  844. margin-left: 20px;
  845. background-color: #ffffff;
  846. display: flex;
  847. width: 100%;
  848. flex-direction: column;
  849. .plan_top {
  850. font-size: 20px;
  851. letter-spacing: 3px;
  852. font-weight: 700;
  853. color: #000000;
  854. margin-bottom: 20px;
  855. }
  856. //表头
  857. .table_header {
  858. display: flex;
  859. // justify-content: space-around;
  860. background-color: #00bf78;
  861. border-radius: 20px;
  862. line-height: 40px;
  863. font-weight: 700;
  864. font-size: 18px;
  865. letter-spacing: 3px;
  866. color: #ffffff;
  867. .detail {
  868. flex: 1;
  869. text-align: center;
  870. }
  871. }
  872. .table_a {
  873. overflow-y: auto;
  874. .table_body {
  875. display: flex;
  876. // justify-content: space-around;
  877. line-height: 42px;
  878. .detail {
  879. display: inline-block;
  880. white-space: nowrap;
  881. overflow: hidden;
  882. text-overflow: ellipsis;
  883. width: 100%;
  884. flex: 1;
  885. text-align: center;
  886. }
  887. }
  888. }
  889. }
  890. }
  891. }
  892. .recently {
  893. width: 100%;
  894. background-color: #f7f7f7;
  895. height: calc(100% - 260px);
  896. display: flex;
  897. flex-direction: row;
  898. align-items: center;
  899. margin-top: 20px;
  900. .block_left {
  901. // box-sizing: border-box;
  902. // padding:10px;
  903. border-radius: 20px;
  904. display: flex;
  905. // padding-left: 10px;
  906. flex-direction: column;
  907. // padding: 10px;
  908. flex: 5;
  909. background-color: #ffffff;
  910. height: 100%;
  911. width: 100%;
  912. align-items: center;
  913. // background-color: #ffffff;
  914. .block_ren {
  915. padding-top: 10px;
  916. // padding-right: 20px;
  917. width: 100%;
  918. display: flex;
  919. justify-content: space-between;
  920. align-items: center;
  921. .re {
  922. letter-spacing: 3px;
  923. padding: 0 20px;
  924. color: #222222;
  925. font-weight: 700;
  926. font-size: 20px;
  927. }
  928. .detail {
  929. padding: 0 20px;
  930. }
  931. }
  932. .chart_wrap {
  933. flex: 1;
  934. // height: 450px;
  935. }
  936. .block_table {
  937. margin-top: 10px;
  938. margin-left: 20px;
  939. margin-right: 20px;
  940. background-color: #f8f8f8;
  941. border-radius: 20px;
  942. display: flex;
  943. .block_detail {
  944. font-weight: 700;
  945. padding: 10px;
  946. flex: 1;
  947. display: flex;
  948. justify-content: center;
  949. }
  950. }
  951. .block_body {
  952. width: 100%;
  953. display: flex;
  954. min-width: 0;
  955. .block_detail {
  956. background-color: #ffffff;
  957. text-align: center;
  958. line-height: 36px;
  959. display: flex;
  960. flex: 1;
  961. min-width: 0;
  962. overflow: hidden;
  963. .plan_dp {
  964. display: flex;
  965. width: 100%;
  966. // justify-content: center;
  967. text-align: center;
  968. // flex: 1;
  969. -webkit-line-clamp: 1;
  970. display: -webkit-box;
  971. -webkit-box-orient: vertical;
  972. }
  973. }
  974. }
  975. .profession {
  976. font-weight: 700;
  977. }
  978. .echarts_style {
  979. width: 100%;
  980. flex: 1;
  981. // background-color: #000000;
  982. }
  983. }
  984. .block_right {
  985. // box-sizing: border-box;
  986. // background-color: #00bf78;
  987. flex: 10;
  988. // background-color: #d32d2d;
  989. height: 100%;
  990. display: flex;
  991. flex-direction: column;
  992. // background-color: #f7f7f7;
  993. .right_zu {
  994. border-radius: 20px;
  995. margin-left: 20px;
  996. background-color: #ffffff;
  997. flex: 10;
  998. // background-color: #d32d2d;
  999. height: 100%;
  1000. display: flex;
  1001. flex-direction: column;
  1002. .cpqs {
  1003. margin-top: 10px;
  1004. margin-left: 20px;
  1005. font-size: 20px;
  1006. letter-spacing: 3px;
  1007. font-weight: 700;
  1008. }
  1009. .block_lei {
  1010. flex: 1;
  1011. // background-color: #000000;
  1012. margin-left: 20px;
  1013. }
  1014. }
  1015. .block_avg {
  1016. margin-left: 20px;
  1017. font-weight: 700;
  1018. }
  1019. }
  1020. }
  1021. }
  1022. </style>