index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <script setup lang="ts">
  2. import { GradeList } from "@/api/school/types";
  3. defineOptions({
  4. name: "ClassIndex",
  5. inheritAttrs: false,
  6. });
  7. import { watch } from "vue";
  8. import { useUserStore } from "@/store/modules/user";
  9. import { CaretBottom } from "@element-plus/icons-vue";
  10. import { getGradeList } from "@/api/school";
  11. const userStore = useUserStore();
  12. watch(
  13. () => userStore.schoolId,
  14. (newValue, oldValue) => {
  15. //console.log(newValue, oldValue);
  16. getGradeData(newValue);
  17. }
  18. );
  19. /**
  20. * 班级数据
  21. */
  22. const gradeData = ref<GradeList[]>();
  23. // 班级编号
  24. let gradeId = ref(0);
  25. async function getGradeData(schoolId: number) {
  26. getGradeList(schoolId)
  27. .then(({ data }) => {
  28. gradeData.value = data;
  29. if (gradeId.value == 0) {
  30. gradeId.value = data[0].id;
  31. }
  32. })
  33. .catch((error) => {
  34. console.log(error);
  35. });
  36. }
  37. onMounted(() => {
  38. getGradeData(userStore.schoolId);
  39. });
  40. // 折叠面板active
  41. const activeItem = ref();
  42. const tableData = ref<any>([
  43. {
  44. number: 1,
  45. name: "TomTomTom",
  46. phone: 1566666666,
  47. times: 12,
  48. },
  49. {
  50. number: 2,
  51. name: "TomTomTom",
  52. phone: 1566666666,
  53. times: 12,
  54. },
  55. {
  56. number: 3,
  57. name: "TomTomTom",
  58. phone: 1566666666,
  59. times: 12,
  60. },
  61. {
  62. number: 1,
  63. name: "TomTomTom",
  64. phone: 1566666666,
  65. times: 12,
  66. },
  67. {
  68. number: 2,
  69. name: "TomTomTom",
  70. phone: 1566666666,
  71. times: 12,
  72. },
  73. {
  74. number: 3,
  75. name: "TomTomTom",
  76. phone: 1566666666,
  77. times: 12,
  78. },
  79. {
  80. number: 1,
  81. name: "TomTomTom",
  82. phone: 1566666666,
  83. times: 12,
  84. },
  85. {
  86. number: 2,
  87. name: "TomTomTom",
  88. phone: 1566666666,
  89. times: 12,
  90. },
  91. {
  92. number: 3,
  93. name: "TomTomTom",
  94. phone: 1566666666,
  95. times: 12,
  96. },
  97. {
  98. number: 1,
  99. name: "TomTomTom",
  100. phone: 1566666666,
  101. times: 12,
  102. },
  103. {
  104. number: 2,
  105. name: "TomTomTom",
  106. phone: 1566666666,
  107. times: 12,
  108. },
  109. {
  110. number: 3,
  111. name: "TomTomTom",
  112. phone: 1566666666,
  113. times: 12,
  114. },
  115. {
  116. number: 1,
  117. name: "TomTomTom",
  118. phone: 1566666666,
  119. times: 12,
  120. },
  121. {
  122. number: 2,
  123. name: "TomTomTom",
  124. phone: 1566666666,
  125. times: 12,
  126. },
  127. {
  128. number: 3,
  129. name: "TomTomTom",
  130. phone: 1566666666,
  131. times: 12,
  132. },
  133. ]);
  134. </script>
  135. <template>
  136. <div class="class-container">
  137. <!-- 班级选择 -->
  138. <div class="class-select">
  139. <el-select
  140. v-model="gradeId"
  141. placeholder="全部班级"
  142. size="large"
  143. :suffix-icon="CaretBottom"
  144. >
  145. <el-option
  146. v-for="item in gradeData"
  147. :key="item.id"
  148. :label="item.name"
  149. :value="item.id"
  150. />
  151. </el-select>
  152. </div>
  153. <!-- 班级折叠面板-->
  154. <div class="list-collapse">
  155. <el-collapse v-model="activeItem">
  156. <el-collapse-item name="1">
  157. <template #title>
  158. <div class="title">
  159. <span class="blue mr-10">向日葵小班</span>
  160. <span class="mr-10">教师:松阪老师</span>
  161. <span>班级号:C 2208 887829</span>
  162. <span class="red ml-10">结课时间:2023-08-11</span>
  163. <span class="blue fr"
  164. >学生:12人
  165. <el-icon
  166. :class="
  167. activeItem && activeItem.includes('1') ? 'is-active' : ''
  168. "
  169. ><CaretBottom
  170. /></el-icon>
  171. </span>
  172. </div>
  173. </template>
  174. <div>
  175. <el-table :data="tableData" height="400" style="width: 100%">
  176. <el-table-column
  177. prop="number"
  178. label="序号"
  179. width="80"
  180. align="center"
  181. />
  182. <el-table-column
  183. prop="name"
  184. label="学生名称"
  185. width="180"
  186. align="center"
  187. />
  188. <el-table-column
  189. prop="phone"
  190. label="手机号"
  191. width="180"
  192. align="center"
  193. />
  194. <el-table-column
  195. prop="times"
  196. label="训练次数"
  197. width="180"
  198. align="center"
  199. />
  200. <el-table-column />
  201. </el-table>
  202. </div>
  203. </el-collapse-item>
  204. </el-collapse>
  205. </div>
  206. <div class="list-collapse">
  207. <el-collapse v-model="activeItem">
  208. <el-collapse-item name="2">
  209. <template #title>
  210. <div class="title">
  211. <span class="blue mr-10">向日葵小班</span>
  212. <span class="mr-10">教师:松阪老师</span>
  213. <span>班级号:C 2208 887829</span>
  214. <span class="red ml-10">结课时间:2023-08-11</span>
  215. <span class="blue fr"
  216. >学生:12人
  217. <el-icon
  218. :class="
  219. activeItem && activeItem.includes('2') ? 'is-active' : ''
  220. "
  221. ><CaretBottom
  222. /></el-icon>
  223. </span>
  224. </div>
  225. </template>
  226. <div>
  227. <el-table :data="tableData" height="400" style="width: 100%">
  228. <el-table-column
  229. prop="number"
  230. label="序号"
  231. width="80"
  232. align="center"
  233. />
  234. <el-table-column
  235. prop="name"
  236. label="学生名称"
  237. width="180"
  238. align="center"
  239. />
  240. <el-table-column
  241. prop="phone"
  242. label="手机号"
  243. width="180"
  244. align="center"
  245. />
  246. <el-table-column
  247. prop="times"
  248. label="训练次数"
  249. width="180"
  250. align="center"
  251. />
  252. <el-table-column />
  253. </el-table>
  254. </div>
  255. </el-collapse-item>
  256. </el-collapse>
  257. </div>
  258. </div>
  259. </template>
  260. <style lang="scss" scoped>
  261. .class-container {
  262. position: relative;
  263. padding: 20px 30px;
  264. }
  265. .class-select {
  266. margin-bottom: 20px;
  267. .el-select {
  268. width: 160px;
  269. margin: 0;
  270. }
  271. }
  272. :deep(.el-input__wrapper) {
  273. background: #ffffff;
  274. border-radius: 12px;
  275. }
  276. /* el-select 各种边框线隐藏**/
  277. :deep(.el-select) {
  278. --el-select-input-focus-border-color: none !important;
  279. }
  280. :deep(.el-input__wrapper) {
  281. box-shadow: none !important;
  282. }
  283. :deep(.el-select .el-input__wrapper.is-focus) {
  284. box-shadow: none !important;
  285. }
  286. :deep(.el-select:hover:not(.el-select--disabled) .el-input__wrapper) {
  287. box-shadow: none !important;
  288. }
  289. .list-collapse {
  290. background: #ffffff;
  291. border-radius: 25px;
  292. padding: 0 32px;
  293. margin-bottom: 10px;
  294. .title {
  295. width: 100%;
  296. font-size: 18px;
  297. .blue {
  298. color: #4284f2;
  299. }
  300. .red {
  301. color: #e04962;
  302. }
  303. .fr {
  304. float: right;
  305. }
  306. .el-icon {
  307. vertical-align: middle;
  308. &.is-active {
  309. transform: rotate(180deg);
  310. }
  311. }
  312. }
  313. :deep(.el-collapse),
  314. :deep(.el-collapse-item__header),
  315. :deep(.el-collapse-item__wrap) {
  316. border: none;
  317. }
  318. :deep(.el-collapse-item__arrow) {
  319. display: none;
  320. }
  321. }
  322. :deep(.el-table th.el-table__cell) {
  323. background: #e9ebee;
  324. }
  325. </style>