iot.vue 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274
  1. <template>
  2. <div class="details-analysis">
  3. <!--默认样式 某个学校的分析数据-->
  4. <div>
  5. <div class="contentbox">
  6. <div class="basicsdata-box">
  7. <div class="basicadata-item" v-for="(item,index) in basicaList" :key="index">
  8. <div class="item-title-images">
  9. <div class="item-title">{{item.title}}</div>
  10. <div class="item-images">
  11. <svg class="analysisicon" aria-hidden="true">
  12. <use :xlink:href="item.icon"></use>
  13. </svg>
  14. </div>
  15. </div>
  16. <div :class="[item.key === 'classtime' || item.key === 'participationnum' ? 'item-nums-special':'item-nums']">
  17. <p v-if="item.key === 'classtime' || item.key === 'participationnum'">{{item.value}}<span class="timetag">Min</span><br /><span>{{Math.round(item.value/60)}}<span class="timetag">H</span></span></p>
  18. <p v-else>{{item.value}}</p>
  19. </div>
  20. </div>
  21. </div>
  22. <div class="apparatusAndpower">
  23. <div class="inuse-left">
  24. <p class="inuse-title">课中互动</p>
  25. <div class="inuse-item" v-for="(item,index) in inuseList" :key="index">
  26. <div class="item-img">
  27. <svg class="inuseicon" aria-hidden="true">
  28. <use :xlink:href="item.icon"></use>
  29. </svg>
  30. </div>
  31. <div class="item-box">
  32. <p>{{item.value}}</p>
  33. <span>{{item.title}}</span>
  34. </div>
  35. </div>
  36. </div>
  37. <!-- <div class="apparatus-box">
  38. <p class="apparatus-title">设备与授权</p>
  39. <div class="apparatus-item" v-for="(item,index) in powerList.facility" :key="index">
  40. <div class="item-num">{{item.value}}</div>
  41. <span class="item-title">{{item.name}}</span>
  42. </div>
  43. </div>
  44. <div class="power-box">
  45. <p class="apparatus-title">课堂与授权</p>
  46. <div class="power-item" v-for="(item,index) in powerList.class" :key="index">
  47. <div class="item-num">{{item.value}}</div>
  48. <span class="item-title">{{item.name}}</span>
  49. </div>
  50. </div> -->
  51. </div>
  52. <div class="minxinbox">
  53. <div class="lessons-box">
  54. <div class="lessons-item" v-for="(items,indexs) in lessonsList" :key="indexs">
  55. <div class="lessons-img-title">
  56. <div class="lessons-img">
  57. <svg class="lessonsicon" aria-hidden="true">
  58. <use :xlink:href="items.icon"></use>
  59. </svg>
  60. </div>
  61. <!-- <div class="lesson-title">{{items.title}}</div> -->
  62. </div>
  63. <div class="inquirybox"><span>{{items.content}}</span></div>
  64. <div class="less-value">
  65. <span class="lessvalue-num">{{items.value}}</span>
  66. <!-- {{indexs+1 === lessonsList.length ? items.value:items.value}} -->
  67. <span v-if="indexs+1 !== lessonsList.length">/堂课</span>
  68. </div>
  69. <div class="result-box">
  70. <svg class="lessRicon" aria-hidden="true">
  71. <use :xlink:href="items.value !==0 ? '#icon-zhengque2':'#icon-cuowu'"></use>
  72. </svg>
  73. </div>
  74. </div>
  75. </div>
  76. <div class="inuse-right">
  77. <div class="inuse-total">
  78. <div class="class-title">多形态课堂</div>
  79. </div>
  80. <div class="echartsX">
  81. <Xlines :lineData="echartData.xlines"></Xlines>
  82. </div>
  83. <!-- <div class="inuse-below">
  84. <div class="below-item" v-for="(itemA,index) in classType" :key="index">
  85. <p>{{itemA.name}}</p>
  86. <div class="valuebox">
  87. <span>{{itemA.value}}</span>
  88. </div>
  89. <div :class="itemA.class"></div>
  90. </div>
  91. </div> -->
  92. </div>
  93. </div>
  94. </div>
  95. <!--上一个或者下一个-->
  96. <!-- <div class="lastbtn">
  97. <div class="btn-ls">
  98. <svg class="last-btns" aria-hidden="true">
  99. <use xlink:href="#icon-icon-test"></use>
  100. </svg>
  101. </div>
  102. <div class="btn-ls-text">
  103. <p class="next-school">XXX学校</p>
  104. <p class="next-title">上一个学校</p>
  105. </div>
  106. </div>
  107. <div class="nextbtn">
  108. <div class="btn-ls">
  109. <svg class="last-btns" aria-hidden="true">
  110. <use xlink:href="#icon-icon-test1"></use>
  111. </svg>
  112. </div>
  113. <div class="btn-ls-text">
  114. <p class="next-school">XXX学校</p>
  115. <p class="next-title">下一个学校</p>
  116. </div>
  117. </div> -->
  118. <!--上一个或者下一个end-->
  119. </div>
  120. </div>
  121. </template>
  122. <script setup>
  123. import { ref, getCurrentInstance, defineEmits, computed, onMounted, watch } from 'vue'
  124. import Xlines from '@/components/echarts/Xline.vue'
  125. import * as echarts from 'echarts'
  126. let props = defineProps({
  127. detailsData: Object,
  128. })
  129. console.log(props.detailsData, '子组件')
  130. let value1 = ref('')
  131. let value = ref()
  132. let $myemit = defineEmits(['myback'])
  133. const activeName = ref('areas')
  134. let appearState = ref('area')
  135. const options = [
  136. {
  137. value: 'guide',
  138. label: 'Guide',
  139. children: [
  140. {
  141. value: 'disciplines',
  142. label: 'Disciplines',
  143. children: [
  144. {
  145. value: 'consistency',
  146. label: 'Consistency',
  147. },
  148. {
  149. value: 'feedback',
  150. label: 'Feedback',
  151. },
  152. {
  153. value: 'efficiency',
  154. label: 'Efficiency',
  155. },
  156. {
  157. value: 'controllability',
  158. label: 'Controllability',
  159. },
  160. ],
  161. },
  162. {
  163. value: 'navigation',
  164. label: 'Navigation',
  165. children: [
  166. {
  167. value: 'side nav',
  168. label: 'Side Navigation',
  169. },
  170. {
  171. value: 'top nav',
  172. label: 'Top Navigation',
  173. },
  174. ],
  175. },
  176. ],
  177. },
  178. {
  179. value: 'component',
  180. label: 'Component',
  181. children: [
  182. {
  183. value: 'basic',
  184. label: 'Basic',
  185. children: [
  186. {
  187. value: 'layout',
  188. label: 'Layout',
  189. },
  190. {
  191. value: 'color',
  192. label: 'Color',
  193. },
  194. {
  195. value: 'typography',
  196. label: 'Typography',
  197. },
  198. {
  199. value: 'icon',
  200. label: 'Icon',
  201. },
  202. {
  203. value: 'button',
  204. label: 'Button',
  205. },
  206. ],
  207. },
  208. {
  209. value: 'form',
  210. label: 'Form',
  211. children: [
  212. {
  213. value: 'radio',
  214. label: 'Radio',
  215. },
  216. {
  217. value: 'checkbox',
  218. label: 'Checkbox',
  219. },
  220. {
  221. value: 'input',
  222. label: 'Input',
  223. },
  224. {
  225. value: 'input-number',
  226. label: 'InputNumber',
  227. },
  228. {
  229. value: 'select',
  230. label: 'Select',
  231. },
  232. {
  233. value: 'cascader',
  234. label: 'Cascader',
  235. },
  236. {
  237. value: 'switch',
  238. label: 'Switch',
  239. },
  240. {
  241. value: 'slider',
  242. label: 'Slider',
  243. },
  244. {
  245. value: 'time-picker',
  246. label: 'TimePicker',
  247. },
  248. {
  249. value: 'date-picker',
  250. label: 'DatePicker',
  251. },
  252. {
  253. value: 'datetime-picker',
  254. label: 'DateTimePicker',
  255. },
  256. {
  257. value: 'upload',
  258. label: 'Upload',
  259. },
  260. {
  261. value: 'rate',
  262. label: 'Rate',
  263. },
  264. {
  265. value: 'form',
  266. label: 'Form',
  267. },
  268. ],
  269. },
  270. {
  271. value: 'data',
  272. label: 'Data',
  273. children: [
  274. {
  275. value: 'table',
  276. label: 'Table',
  277. },
  278. {
  279. value: 'tag',
  280. label: 'Tag',
  281. },
  282. {
  283. value: 'progress',
  284. label: 'Progress',
  285. },
  286. {
  287. value: 'tree',
  288. label: 'Tree',
  289. },
  290. {
  291. value: 'pagination',
  292. label: 'Pagination',
  293. },
  294. {
  295. value: 'badge',
  296. label: 'Badge',
  297. },
  298. ],
  299. },
  300. {
  301. value: 'notice',
  302. label: 'Notice',
  303. children: [
  304. {
  305. value: 'alert',
  306. label: 'Alert',
  307. },
  308. {
  309. value: 'loading',
  310. label: 'Loading',
  311. },
  312. {
  313. value: 'message',
  314. label: 'Message',
  315. },
  316. {
  317. value: 'message-box',
  318. label: 'MessageBox',
  319. },
  320. {
  321. value: 'notification',
  322. label: 'Notification',
  323. },
  324. ],
  325. },
  326. {
  327. value: 'navigation',
  328. label: 'Navigation',
  329. children: [
  330. {
  331. value: 'menu',
  332. label: 'Menu',
  333. },
  334. {
  335. value: 'tabs',
  336. label: 'Tabs',
  337. },
  338. {
  339. value: 'breadcrumb',
  340. label: 'Breadcrumb',
  341. },
  342. {
  343. value: 'dropdown',
  344. label: 'Dropdown',
  345. },
  346. {
  347. value: 'steps',
  348. label: 'Steps',
  349. },
  350. ],
  351. },
  352. {
  353. value: 'others',
  354. label: 'Others',
  355. children: [
  356. {
  357. value: 'dialog',
  358. label: 'Dialog',
  359. },
  360. {
  361. value: 'tooltip',
  362. label: 'Tooltip',
  363. },
  364. {
  365. value: 'popover',
  366. label: 'Popover',
  367. },
  368. {
  369. value: 'card',
  370. label: 'Card',
  371. },
  372. {
  373. value: 'carousel',
  374. label: 'Carousel',
  375. },
  376. {
  377. value: 'collapse',
  378. label: 'Collapse',
  379. },
  380. ],
  381. },
  382. ],
  383. },
  384. {
  385. value: 'resource',
  386. label: 'Resource',
  387. children: [
  388. {
  389. value: 'axure',
  390. label: 'Axure Components',
  391. },
  392. {
  393. value: 'sketch',
  394. label: 'Sketch Templates',
  395. },
  396. {
  397. value: 'docs',
  398. label: 'Design Documentation',
  399. },
  400. ],
  401. },
  402. ]
  403. const optionsS = [
  404. {
  405. value: 'Option1',
  406. label: 'Option1',
  407. children: [
  408. {
  409. value: 'axure',
  410. label: 'Axure Components',
  411. },
  412. ]
  413. },
  414. {
  415. value: 'Option2',
  416. label: 'Option2',
  417. children: [
  418. {
  419. value: 'axure1',
  420. label: 'Axure Components1',
  421. },
  422. ]
  423. },
  424. {
  425. value: 'Option3',
  426. label: 'Option3',
  427. children: [
  428. {
  429. value: 'axure2',
  430. label: 'Axure Components2',
  431. },
  432. ]
  433. },
  434. ]
  435. const props2 = {
  436. multiple: true,
  437. checkStrictly: true,
  438. }
  439. //查看学区详情 学校的列表
  440. let tableData = ref([
  441. {
  442. name: '成都市外国语小学',
  443. schoolnum: 56,
  444. teachnum: 132,
  445. studentnum: 560,
  446. classnum: 39,
  447. tnum: 78,
  448. timenum: 313,
  449. powertype: 1,
  450. },
  451. ])
  452. let filterValue = ref()
  453. let filterType = ref('day')
  454. let basicaList = ref([
  455. { title: '学生人次', icon: '#icon-zongrenshu', value: '7603', key: 'studentnum' },
  456. { title: '学生参与总时数', icon: '#icon-_shijian_xiaoshuai', value: '8小时', key: 'participationnum' },
  457. { title: '课堂总数', icon: '#icon-ketang', value: '45', key: 'classnum' },
  458. { title: '课堂总时数', icon: '#icon--shijian ', value: '648', key: 'classtime' },
  459. ])
  460. let powerList = ref({
  461. facility: [
  462. { name: '设备数量', value: 0, },
  463. { name: '无授权设备', value: 0, },
  464. { name: '授权设备', value: 0, }
  465. ],
  466. class: [
  467. { name: '928授权', value: 0 },
  468. { name: 'ID授权', value: 0 },
  469. { name: '设备授权', value: 0 },
  470. { name: '综合授权', value: 0 },
  471. ]
  472. })
  473. let itemWidth = ref((100 / basicaList.value.length).toFixed(2))
  474. let statisticsTime = ref({
  475. year: 0,
  476. month: 0,
  477. day: 0
  478. })
  479. //处理默认呈现还是学区呈现
  480. let schoolData = ref({
  481. name: '',
  482. region: '',
  483. province: '',
  484. city: '',
  485. dist: '',
  486. })
  487. let lessonsList = ref([
  488. { icon: '#icon--caozuorizhi', title: 'IES课程', content: '使用IES课程', state: true, value: 0 },
  489. { icon: '#icon--caozuorizhi', title: 'webIrs', content: '使用webIrs', state: true, value: 0 },
  490. { icon: '#icon--caozuorizhi', title: 'IRS', content: '使用IRS', state: true, value: 0 },
  491. { icon: '#icon--caozuorizhi', title: 'HiTA', content: '使用HiTA', state: false, value: 0 },
  492. { icon: '#icon--caozuorizhi', title: 'HaBoard', content: '使用HaBoard', state: false, value: 0 },
  493. { icon: '#icon--caozuorizhi', title: 'IES5资源', content: '使用IES5资源', state: true, value: 0 },
  494. { icon: '#icon--caozuorizhi', title: 'T指数', content: '课程T绿灯数', state: true, value: 0 },
  495. ])
  496. let inuseList = ref([
  497. { title: '学习任务数', value: 15, icon: '#icon-renwu', percent: '41.2%', class: 'task', textClass: 'task-text' },
  498. { title: '学习作品数', value: 10, icon: '#icon-yiwancheng-', percent: '30%', class: 'accomplish', textClass: 'accomplish-text' },
  499. { title: '测验题目数', value: 22, icon: '#icon-ic_mianxing_jiakaotimu_1', percent: '10%', class: 'topic', textClass: 'topic-text' },
  500. { title: '学生互动次数', value: 58, icon: '#icon-hudongshequ', percent: '5%', class: 'interaction', textClass: 'interaction-text' },
  501. ])
  502. let classType = ref([
  503. { name: '合作型态课堂', value: 20, percent: '41.2%', class: 'task', textClass: 'task-text' },
  504. { name: '互动型态课堂', value: 20, percent: '30%', class: 'accomplish', textClass: 'accomplish-text' },
  505. { name: '任务型态课堂', value: 20, percent: '10%', class: 'topic', textClass: 'topic-text' },
  506. { name: '差异化形态课堂', value: 20, percent: '5%', class: 'interaction', textClass: 'interaction-text' },
  507. { name: '测验型态课堂', value: 30, percent: '15%', class: 'testclass', textClass: 'testclass-text' },
  508. { name: '无型态课堂', value: 0, percent: '0%', class: 'noneclass', textClass: 'noneclassclass-text' },
  509. { name: '未上课', value: 0, percent: '0%', class: 'noneclass', textClass: 'noneclassclass-text' },
  510. ])
  511. let echartData = ref({
  512. total: 0,
  513. xlines: {
  514. tooltip: {
  515. trigger: 'axis',
  516. axisPointer: {
  517. show: true,
  518. status: 'shadow',
  519. z: -1,
  520. shadowStyle: {
  521. color: 'rgba(81, 138, 252, 0.1)',
  522. },
  523. type: 'shadow'
  524. }
  525. },
  526. grid: {
  527. bottom: '0%',
  528. left: '5%',
  529. right: '5%',
  530. top: '8%',
  531. containLabel: true,
  532. },
  533. xAxis: {
  534. position: 'bottom',
  535. type: 'category',
  536. axisLine: {
  537. show: true,
  538. lineStyle: {
  539. color: '#ECF1F6'
  540. }
  541. },
  542. axisTick: {
  543. show: false,
  544. },
  545. axisLabel: {
  546. show: true,
  547. rotate: 0,
  548. fontSize: 12,
  549. color: 'rgba(0, 0, 0, 1)'
  550. },
  551. splitLine: {
  552. show: true,
  553. lineStyle: {
  554. color: 'rgba(193, 207, 220, 1)',
  555. width: 0,
  556. type: 'dashed'
  557. }
  558. },
  559. boundaryGap: true, // 坐标轴两边是否留白
  560. data: ['合作', '互动', '任务', '差异化', '测验', '无型态', '未上课']
  561. },
  562. yAxis: [
  563. {
  564. type: 'value',
  565. position: 'left',
  566. minInterval: 0,
  567. // maxInterval: 5,
  568. axisLine: {
  569. show: false,
  570. },
  571. axisTick: {
  572. show: false,
  573. },
  574. axisLabel: {
  575. show: true,
  576. rotate: 0,
  577. fontSize: 12,
  578. color: 'rgba(0, 0, 0, 1)',
  579. },
  580. splitLine: {
  581. show: true,
  582. lineStyle: {
  583. color: 'rgba(193, 207, 220, 1)',
  584. width: 1,
  585. type: 'solid'
  586. }
  587. },
  588. }
  589. ],
  590. series: [
  591. {
  592. type: 'bar',
  593. data: [],
  594. itemStyle: {
  595. normal: {
  596. color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
  597. offset: 0,
  598. color: "rgba(124, 135, 254, 1)"
  599. },
  600. {
  601. offset: 1,
  602. color: "rgba(81, 138, 252, 1)"
  603. }
  604. ])
  605. }
  606. },
  607. label: {
  608. normal: {
  609. show: true,
  610. position: "top",
  611. textStyle: {
  612. color: "rgba(63, 149, 218, 1)",
  613. fontSize: 18,
  614. fontFamily: 'DIN',
  615. fontWeight: 'bold'
  616. }
  617. }
  618. },
  619. barMaxWidth: '20%',
  620. }
  621. ]
  622. }
  623. })
  624. function init (transfervalue) {
  625. // let totalsArr = []
  626. // inuseList.value.forEach((item) => { totalsArr.push(item.value) })
  627. // console.log(totalsArr)
  628. // let totalNum = totalsArr.reduce(function (prev, cur) {
  629. // return prev + cur;
  630. // })
  631. // props.pattern.state ==='school' ? appearState.value='default': props.pattern.state ==='area' ? appearState.value='area':appearState.value='default'
  632. let propsbox=transfervalue? transfervalue:props
  633. console.log(propsbox,props,'数据1234')
  634. //学校基础信息
  635. // let { name, region, province, city, dist } = propsbox.detailsData.school
  636. // schoolData.value.name = appearState.value ==='default' ? name: appearState.value ==='area' ? propsbox.detailsData.name:''
  637. // schoolData.value.region = region
  638. // schoolData.value.province = province
  639. // schoolData.value.city = city
  640. // schoolData.value.dist = dist
  641. //处理header基础信息
  642. let { schoolId, stuShow, lessonLengMin, lessonRecord, stuLessonLengMin, tmidCnt, year, month, day } = propsbox.detailsData
  643. statisticsTime.value.year = year
  644. statisticsTime.value.month = month
  645. statisticsTime.value.day = day
  646. console.log(schoolId, stuShow, '!!!!!')
  647. // basicaList.value[0].value = schoolId
  648. // basicaList.value[1].value = 0
  649. // basicaList.value[2].value = 0
  650. // basicaList.value[0].value = tmidCnt
  651. basicaList.value[0].value = stuShow
  652. basicaList.value[1].value = stuLessonLengMin
  653. basicaList.value[2].value = lessonRecord
  654. basicaList.value[3].value = lessonLengMin
  655. //处理课中使用数据
  656. let { useIES, useWebIrs, useDeviceIrs, useHita, useHaboard, useIES5Resource, tGreen } = propsbox.detailsData
  657. lessonsList.value[0].value = useIES
  658. lessonsList.value[1].value = useWebIrs
  659. lessonsList.value[2].value = useDeviceIrs
  660. lessonsList.value[3].value = useHita
  661. lessonsList.value[4].value = useHaboard
  662. lessonsList.value[5].value = useIES5Resource
  663. lessonsList.value[6].value = tGreen
  664. //授权占比
  665. // let { deviceCnt, deviceNoAuth, deviceAuth, lessonCnt928, lessonCntId, lessonCntDevice, lessonCntIdDevice } = propsbox.detailsData
  666. // powerList.value.facility[0].value = deviceCnt
  667. // // basicaList.value[2].value = deviceCnt
  668. // powerList.value.facility[1].value = deviceNoAuth
  669. // powerList.value.facility[2].value = deviceAuth
  670. // powerList.value.class[0].value = lessonCnt928
  671. // powerList.value.class[1].value = lessonCntId
  672. // powerList.value.class[2].value = lessonCntDevice
  673. // powerList.value.class[3].value = lessonCntIdDevice
  674. //处理任务数、作品完成、题目等。。。。
  675. let { mission, missionFin, item, interact } = propsbox.detailsData
  676. inuseList.value[0].value = mission
  677. inuseList.value[1].value = missionFin
  678. inuseList.value[2].value = item
  679. inuseList.value[3].value = interact
  680. //处理多形态课堂
  681. let { lTypeCoop, lTypeIact, lTypeMis, lTypeTst, lTypeDif, lTypeNone,lessonLeng0} = propsbox.detailsData
  682. let totalNum = [lTypeCoop, lTypeIact, lTypeMis, lTypeTst, lTypeDif].reduce((prev, cur) => { return prev + cur }, 0)
  683. echartData.value.total = totalNum
  684. console.log(totalNum)
  685. classType.value[0].value = lTypeCoop
  686. classType.value[0].percent = lTypeCoop === 0 ? 0 : (lTypeCoop / totalNum).toFixed(2) * 100
  687. classType.value[1].value = lTypeIact
  688. classType.value[1].percent = lTypeIact === 0 ? 0 : (lTypeIact / totalNum).toFixed(2) * 100
  689. classType.value[2].value = lTypeMis
  690. classType.value[2].percent = lTypeMis === 0 ? 0 : (lTypeMis / totalNum).toFixed(2) * 100
  691. classType.value[3].value = lTypeTst
  692. classType.value[3].percent = lTypeTst === 0 ? 0 : (lTypeTst / totalNum).toFixed(2) * 100
  693. classType.value[4].value = lTypeDif
  694. classType.value[4].percent = lTypeDif === 0 ? 0 : (lTypeDif / totalNum).toFixed(2) * 100
  695. classType.value[4].value = lTypeNone
  696. classType.value[5].value = lessonLeng0 ? lessonLeng0:0
  697. //echarts占比
  698. echartData.value.xlines.series[0].data = [lTypeCoop, lTypeIact, lTypeMis, lTypeTst, lTypeDif, lTypeNone, classType.value[5].value]
  699. // echartData.value.xlines.series[1].data = [classType.value[1].percent]
  700. // echartData.value.xlines.series[2].data = [classType.value[2].percent]
  701. // echartData.value.xlines.series[3].data = [classType.value[3].percent]
  702. // echartData.value.xlines.series[4].data = [classType.value[4].percent]
  703. }
  704. function detailsSchool(value){
  705. console.log(value,'查看要传的数据')
  706. let params={detailsData:value}
  707. init(params)
  708. appearState.value = 'default'
  709. }
  710. function backbtn () {
  711. $myemit('myback', 'default')
  712. }
  713. onMounted(() => {
  714. init()
  715. })
  716. watch(() => props, (newValue) => {
  717. console.log()
  718. // propValue.value = newValue;
  719. let datas={detailsData:newValue.detailsData}
  720. init(datas)
  721. },{deep:true});
  722. watch(()=>props,(newdata)=>{
  723. console.log(newdata,'9999999999999999')
  724. })
  725. </script>
  726. <style scoped>
  727. .details-analysis {
  728. width: 100%;
  729. position: relative;
  730. }
  731. .header-select {
  732. width: 100%;
  733. height: 60px;
  734. line-height: 60px;
  735. background-color: #fff;
  736. box-shadow: 0 2px 5px #e9e9e9;
  737. }
  738. .header-select-title,
  739. .header-select-box {
  740. display: inline-block;
  741. float: left;
  742. width: 50%;
  743. text-align: left;
  744. padding-left: 1%;
  745. line-height: 60px;
  746. }
  747. .header-select-title {
  748. font-size: 18px;
  749. font-weight: bold;
  750. }
  751. .header-select-box {
  752. text-align: right;
  753. padding-right: 1%;
  754. }
  755. .select-box-time,
  756. .select-box-area,
  757. .select-box-school {
  758. display: inline-block;
  759. vertical-align: top;
  760. padding-top: 1%;
  761. }
  762. .contentbox {
  763. width: 98%;
  764. /* padding: 1% 1%; */
  765. /* background: rgb(250, 250, 250); */
  766. /* height: 85vh; */
  767. /* margin: 0.5% 1%; */
  768. padding-bottom: 0.5%;
  769. }
  770. .area-contentbox {
  771. width: 100%;
  772. margin: 0%;
  773. }
  774. .analysisicon {
  775. width: 1.5em;
  776. height: 1.5em;
  777. vertical-align: -0.2em;
  778. fill: currentColor;
  779. /* overflow: hidden;
  780. margin-right: 25px;
  781. margin-left: 0px; */
  782. }
  783. .basicsdata-box {
  784. overflow: hidden;
  785. width: 100%;
  786. /* height: 30vh; */
  787. display: flex;
  788. flex-wrap: nowrap;
  789. justify-content: space-between;
  790. }
  791. .apparatusAndpower {
  792. width: 100%;
  793. display: flex;
  794. flex-wrap: nowrap;
  795. line-height: 60px;
  796. /* justify-content: space-between; */
  797. }
  798. .apparatus-box,
  799. .power-box {
  800. width: 32%;
  801. box-shadow: 0 2px 5px #e9e9e9;
  802. background: #fff;
  803. margin: 0.5%;
  804. border-radius: 5px;
  805. display: flex;
  806. justify-content: space-between;
  807. /* align-items: center; */
  808. flex-wrap: wrap;
  809. }
  810. .apparatus-item {
  811. width: 30%;
  812. margin: 0% 1%;
  813. box-shadow: 0 2px 5px #e9e9e9;
  814. background: #fff;
  815. border-radius: 5px;
  816. margin: 1%;
  817. }
  818. .power-item {
  819. width: 23%;
  820. margin: 0% 1%;
  821. box-shadow: 0 2px 5px #e9e9e9;
  822. background: #fff;
  823. border-radius: 5px;
  824. margin: 1%;
  825. }
  826. .apparatus-title {
  827. font-size: 16px;
  828. margin-bottom: 5px;
  829. border-bottom: 1px dashed #e9e9e9;
  830. line-height: 40px;
  831. width: 100%;
  832. background: #dfe6e9;
  833. color: #fff;
  834. font-weight: bold;
  835. }
  836. .inuse-title {
  837. width: 100%;
  838. background: #dfe6e9;
  839. margin-bottom: 5px;
  840. line-height: 25px;
  841. border-bottom: 1px dashed #e9e9e9;
  842. font-size: 16px;
  843. font-weight: bold;
  844. color: #fff;
  845. }
  846. .item-num {
  847. font-size: 20px;
  848. font-weight: bold;
  849. }
  850. .basicadata-item {
  851. display: flex;
  852. width: 20%;
  853. padding: 5px 5px;
  854. flex-direction: column;
  855. /* height: 60px; */
  856. line-height: 20px;
  857. border-radius: 5px;
  858. box-shadow: 0 2px 5px #e9e9e9;
  859. background: #fff;
  860. margin: 0.5%;
  861. }
  862. .item-title-images {
  863. width: 100%;
  864. display: flex;
  865. flex-wrap: nowrap;
  866. justify-content: space-between;
  867. }
  868. .item-title {
  869. font-size: 18px;
  870. font-weight: bold;
  871. color: #9ba1b4;
  872. }
  873. .item-nums {
  874. width: 100%;
  875. font-size: 20px;
  876. font-weight: bold;
  877. color: #303a5d;
  878. }
  879. .item-nums-special {
  880. width: 100%;
  881. font-size: 20px;
  882. font-weight: bold;
  883. color: #303a5d;
  884. line-height: 20px;
  885. }
  886. .timetag {
  887. font-size: 14px;
  888. margin-left: 1%;
  889. color: #7f8c8d;
  890. }
  891. .minxinbox {
  892. width: 100%;
  893. display: flex;
  894. }
  895. .lessons-box {
  896. width: 50%;
  897. height: 36.3vh;
  898. border-radius: 5px;
  899. background: #fff;
  900. box-shadow: 0 2px 5px #e9e9e9;
  901. margin: 0.5% 1%;
  902. overflow: hidden;
  903. overflow-y: auto;
  904. }
  905. .lessons-item {
  906. width: 100%;
  907. padding: 0% 10%;
  908. display: flex;
  909. /* justify-content: center; */
  910. text-align: center;
  911. /* margin: 0 auto; */
  912. line-height: 40px;
  913. box-shadow: 0 2px 5px #e9e9e9;
  914. margin-top: 0.8%;
  915. background: #dfe6e9;
  916. }
  917. .lessons-img-title {
  918. width: 20%;
  919. display: flex;
  920. align-items: center;
  921. }
  922. .lessons-img {
  923. width: 45px;
  924. height: 45px;
  925. /* background: #bdc3c7; */
  926. position: relative;
  927. border-radius: 5px;
  928. }
  929. .lessonsicon {
  930. position: absolute;
  931. width: 25px;
  932. height: 25px;
  933. vertical-align: -0.5em;
  934. fill: currentColor;
  935. top: 0;
  936. left: 0;
  937. right: 0;
  938. bottom: 0;
  939. margin: auto;
  940. }
  941. .lesson-title {
  942. margin-left: 1%;
  943. font-size: 16px;
  944. color: #b2b2b9;
  945. }
  946. .inquirybox {
  947. width: 40%;
  948. font-size: 16px;
  949. font-weight: bold;
  950. }
  951. .less-value {
  952. width: 15%;
  953. color: #6fb1fc;
  954. }
  955. .result-box {
  956. width: 15%;
  957. text-align: right;
  958. }
  959. .lessRicon {
  960. width: 2em;
  961. height: 2em;
  962. vertical-align: -0.5em;
  963. fill: currentColor;
  964. }
  965. .lessvalue-num {
  966. font-size: 18px;
  967. color: #007fff;
  968. }
  969. .inuse-left {
  970. width: 100%;
  971. box-shadow: 0 2px 5px #e9e9e9;
  972. background: #fff;
  973. margin: 0.5%;
  974. border-radius: 5px;
  975. display: flex;
  976. justify-content: space-around;
  977. align-items: center;
  978. flex-wrap: wrap;
  979. }
  980. .inuse-right {
  981. width: 49.5%;
  982. margin-left: 0%;
  983. border-radius: 5px;
  984. background: #fff;
  985. box-shadow: 0 2px 5px #e9e9e9;
  986. margin: 0.5% 0%;
  987. /* margin-left: 1%; */
  988. position: relative;
  989. }
  990. .inuse-item {
  991. width: 22%;
  992. display: flex;
  993. height: 80px;
  994. /* line-height: 40px; */
  995. justify-content: center;
  996. align-items: center;
  997. border-radius: 5px;
  998. /* box-shadow: 0 2px 5px #e9e9e9; */
  999. border: 1px solid #e9e9e9;
  1000. margin: 0.5%;
  1001. }
  1002. .inuseicon {
  1003. width: 1.6em;
  1004. height: 1.6em;
  1005. vertical-align: -0.5em;
  1006. fill: currentColor;
  1007. }
  1008. .item-box {
  1009. width: 54%;
  1010. padding: 5px 0px;
  1011. line-height: 20px;
  1012. }
  1013. .item-img {
  1014. width: 45%;
  1015. }
  1016. .item-box p,
  1017. .inuse-total p {
  1018. font-size: 22px;
  1019. color: #303a5d;
  1020. font-weight: bold;
  1021. margin-bottom: 5px;
  1022. }
  1023. .item-box span,
  1024. .inuse-total span {
  1025. font-size: 14px;
  1026. color: #b2b2b9;
  1027. }
  1028. .inuse-total {
  1029. position: absolute;
  1030. top: 5%;
  1031. left: 5%;
  1032. width: 30%;
  1033. line-height: 20px;
  1034. text-align: left;
  1035. }
  1036. .echartsX {
  1037. width: 100%;
  1038. height: 90%;
  1039. margin-top: 5%;
  1040. overflow: hidden;
  1041. }
  1042. .inuse-below {
  1043. width: 100%;
  1044. display: flex;
  1045. padding: 0% 1%;
  1046. justify-content: space-between;
  1047. align-items: center;
  1048. }
  1049. .below-item {
  1050. width: 13%;
  1051. line-height: 18px;
  1052. text-align: left;
  1053. margin-left: 2%;
  1054. }
  1055. .below-item p {
  1056. text-align: left;
  1057. font-size: 14px;
  1058. color: #b2b2b9;
  1059. }
  1060. .valuebox {
  1061. display: flex;
  1062. justify-content: space-between;
  1063. }
  1064. .valuebox span {
  1065. font-size: 18px;
  1066. color: #303a5d;
  1067. font-weight: bold;
  1068. margin-left: 5px;
  1069. }
  1070. .valuebox span:nth-child(2) {
  1071. font-size: 14px;
  1072. margin-left: 30px;
  1073. font-weight: bold;
  1074. }
  1075. .school-name {
  1076. line-height: 40px;
  1077. font-size: 20px;
  1078. font-weight: bold;
  1079. /* border-bottom: 1px dashed #ccc; */
  1080. position: relative;
  1081. }
  1082. .class-title {
  1083. margin-top: 0%;
  1084. font-size: 16px;
  1085. color: #303a5d;
  1086. }
  1087. .lastbtn {
  1088. width: 80px;
  1089. height: auto;
  1090. line-height: 20px;
  1091. position: absolute;
  1092. left: 0.5%;
  1093. top: 45%;
  1094. opacity: 0.4;
  1095. display: flex;
  1096. flex-wrap: wrap;
  1097. justify-content: center;
  1098. align-items: center;
  1099. border-radius: 5px;
  1100. font-size: 14px;
  1101. padding: 5px;
  1102. }
  1103. .nextbtn {
  1104. width: 80px;
  1105. height: auto;
  1106. line-height: 20px;
  1107. position: absolute;
  1108. right: 0.5%;
  1109. top: 45%;
  1110. opacity: 0.4;
  1111. display: flex;
  1112. flex-wrap: wrap;
  1113. justify-content: center;
  1114. align-items: center;
  1115. border-radius: 5px;
  1116. font-size: 14px;
  1117. padding: 5px;
  1118. }
  1119. .lastbtn:hover,
  1120. .nextbtn:hover {
  1121. background-color: #dfe6e9;
  1122. opacity: 1;
  1123. box-shadow: rgba(6, 24, 44, 0.1) 0px 0px 0px 2px,
  1124. rgba(6, 24, 44, 0.1) 0px 4px 6px -1px,
  1125. rgba(255, 255, 255, 0.08) 0px 1px 0px inset;
  1126. cursor: pointer;
  1127. }
  1128. .lastbtn:hover .btn-ls-text,
  1129. .nextbtn:hover .btn-ls-text {
  1130. opacity: 0.8;
  1131. }
  1132. .btn-ls {
  1133. width: 100%;
  1134. }
  1135. .btn-ls-text {
  1136. margin-top: 3px;
  1137. color: #303a5d;
  1138. opacity: 0;
  1139. }
  1140. .last-btns {
  1141. width: 40px;
  1142. height: 40px;
  1143. vertical-align: -0.5em;
  1144. fill: currentColor;
  1145. }
  1146. .btn-ls-text p {
  1147. margin-bottom: 5px;
  1148. }
  1149. .next-school {
  1150. font-size: 12px;
  1151. color: #303a5d;
  1152. font-weight: bold;
  1153. }
  1154. .next-title {
  1155. font-size: 8px;
  1156. color: #34495e;
  1157. }
  1158. .statistics-time {
  1159. position: absolute;
  1160. right: 0.5%;
  1161. top: 0.5%;
  1162. font-size: 14px;
  1163. color: #9ba1b4;
  1164. }
  1165. .statistics-address {
  1166. position: absolute;
  1167. left: 0.5%;
  1168. top: 0.5%;
  1169. font-size: 14px;
  1170. color: #9ba1b4;
  1171. }
  1172. /*学区样式*/
  1173. .area-box {
  1174. line-height: 60px;
  1175. }
  1176. .school-list {
  1177. padding: 0.5%;
  1178. }
  1179. .areaFilter {
  1180. padding: 0% 0.5%;
  1181. display: flex;
  1182. justify-content: space-between;
  1183. }
  1184. .task {
  1185. border-bottom: 5px solid #60e9c0;
  1186. }
  1187. .accomplish {
  1188. border-bottom: 5px solid #03241b;
  1189. }
  1190. .topic {
  1191. border-bottom: 5px solid #62d0f3;
  1192. }
  1193. .interaction {
  1194. border-bottom: 5px solid #fd79a8;
  1195. }
  1196. .testclass {
  1197. border-bottom: 5px solid #c3bef0;
  1198. }
  1199. .noneclass {
  1200. border-bottom: 5px solid #95a5a6;
  1201. }
  1202. .task-text {
  1203. color: #60e9c0 !important;
  1204. }
  1205. .accomplish-text {
  1206. color: #03241b !important;
  1207. }
  1208. .topic-text {
  1209. color: #62d0f3 !important;
  1210. }
  1211. .interaction-text {
  1212. color: #fd79a8 !important;
  1213. }
  1214. .testclass-text {
  1215. color: #c3bef0 !important;
  1216. }
  1217. .noneclassclass-text {
  1218. color: #95a5a6 !important;
  1219. }
  1220. @media screen and (max-width: 1400px) {
  1221. .basicadata-item {
  1222. line-height: 30px !important;
  1223. }
  1224. .item-img {
  1225. width: 35% !important;
  1226. }
  1227. .item-box {
  1228. width: 65% !important;
  1229. }
  1230. .inuse-total {
  1231. line-height: 16px;
  1232. }
  1233. .echartsX {
  1234. height: 95%;
  1235. margin-top: 4%;
  1236. }
  1237. .inuse-total {
  1238. top: 0%;
  1239. }
  1240. }
  1241. </style>
  1242. <style>
  1243. .select-box-time .el-date-editor,
  1244. .select-box-area .el-cascader,
  1245. .select-box-school .el-cascader {
  1246. display: inline-block;
  1247. vertical-align: top;
  1248. }
  1249. .area-box .el-tabs__header {
  1250. box-shadow: 0 2px 5px #e9e9e9;
  1251. background-color: #fff;
  1252. margin: 0px 0px 1px;
  1253. }
  1254. .area-box .el-tabs__nav-wrap {
  1255. padding: 0% 0.5%;
  1256. }
  1257. .area-box .el-tabs__header {
  1258. margin: 0;
  1259. }
  1260. .contentbox .el-divider {
  1261. margin: 10px 0;
  1262. }
  1263. </style>