teacher.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <script setup lang="ts">
  2. import _request from '../utils/request';
  3. import pie1 from './teacher/pie1.vue'
  4. import pie2 from './teacher/pie2.vue'
  5. import pie3 from './teacher/pie3.vue'
  6. const AllResponse = ref('');
  7. const left_top_mainShow = ref('');
  8. const left_middle_table = ref('');
  9. const left_bottom_table = ref('');
  10. const right_top_echartsData = ref('');
  11. const right_middle_echartsData = ref('');
  12. const right_bottom_echartsData = ref('');
  13. const initData = () => {
  14. _request({
  15. headers: {
  16. 'Content-Type': 'application/x-www-form-urlencoded',
  17. },
  18. baseURL:window.GLOBAL_CONFIG.api,
  19. url: "/openapi/chart/teacher_data.php",
  20. data:{},
  21. })
  22. .then(res => {
  23. if (res.code == '1') {
  24. AllResponse.value = res.data;
  25. console.log(res,"alvis")
  26. left_top_mainShow.value = res.data.left_top_mainShow;
  27. left_middle_table.value =res.data.left_middle_table ;
  28. left_bottom_table.value =res.data.left_bottom_table ;
  29. right_top_echartsData.value = res.data.right_top_echartsData;
  30. right_middle_echartsData.value = res.data.right_middle_echartsData;
  31. right_bottom_echartsData.value = res.data.right_bottom_echartsData;
  32. }
  33. })
  34. .catch(error=>{console.log(error)})
  35. }
  36. initData();
  37. // newTotal = numTrans(res.data.school_base_data.yhgmData.total)
  38. function numTrans(num) {
  39. let newNum = converToArray(num)
  40. if (newNum.length < 7) {
  41. const zero = []
  42. for (let i = 0; i < 7 - newNum.length; i++)
  43. zero.push(0)
  44. newNum = [...zero, ...newNum]
  45. // return [...zero, ...newNum]
  46. }
  47. return newNum
  48. }
  49. const converToArray = number => [...`${number}`].map(el => parseInt(el))
  50. </script>
  51. <template>
  52. <div class="flex justify-between">
  53. <div class="flex flex-col justify-between" style="width:49%;">
  54. <div class="w-full ">
  55. <div class="flex flex-row justify-between ">
  56. <div v-for="(item,index) in left_top_mainShow" :key="index" >
  57. <h4 class="text-lg font-medium">{{ item.title }}</h4>
  58. <!-- <div class="border-blue-500/50 text-4xl mt-2">{{ item.detailNum }}</div> -->
  59. <div class="border-blue-500/50 text-4xl mt-4 splitNum">
  60. <span class="bg-block">0</span>
  61. <span class="bg-block">1</span>
  62. <span class="bg-block">1</span>
  63. <span class="bg-block">1</span>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="w-full ">
  69. <div class="normalTable">
  70. <div class="flex justify-between normalTable_title" v-if="left_middle_table.mainTable">
  71. <div class="wslice5" v-for="(item,index) in left_middle_table.mainTable.secScholltableTitle " :key="index" >{{item }}</div>
  72. </div>
  73. <div class="normalTable_content" v-if="left_middle_table.mainTable" v-for="(item,index) in left_middle_table.mainTable.secSchollTableContent" :key="index">
  74. <div class="normalTable_contentDetile" >
  75. <div class="wslice5" >{{ item.a1}}</div>
  76. <div class="wslice5" >{{ item.a2 }}</div>
  77. <div class="wslice5" >{{ item.a3 }}</div>
  78. <div class="wslice5" >{{ item.a4 }}</div>
  79. <div class="wslice5" >{{ item.a5 }}</div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="w-full ">
  85. <div class="normalTable">
  86. <div class="flex justify-between normalTable_title" v-if="left_bottom_table.mainTable">
  87. <div class="wslice5" v-for="(item,index) in left_bottom_table.mainTable.secScholltableTitle" :key="index" >{{item }}</div>
  88. </div>
  89. <div class="normalTable_content" v-if="left_bottom_table.mainTable" v-for="(item,index) in left_bottom_table.mainTable.secSchollTableContent" :key="index">
  90. <div class="normalTable_contentDetile" >
  91. <div class="wslice5" >{{ item.a1}}</div>
  92. <div class="wslice5" >{{ item.a2 }}</div>
  93. <div class="wslice5" >{{ item.a3 }}</div>
  94. <div class="wslice5" >{{ item.a4 }}</div>
  95. <div class="wslice5" >{{ item.a5 }}</div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. <div class="w-960px flex flex-col justify-between" style="width:50%;">
  102. <div class="w-full h-300px flex flex-col border border-hex-0A337E bg-block p-6">
  103. <div class="text-lg mb-4 ">{{ right_top_echartsData.bigtitle }}</div>
  104. <div class="flex flex-auto">
  105. <pie1 v-show="right_top_echartsData.echartsData" :ecahrtsData="right_top_echartsData.echartsData" />
  106. </div>
  107. </div>
  108. <div class="w-full h-300px flex flex-col border border-hex-0A337E bg-block p-6" style="margin-top: 1%;">
  109. <div class="text-lg mb-4 ">{{ right_middle_echartsData.bigtitle }}</div>
  110. <div class="flex flex-auto">
  111. <pie2 v-show="right_middle_echartsData.echartsData" :ecahrtsData="right_middle_echartsData.echartsData" />
  112. </div>
  113. </div>
  114. <div class="w-full h-300px flex flex-col border border-hex-0A337E bg-block p-6" style="margin-top: 1%;">
  115. <div class="text-lg mb-4 ">{{ right_bottom_echartsData.bigtitle }}</div>
  116. <div class="flex flex-auto">
  117. <pie3 v-show="right_bottom_echartsData.echartsData" :ecahrtsData="right_bottom_echartsData.echartsData" />
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </template>
  123. <style scoped>
  124. .wslice8{
  125. width: 12%;
  126. }
  127. .wslice7{
  128. width: 14%;
  129. }
  130. .wslice6{
  131. width: 16%;
  132. }
  133. .wslice5{
  134. width: 20%;
  135. }
  136. .wslice4{
  137. width: 25%;
  138. }
  139. .normalTable_title{
  140. height:50px;
  141. line-height: 50px;
  142. box-sizing: border-box;
  143. padding:0 2%;
  144. background: linear-gradient(90deg,rgba(11,38,147,1) 0%, rgba(27,66,131,0) 100%);
  145. font-size: 14px;
  146. font-weight: normal;
  147. }
  148. .normalTable_title div{
  149. text-align: center;
  150. }
  151. .normalTable_content{
  152. display: flex;
  153. justify-content: space-between;
  154. height:40px;
  155. line-height:40px;
  156. box-sizing: border-box;
  157. padding:0 2%;
  158. background-color: rgba(0,22,68, 0.5);
  159. }
  160. .normalTable_contentDetile{
  161. width:100%;
  162. display: flex;
  163. flex-direction: row;
  164. justify-content:space-between;
  165. }
  166. .normalTable_contentDetile div{
  167. text-align: center;
  168. }
  169. .splitNum span{
  170. border: 2px solid rgba(35,188,248,1 );
  171. border-image-source: linear-gradient(135deg, #23BEFA, #0358C1);
  172. border-image-slice: 1;
  173. border-image-repeat: stretch;
  174. padding:2px 5px;
  175. margin-right: 3px;
  176. background-color: rgba(11,39,146,0.3);
  177. }
  178. </style>