Commit 11d037abedea4eef2309320b7dcfaaa4486c8d7d

Authored by Neeraj Sharma
1 parent 229463bd5f

commit code

src/Services/http.js
1 1 import axios from 'axios'
2 2 import store from '@/store/store'
3 3  
4   -const baseDomain = "http://15.206.52.174:8001/v1";
  4 +const baseDomain = "https://api-dashboard.intrack.in/v1";
5 5  
6 6 const baseURL = `${baseDomain}`;
7 7 // var token = ""
... ...
... ... @@ -311,7 +311,7 @@ const teacherMenu = [{
311 311 items: [
312 312 { name: 'Course', title: 'Course', component: 'Course', action: '', },
313 313 { name: 'Enroll Students', title: 'Enroll Students', component: 'Enroll Students', action: '', },
314   - // { name: 'Assignment', title: 'Assignment', component: 'Assignment', action: '', },
  314 + { name: 'Course Detail', title: 'Course Detail', component: 'Course Detail', action: '', },
315 315 // { name: 'Routine', title: 'Routine', component: 'Routine', action: '', },
316 316 ]
317 317 },
... ... @@ -381,6 +381,11 @@ const teacherMenu = [{
381 381 }
382 382 ];
383 383  
  384 +const parentMenu = [{
  385 + title: 'Dashboard',
  386 + name: 'Dashboard',
  387 + icon: '/static/icon/dashboard.png',
  388 +}];
384 389 // reorder menu
385 390 // Menu.forEach((item) => {
386 391 // if (item.items) {
... ... @@ -392,4 +397,4 @@ const teacherMenu = [{
392 397 // }
393 398 // });
394 399  
395   -export default { adminMenu, schoolMenu, teacherMenu, libraryMenu, accountMenu };
396 400 \ No newline at end of file
  401 +export default { adminMenu, schoolMenu, teacherMenu, libraryMenu, accountMenu, parentMenu };
397 402 \ No newline at end of file
... ...
src/components/pageHeader/AppDrawer.vue
... ... @@ -486,6 +486,98 @@
486 486 <!-- </a> -->
487 487 </v-list-tile>
488 488 </template>
  489 + <template v-for="(item, i) in menuParent" v-if="role === 'PARENT'">
  490 + <!-- {{menus}} -->
  491 + <!--group with subitems-->
  492 + <v-list-group v-if="item.items" :key="item.name" :group="item.group" no-action="no-action">
  493 + <v-list-tile slot="activator" ripple="ripple">
  494 + <v-list-tile-action v-if="item.icon">
  495 + <img :src="item.icon" width="22" alt="icons" />
  496 + </v-list-tile-action>
  497 + <v-list-tile-content>
  498 + <v-list-tile-title>{{ item.title }}</v-list-tile-title>
  499 + </v-list-tile-content>
  500 + </v-list-tile>
  501 + <template v-for="(subItem, i) in item.items">
  502 + <!--sub group-->
  503 + <v-list-group
  504 + v-if="subItem.items"
  505 + :key="subItem.name"
  506 + :group="subItem.group"
  507 + sub-group="sub-group"
  508 + >
  509 + <v-list-tile slot="activator" ripple="ripple">
  510 + <v-list-tile-content>
  511 + <v-list-tile-title>{{ subItem.title }}</v-list-tile-title>
  512 + </v-list-tile-content>
  513 + </v-list-tile>
  514 + <v-list-tile
  515 + v-for="(grand, i) in subItem.children"
  516 + :key="i"
  517 + :to="genChildTarget(item, grand)"
  518 + :href="grand.href"
  519 + ripple="ripple"
  520 + >
  521 + <v-list-tile-content>
  522 + <v-list-tile-title>{{ grand.title }}</v-list-tile-title>
  523 + </v-list-tile-content>
  524 + </v-list-tile>
  525 + </v-list-group>
  526 + <!--child item-->
  527 + <v-list-tile
  528 + v-else
  529 + :key="i"
  530 + :to="genChildTarget(item, subItem)"
  531 + :href="subItem.href"
  532 + :disabled="subItem.disabled"
  533 + :target="subItem.target"
  534 + ripple="ripple"
  535 + >
  536 + <v-list-tile-action v-if="subItem.action">
  537 + <img
  538 + width="30"
  539 + :src="subItem.action"
  540 + :class="[subItem.actionClass || 'success--text']"
  541 + />
  542 + </v-list-tile-action>
  543 + <v-list-tile-content>
  544 + <v-list-tile-title class="body-2">
  545 + <span>{{ subItem.title }}</span>
  546 + </v-list-tile-title>
  547 + </v-list-tile-content>
  548 + <!-- <v-circle class="white--text pa-0 circle-pill" v-if="subItem.badge" color="red" disabled="disabled">{{ subItem.badge }}</v-circle> -->
  549 + </v-list-tile>
  550 + </template>
  551 + </v-list-group>
  552 + <v-subheader v-else-if="item.header" :key="i">{{ item.header }}</v-subheader>
  553 + <v-divider v-else-if="item.divider" :key="i"></v-divider>
  554 + <!--top-level link-->
  555 + <v-list-tile
  556 + v-else
  557 + ripple="ripple"
  558 + :disabled="item.disabled"
  559 + :target="item.target"
  560 + rel="noopener"
  561 + :key="item.name"
  562 + :to="!item.href ? { name: item.name } : null"
  563 + :href="item.href"
  564 + >
  565 + <!-- <a :href="item.path"> -->
  566 + <v-list-tile-action v-if="item.icon">
  567 + <img :src="item.icon" width="22" alt="icons" />
  568 + </v-list-tile-action>
  569 + <v-list-tile-content class="pt-2">
  570 + <v-list-tile-title>{{ item.title }}</v-list-tile-title>
  571 + </v-list-tile-content>
  572 + <!-- <v-circle class="white--text pa-0 chip--x-small" v-if="item.badge" :color="item.color || 'primary'" disabled="disabled">{{ item.badge }}</v-circle> -->
  573 + <v-list-tile-action v-if="item.subAction">
  574 + <!-- <v-icon class="success--text">{{ item.subAction }}</v-icon> -->
  575 + <!-- <img :src="item.icon" width="40" alt="icons" /> -->
  576 + </v-list-tile-action>
  577 + <!-- <v-circle class="caption blue lighten-2 white--text mx-0" v-else-if="item.chip" label="label" small="small">{{ item.chip }}</v-circle> -->
  578 + <!-- </a> -->
  579 + </v-list-tile>
  580 + </template>
489 581 </v-list>
490 582 <!-- </vue-perfect-scrollbar> -->
491 583 </v-navigation-drawer>
... ... @@ -512,6 +604,7 @@ export default {
512 604 menuTeacher: [],
513 605 menuAccount: [],
514 606 menuLibrarian: [],
  607 + menuParent: [],
515 608 schoolRole: "",
516 609 role: "",
517 610 scrollSettings: {
... ... @@ -538,6 +631,7 @@ export default {
538 631 this.menuTeacher = menu.teacherMenu;
539 632 this.menuAccount = menu.accountMenu;
540 633 this.menuLibrarian = menu.libraryMenu;
  634 + this.menuParent = menu.parentMenu;
541 635 // console.log("this.$route.name", this.$route.name);
542 636 // if (this.$route.name === "School") {
543 637 // localStorage.setItem("SchoolName", this.$route.name);
... ... @@ -599,6 +693,9 @@ export default {
599 693 if (this.$store.state.role === "LIBRARIAN") {
600 694 this.token = this.$store.state.token;
601 695 }
  696 + if (this.$store.state.role === "PARENT") {
  697 + this.token = this.$store.state.token;
  698 + }
602 699 }
603 700 };
604 701 </script>
... ...
src/components/pageHeader/AppToolbar.vue
... ... @@ -19,9 +19,9 @@
19 19 </v-flex>
20 20 <v-spacer></v-spacer>
21 21 <v-btn type="button" @click="goToSchool" v-if="adminRole && SchoolRole">Towards School!</v-btn>
22   - <v-toolbar-items class="hidden-sm-and-down">
  22 + <!-- <v-toolbar-items class="hidden-sm-and-down">
23 23 <v-icon class="header-icon">notifications_none</v-icon>
24   - </v-toolbar-items>
  24 + </v-toolbar-items>-->
25 25 <v-menu offset-y origin="center center" :nudge-bottom="10" transition="scale-transition">
26 26 <v-btn icon large flat slot="activator">
27 27 <v-avatar size="26">
... ... @@ -97,6 +97,18 @@ export default {
97 97 mounted() {
98 98 // this.getUserData();
99 99 this.adminRole = this.$store.state.role;
  100 + if (this.adminRole == "PARENT") {
  101 + var obj = {};
  102 + obj = {
  103 + icon: "face",
  104 + href: "/changeStudents",
  105 + title: "Change Student",
  106 + click: e => {
  107 + console.log(e);
  108 + }
  109 + };
  110 + this.items.push(obj);
  111 + }
100 112 // console.log("this.adminRole", this.adminRole);
101 113 this.SchoolRole = this.$store.state.schoolRole;
102 114 },
... ...
... ... @@ -45,6 +45,13 @@ export default [{
45 45 this.$store.dispatch('setSchoolToken', null)
46 46 this.$store.dispatch('setSchoolRole', null)
47 47 this.$router.replace({ path: '/' });
  48 + } else if (this.$store.state.role === "PARENT") {
  49 + this.$store.dispatch('setToken', null)
  50 + this.$store.dispatch('Id', null)
  51 + this.$store.dispatch('Role', null)
  52 + this.$store.dispatch('setSchoolToken', null)
  53 + this.$store.dispatch('setSchoolRole', null)
  54 + this.$router.replace({ path: '/' });
48 55 }
49 56 }
50 57 },
... ...
src/pages/Authentication/Login.vue
... ... @@ -143,6 +143,11 @@ export default {
143 143 this.$store.dispatch("Id", response.data.data.id);
144 144 this.$store.dispatch("Role", response.data.data.role);
145 145 this.$router.push("/dashboard");
  146 + } else if (response.data.data.role === "PARENT") {
  147 + this.$store.dispatch("setToken", response.data.data.token);
  148 + this.$store.dispatch("Id", response.data.data.id);
  149 + this.$store.dispatch("Role", response.data.data.role);
  150 + this.$router.push("/dashboard");
146 151 }
147 152 })
148 153 .catch(error => {
... ...
src/pages/Course/course.vue
... ... @@ -299,8 +299,8 @@
299 299 xs12
300 300 class="text-xs-center text-sm-center text-md-center text-lg-center"
301 301 >
302   - <v-avatar size="100px">
303   - <img src="/static/icon/user.png" v-if="!imageUrl" />
  302 + <v-avatar size="100px" v-if="!imageUrl">
  303 + <img src="/static/icon/user.png" />
304 304 </v-avatar>
305 305 <input
306 306 type="file"
... ...
src/pages/Course/courseDetail.vue
... ... @@ -0,0 +1,835 @@
  1 +<template>
  2 + <v-container fluid class="body-color">
  3 + <!-- ****** EDITS Gallery ****** -->
  4 + <v-dialog v-model="editCourseDetailDialog" max-width="1000px" scrollable>
  5 + <v-card class="card-style pa-2" dark>
  6 + <v-layout>
  7 + <v-flex xs12>
  8 + <label class="title text-xs-center">Edit Course Detail</label>
  9 + <v-icon size="24" class="right" @click="editCourseDetailDialog = false">cancel</v-icon>
  10 + </v-flex>
  11 + </v-layout>
  12 + <v-card-text>
  13 + <v-layout wrap>
  14 + <v-flex xs12 sm12>
  15 + <v-layout>
  16 + <v-flex xs4 class="pt-4 subheading">
  17 + <label class="right">Chapter Name:</label>
  18 + </v-flex>
  19 + <v-flex xs8 sm6 class="ml-3">
  20 + <v-text-field
  21 + v-model="editChapter.chapterName"
  22 + placeholder="fill your Title"
  23 + type="text"
  24 + required
  25 + ></v-text-field>
  26 + </v-flex>
  27 + </v-layout>
  28 + </v-flex>
  29 + <v-flex xs12 sm12>
  30 + <v-layout>
  31 + <v-flex xs4 class="pt-4 subheading">
  32 + <label class="right">Description:</label>
  33 + </v-flex>
  34 + <v-flex xs8 sm6 class="ml-3">
  35 + <v-text-field
  36 + placeholder="fill your Description"
  37 + v-model="editChapter.description"
  38 + type="text"
  39 + required
  40 + ></v-text-field>
  41 + </v-flex>
  42 + </v-layout>
  43 + </v-flex>
  44 + </v-layout>
  45 + <v-flex xs12 v-if="editChapter.chapterPoints !=[]">
  46 + <v-layout
  47 + wrap
  48 + v-for="(editChapterPoint,index) in editChapter.chapterPoints"
  49 + :key="index"
  50 + >
  51 + <v-flex xs12 sm12 md4 class="pt-4 subheading">
  52 + <label class="right hidden-xs-only hidden-sm-only">Chapter Points:</label>
  53 + <label class="hidden-md-only hidden-lg-only hidden-xl-only">Chapter Points:</label>
  54 + </v-flex>
  55 + <v-layout>
  56 + <v-flex xs10 sm10 sm5 md9 class="ml-3">
  57 + <v-text-field :value="editChapterPoint" type="text" required></v-text-field>
  58 + </v-flex>
  59 + <v-flex xs2 class="pt-4">
  60 + <v-icon @click="deleteUrl(index,editChapter._id)">cancel</v-icon>
  61 + </v-flex>
  62 + </v-layout>
  63 + </v-layout>
  64 + </v-flex>
  65 + <v-layout>
  66 + <v-flex xs12 sm12 md11 lg11>
  67 + <v-card-actions class="hidden-xs-only hidden-sm-only">
  68 + <v-spacer></v-spacer>
  69 + <v-btn round dark @click="save" :loading="editLoading" class="add-button mr-4">Save</v-btn>
  70 + </v-card-actions>
  71 + <v-card-actions class="hidden-md-only hidden-lg-only hidden-xl-only">
  72 + <v-spacer></v-spacer>
  73 + <v-btn round dark @click="save" :loading="editLoading" class="add-button">Save</v-btn>
  74 + <v-spacer></v-spacer>
  75 + </v-card-actions>
  76 + </v-flex>
  77 + </v-layout>
  78 + </v-card-text>
  79 + </v-card>
  80 + </v-dialog>
  81 +
  82 + <!-- ****** PROFILE Gallery ****** -->
  83 +
  84 + <v-dialog v-model="viewProfileGallery" max-width="1000" scrollable>
  85 + <v-card flat class="card-style pa-3" dark>
  86 + <v-layout>
  87 + <v-flex xs12>
  88 + <label class="title text-xs-center">View Course Detail</label>
  89 + <v-icon size="24" class="right" @click="closeProfileGallery">cancel</v-icon>
  90 + </v-flex>
  91 + </v-layout>
  92 + <v-card-text>
  93 + <v-container grid-list-md>
  94 + <v-layout wrap>
  95 + <v-flex xs12>
  96 + <v-layout>
  97 + <v-flex xs4 sm6>
  98 + <h5 class="right my-1">
  99 + <b>Chapter Name:</b>
  100 + </h5>
  101 + </v-flex>
  102 + <v-flex sm6 xs8>
  103 + <h5 class="my-1">{{ editedItem.chapterName }}</h5>
  104 + </v-flex>
  105 + </v-layout>
  106 + <v-layout>
  107 + <v-flex xs4 sm6>
  108 + <h5 class="right my-1">
  109 + <b>Description:</b>
  110 + </h5>
  111 + </v-flex>
  112 + <v-flex sm6 xs8>
  113 + <h5 class="my-1">{{ editedItem.description }}</h5>
  114 + </v-flex>
  115 + </v-layout>
  116 + <v-layout>
  117 + <v-flex xs5 sm6>
  118 + <h5 class="right my-1">
  119 + <b>You Tube Link Url:</b>
  120 + </h5>
  121 + </v-flex>
  122 + <v-flex sm6 xs8>
  123 + <h5 class="my-1">
  124 + <ul v-for="chapterPoint in editedItem.chapterPoints" :key="chapterPoint">
  125 + <li>{{ chapterPoint}}</li>
  126 + </ul>
  127 + </h5>
  128 + </v-flex>
  129 + </v-layout>
  130 + </v-flex>
  131 + </v-layout>
  132 + </v-container>
  133 + </v-card-text>
  134 + </v-card>
  135 + </v-dialog>
  136 +
  137 + <!-- ****** Course Detail TABLE ****** -->
  138 +
  139 + <v-toolbar color="transparent" flat>
  140 + <v-btn
  141 + fab
  142 + dark
  143 + class="open-dialog-button hidden-xl-only hidden-md-only hidden-lg-only"
  144 + small
  145 + @click="addCourseDetailDialog = true"
  146 + >
  147 + <v-icon dark>add</v-icon>
  148 + </v-btn>
  149 + <v-btn
  150 + round
  151 + class="open-dialog-button hidden-sm-only hidden-xs-only"
  152 + dark
  153 + @click="addCourseDetailDialog = true"
  154 + >
  155 + <v-icon class="white--text pr-1" size="20">add</v-icon>Add Course Detail
  156 + </v-btn>
  157 + <v-flex xs12 sm4 md2>
  158 + <v-select
  159 + small
  160 + :items="addclass"
  161 + label="Select Class"
  162 + v-model="getCourse.classId"
  163 + item-text="classNum"
  164 + item-value="_id"
  165 + name="Select Class"
  166 + @change="getCourses(getCourse.classId)"
  167 + class="mr-2"
  168 + required
  169 + ></v-select>
  170 + </v-flex>
  171 + <v-flex xs12 sm4 md2>
  172 + <v-select
  173 + :items="courseData"
  174 + label="Select Course"
  175 + v-model="getCourse.courseId"
  176 + item-text="coursrName"
  177 + item-value="_id"
  178 + required
  179 + class="ml-2"
  180 + @change="getCourseDetailsList(getCourse.courseId)"
  181 + ></v-select>
  182 + </v-flex>
  183 + <v-spacer></v-spacer>
  184 + <v-card-title class="body-1" v-show="show">
  185 + <v-btn icon large flat @click="displaySearch">
  186 + <v-avatar size="27">
  187 + <img src="/static/icon/search.png" alt="icon" />
  188 + </v-avatar>
  189 + </v-btn>
  190 + </v-card-title>
  191 + <v-flex xs8 sm8 md3 lg2 v-show="showSearch">
  192 + <v-layout>
  193 + <v-text-field v-model="search" label="Search" prepend-inner-icon="search" color="primary"></v-text-field>
  194 + <v-icon @click="closeSearch" color="error">close</v-icon>
  195 + </v-layout>
  196 + </v-flex>
  197 + </v-toolbar>
  198 + <v-data-table
  199 + :headers="headers"
  200 + :items="CourseDetailsList"
  201 + :pagination.sync="pagination"
  202 + :search="search"
  203 + item-key="_id"
  204 + >
  205 + <template slot="items" slot-scope="props">
  206 + <tr class="tr" @click="props.expanded = !props.expanded">
  207 + <td class="td td-row">{{ props.index + 1}}</td>
  208 + <td class="td td-row text-xs-center">{{ props.item.classId.classNum }}</td>
  209 + <td class="td td-row text-xs-center">{{ props.item.courseId.coursrName }}</td>
  210 + <td class="td td-row text-xs-center">
  211 + <span>
  212 + <!-- <v-tooltip top>
  213 + <img
  214 + slot="activator"
  215 + style="cursor:pointer; width:25px; height:25px; "
  216 + class="mr-3"
  217 + @click="profile(props.item)"
  218 + src="/static/icon/view.png"
  219 + />
  220 + <span>View</span>
  221 + </v-tooltip>
  222 + <v-tooltip top>
  223 + <img
  224 + slot="activator"
  225 + style="cursor:pointer; width:20px; height:18px; "
  226 + class="mr-3"
  227 + @click="editItem(props.item)"
  228 + src="/static/icon/edit.png"
  229 + />
  230 + <span>Edit</span>
  231 + </v-tooltip>-->
  232 + <v-tooltip top>
  233 + <img
  234 + slot="activator"
  235 + style="cursor:pointer; width:20px; height:20px; "
  236 + class="mr-3"
  237 + @click="deleteItem(props.item)"
  238 + src="/static/icon/delete.png"
  239 + />
  240 + <span>Delete</span>
  241 + </v-tooltip>
  242 + </span>
  243 + </td>
  244 + </tr>
  245 + </template>
  246 + <template slot="expand" slot-scope="props">
  247 + <v-data-table :items="chapters" hide-actions item-key="chapterName" style="width: auto;">
  248 + <template slot="items" slot-scope="props">
  249 + <tr class="tr" @click="props.expanded = !props.expanded">
  250 + <td class="td td-row">{{ props.index + 1}}</td>
  251 + <td class="text-xs-center td td-row">{{ props.item.chapterName}}</td>
  252 + <td class="text-xs-center td td-row">{{ props.item.description }}</td>
  253 + <td class="text-xs-center td td-row">
  254 + <v-tooltip top>
  255 + <img
  256 + slot="activator"
  257 + style="cursor:pointer; width:25px; height:25px; "
  258 + class="mr-3"
  259 + @click="profile(props.item)"
  260 + src="/static/icon/view.png"
  261 + />
  262 + <span>View</span>
  263 + </v-tooltip>
  264 + <v-tooltip top>
  265 + <img
  266 + slot="activator"
  267 + style="cursor:pointer; width:20px; height:18px; "
  268 + class="mr-3"
  269 + @click="editChapterItem(props.item)"
  270 + src="/static/icon/edit.png"
  271 + />
  272 + <span>Edit</span>
  273 + </v-tooltip>
  274 + </td>
  275 + </tr>
  276 + <!-- <td class="text-xs-center td td-row">{{ props.item.chapterName}}</td> -->
  277 + <!-- <td class="text-xs-center td td-row">{{ props.item.description }}</td> -->
  278 +
  279 + <!-- <tr class="tr">
  280 + <td class="text-xs-left subheading table-td td td-row">
  281 + <b>{{ props.item.day }}</b>
  282 + </td>
  283 + <td class="table-td td td-row">
  284 + <b>Subject</b>
  285 + <br />
  286 + <b>Time In</b>
  287 + <br />
  288 + <b>Time Out</b>
  289 + </td>
  290 + <td v-for="list in props.item.lectures" class="table-td td td-row">
  291 + <b>{{ list.subjectName }}</b>
  292 + <img
  293 + style="cursor:pointer; width:20px; height:18px; "
  294 + class="mr-2 ml-2"
  295 + src="/static/icon/edit1.png"
  296 + @click="updateTimeTable(list, timeTableList,props.item._id)"
  297 + />
  298 + <img
  299 + style="cursor:pointer; width:20px; height:20px; "
  300 + src="/static/icon/delete1.png"
  301 + @click="deleteTimeTable(list,props.item.lectures)"
  302 + />
  303 + <br />
  304 + {{list.timeIn}}
  305 + <br />
  306 + {{list.timeOut}}
  307 + </td>
  308 + <td class="td td-row">
  309 + <v-tooltip top>
  310 + <v-icon
  311 + slot="activator"
  312 + color="black"
  313 + @click="addLecture(props.item._id, timeTableList._id)"
  314 + >add_circle_outline</v-icon>
  315 + <span>Add</span>
  316 + </v-tooltip>
  317 + </td>
  318 + </tr>-->
  319 + </template>
  320 + <!-- <template slot="expand" slot-scope="props">
  321 + <v-data-table
  322 + :items="props"
  323 + hide-actions
  324 + item-key="chapterName"
  325 + style="width: auto;"
  326 + >
  327 + <template slot="items" slot-scope="props">
  328 + {{items}}
  329 + <tr class="tr">
  330 + <td class="td td-row">{{ props.index + 1}}</td>
  331 + </tr>
  332 + </template>
  333 + </v-data-table>
  334 + </template>-->
  335 + </v-data-table>
  336 + </template>
  337 +
  338 + <v-alert
  339 + slot="no-results"
  340 + :value="true"
  341 + color="error"
  342 + icon="warning"
  343 + >Your search for "{{ search }}" found no results.</v-alert>
  344 + </v-data-table>
  345 + <!-- ****** ADD Course Detail ****** -->
  346 + <v-dialog v-model="addCourseDetailDialog" max-width="600px">
  347 + <v-card flat class="card-style pa-2" dark>
  348 + <v-layout>
  349 + <v-flex xs12>
  350 + <label class="title text-xs-center">Add Course Details</label>
  351 + <v-icon size="24" class="right" @click="addCourseDetailDialog = false">cancel</v-icon>
  352 + </v-flex>
  353 + </v-layout>
  354 + <v-form ref="form" v-model="valid" lazy-validation>
  355 + <v-container fluid>
  356 + <v-flex xs12>
  357 + <v-layout>
  358 + <v-flex xs4 class="pt-4 subheading">
  359 + <label class="right hidden-xs-only hidden-sm-only">Select Class:</label>
  360 + <label class="right hidden-lg-only hidden-md-only hidden-xl-only">Class:</label>
  361 + </v-flex>
  362 + <v-flex xs8 sm8 md7 class="ml-3">
  363 + <v-select
  364 + :items="addclass"
  365 + label="Select Class"
  366 + v-model="addCourseDetail.classId"
  367 + item-text="classNum"
  368 + item-value="_id"
  369 + name="Select Class"
  370 + :rules="clsssRules"
  371 + @change="getCourses(addCourseDetail.classId)"
  372 + required
  373 + ></v-select>
  374 + </v-flex>
  375 + </v-layout>
  376 + </v-flex>
  377 + <v-flex xs12>
  378 + <v-layout>
  379 + <v-flex xs4 class="pt-4 subheading">
  380 + <label class="right hidden-xs-only hidden-sm-only">Select Course:</label>
  381 + <label class="right hidden-lg-only hidden-md-only hidden-xl-only">Course:</label>
  382 + </v-flex>
  383 + <v-flex xs8 sm8 md7 class="ml-3">
  384 + <v-select
  385 + :items="courseData"
  386 + label="Select Course"
  387 + v-model="addCourseDetail.courseId"
  388 + item-text="coursrName"
  389 + item-value="_id"
  390 + :rules="courseRules"
  391 + required
  392 + ></v-select>
  393 + </v-flex>
  394 + </v-layout>
  395 + </v-flex>
  396 + <v-flex xs12>
  397 + <v-layout>
  398 + <v-flex xs4 class="pt-4 subheading">
  399 + <label class="right">Chapter Name:</label>
  400 + </v-flex>
  401 + <v-flex xs8 sm8 md7 class="ml-3">
  402 + <v-text-field
  403 + v-model="addCourseDetail.chapterName"
  404 + placeholder="fill your Title"
  405 + name="name"
  406 + type="text"
  407 + :rules="chapterNameRules"
  408 + required
  409 + ></v-text-field>
  410 + </v-flex>
  411 + </v-layout>
  412 + </v-flex>
  413 + <v-flex xs12>
  414 + <v-layout>
  415 + <v-flex xs4 class="pt-4 subheading">
  416 + <label class="right">Description:</label>
  417 + </v-flex>
  418 + <v-flex xs8 sm8 md7 class="ml-3">
  419 + <v-text-field
  420 + placeholder="fill your Description"
  421 + :rules="descriptionRules"
  422 + v-model="addCourseDetail.description"
  423 + type="text"
  424 + name="email"
  425 + required
  426 + ></v-text-field>
  427 + </v-flex>
  428 + </v-layout>
  429 + </v-flex>
  430 + <v-layout>
  431 + <v-flex xs12>
  432 + <div v-for="(chapterPoints,index) in finds" :key="index">
  433 + <v-layout>
  434 + <v-flex xs4 class="pt-4 subheading">
  435 + <label class="right">Chapter Points:</label>
  436 + </v-flex>
  437 + <v-flex xs8 sm8 md6 class="ml-3">
  438 + <v-text-field
  439 + placeholder="fill your Chapter Points"
  440 + v-model="chapterPoints.value"
  441 + type="text"
  442 + name="link"
  443 + required
  444 + ></v-text-field>
  445 + </v-flex>
  446 + <v-flex xs2 class="pt-4">
  447 + <v-icon @click="deleteFind(index)" v-if="index !=0 ">cancel</v-icon>
  448 + <v-icon @click="addFind">add_circle</v-icon>
  449 + </v-flex>
  450 + </v-layout>
  451 + </div>
  452 + </v-flex>
  453 + </v-layout>
  454 + <v-layout>
  455 + <v-flex xs12 sm12>
  456 + <v-layout class="right">
  457 + <v-btn @click="clear" round dark class="clear-button">Clear</v-btn>
  458 + <v-btn @click="submit" round dark :loading="loading" class="add-button">Add</v-btn>
  459 + </v-layout>
  460 + </v-flex>
  461 + </v-layout>
  462 + </v-container>
  463 + </v-form>
  464 + </v-card>
  465 + </v-dialog>
  466 + <v-snackbar
  467 + :timeout="timeout"
  468 + :top="y === 'top'"
  469 + :right="x === 'right'"
  470 + :vertical="mode === 'vertical'"
  471 + v-model="snackbar"
  472 + :color="color"
  473 + >{{ text }}</v-snackbar>
  474 + <div class="loader" v-if="showLoader">
  475 + <v-progress-circular indeterminate color="white"></v-progress-circular>
  476 + </div>
  477 + </v-container>
  478 +</template>
  479 +
  480 +<script>
  481 +import http from "@/Services/http.js";
  482 +
  483 +export default {
  484 + data: () => ({
  485 + snackbar: false,
  486 + y: "top",
  487 + x: "right",
  488 + mode: "",
  489 + timeout: 3000,
  490 + text: "",
  491 + loading: false,
  492 + color: "",
  493 + date: null,
  494 + search: "",
  495 + show: true,
  496 + addCourseDetailDialog: false,
  497 + showSearch: false,
  498 + showLoader: false,
  499 + editCourseDetailDialog: false,
  500 + viewProfileGallery: false,
  501 + valid: true,
  502 + editLoading: false,
  503 + addclass: [],
  504 + courseData: [],
  505 + addSection: [],
  506 + getCourse: {},
  507 + finds: [{ value: "" }],
  508 + updates: [{ youTubeLink: "" }],
  509 + youTubeLink: {},
  510 + addCourseDetail: {
  511 + chapters: [
  512 + {
  513 + chapterName: "",
  514 + description: "",
  515 + chapterPoints: []
  516 + }
  517 + ]
  518 + },
  519 + chapters: [],
  520 + pagination: {
  521 + rowsPerPage: 10
  522 + },
  523 + editFiles: [],
  524 + files: [],
  525 + courseData: [],
  526 + token: "",
  527 + clsssRules: [v => !!v || " Class is required"],
  528 + courseRules: [v => !!v || " Course is required"],
  529 + chapterNameRules: [v => !!v || " Tilte is required"],
  530 + descriptionRules: [v => !!v || " Description is required"],
  531 + headers: [
  532 + {
  533 + align: "",
  534 + text: "No",
  535 + sortable: false,
  536 + value: "index"
  537 + },
  538 + {
  539 + text: "Class Name",
  540 + value: "classNum",
  541 + sortable: false,
  542 + align: "center"
  543 + },
  544 + {
  545 + text: "Course Name",
  546 + value: "courseName",
  547 + sortable: false,
  548 + align: "center"
  549 + },
  550 + { text: "Action", value: "", sortable: false, align: "center" }
  551 + ],
  552 + CourseDetailsList: [],
  553 + editedIndex: -1,
  554 + editedItem: {},
  555 + editChapter: {},
  556 + index: ""
  557 + }),
  558 + methods: {
  559 + getCourses(classId) {
  560 + this.showLoader = true;
  561 + http()
  562 + .get("/getCourseesList", {
  563 + params: {
  564 + classId: classId
  565 + }
  566 + })
  567 + .then(response => {
  568 + this.courseData = response.data.data;
  569 + this.showLoader = false;
  570 + })
  571 + .catch(err => {
  572 + console.log("err====>", err);
  573 + this.showLoader = false;
  574 + });
  575 + },
  576 + getCourseDetailsList() {
  577 + this.showLoader = true;
  578 + http()
  579 + .get("/getParticularCourseDetail", {
  580 + params: {
  581 + courseId: this.getCourse.courseId
  582 + }
  583 + })
  584 + .then(response => {
  585 + this.CourseDetailsList = response.data.data;
  586 + this.chapters = response.data.data[0].chapters;
  587 + console.log("response.data.data", this.CourseDetailsList);
  588 + this.showLoader = false;
  589 + })
  590 + .catch(error => {
  591 + // console.log("err====>", err);
  592 + this.showLoader = false;
  593 + if (error.response.status === 401) {
  594 + this.$router.replace({ path: "/" });
  595 + this.$store.dispatch("setToken", null);
  596 + this.$store.dispatch("Id", null);
  597 + }
  598 + });
  599 + },
  600 + // editItem(item) {
  601 + // this.files = [];
  602 + // // this.editedIndex = this.CourseDetailsList.indexOf(item);
  603 + // // this.editedItem = Object.assign({}, item);
  604 + //
  605 + // },
  606 + profile(item) {
  607 + this.editedIndex = this.chapters.indexOf(item);
  608 + this.editedItem = Object.assign({}, item);
  609 + this.viewProfileGallery = true;
  610 + },
  611 + editChapterItem(item) {
  612 + this.editedIndex = this.chapters.indexOf(item);
  613 + this.editChapter = Object.assign({}, item);
  614 + console.log("this.editChapter",this.editChapter)
  615 + this.editCourseDetailDialog = true;
  616 + },
  617 + deleteItem(item) {
  618 + let deleteGallery = {
  619 + galleryId: item._id
  620 + };
  621 + http()
  622 + .delete(
  623 + "/deleteGallery",
  624 + confirm("Are you sure you want to delete this?") && {
  625 + params: deleteGallery,
  626 + headers: {
  627 + Authorization: "Bearer " + this.token
  628 + }
  629 + }
  630 + )
  631 + .then(response => {
  632 + this.snackbar = true;
  633 + this.text = "Successfully delete Existing Gallery";
  634 + this.color = "green";
  635 + this.getCourseDetailsList();
  636 + })
  637 + .catch(error => {
  638 + // console.log(error);
  639 + this.snackbar = true;
  640 + this.text = error.response.data.message;
  641 + this.color = "error";
  642 + });
  643 + },
  644 + deleteImage(imageId, id) {
  645 + let deleteImages = {
  646 + galleryId: id,
  647 + imageId: imageId
  648 + };
  649 + http()
  650 + .put("/deleteImage", deleteImages)
  651 + .then(response => {
  652 + this.snackbar = true;
  653 + this.text = response.data.message;
  654 + this.color = "green";
  655 + this.getCourseDetailsList();
  656 + this.close();
  657 + })
  658 + .catch(error => {
  659 + this.snackbar = true;
  660 + this.text = error.response.data.message;
  661 + this.color = "error";
  662 + });
  663 + },
  664 + close() {
  665 + this.editCourseDetailDialog = false;
  666 + },
  667 + closeProfileGallery() {
  668 + this.viewProfileGallery = false;
  669 + },
  670 + submit() {
  671 + let chapters = [];
  672 + var chapterPoints = [];
  673 + for (let i = 0; i < this.finds.length; i++) {
  674 + chapterPoints.push(this.finds[i].value);
  675 + // console.log("this.finds[i].value", this.finds[i].value);
  676 + chapters = [
  677 + {
  678 + chapterName: this.addCourseDetail.chapterName,
  679 + description: this.addCourseDetail.description,
  680 + chapterPoints: chapterPoints
  681 + }
  682 + ];
  683 + }
  684 + if (this.$refs.form.validate()) {
  685 + // console.log("this.addCourseDetail", this.addCourseDetail);
  686 + var courseDetailsData = {
  687 + classId: this.addCourseDetail.classId,
  688 + courseId: this.addCourseDetail.courseId,
  689 + chapters: chapters
  690 + };
  691 + this.loading = true;
  692 + http()
  693 + .post("/createCourseDetail", courseDetailsData)
  694 + .then(response => {
  695 + this.addCourseDetailDialog = false;
  696 + this.loading = false;
  697 + this.snackbar = true;
  698 + this.text = response.data.message;
  699 + this.color = "green";
  700 + this.clear();
  701 + this.files = "";
  702 + })
  703 + .catch(error => {
  704 + this.snackbar = true;
  705 + this.text = error.response.data.message;
  706 + this.color = "error";
  707 + this.loading = false;
  708 + });
  709 + }
  710 + },
  711 + clear() {
  712 + this.$refs.form.reset();
  713 + this.files = [];
  714 + },
  715 + save() {
  716 + this.editedItem.gelleryId = this.editedItem._id;
  717 + var linkUrl = [];
  718 + for (let i = 0; i < this.updates.length; i++) {
  719 + linkUrl.push(this.updates[i].youTubeLink);
  720 + }
  721 + if (this.editFiles) {
  722 + var ary = [];
  723 + var imageData = [];
  724 + ary = this.editFiles;
  725 + for (let i = 0; i < ary.length; i++) {
  726 + const [baseUrl, imageUrl] = ary[i].split(/,/);
  727 + imageData.push(imageUrl);
  728 + this.editedItem.editFiles = imageData;
  729 + }
  730 + }
  731 + if (linkUrl != "") {
  732 + var updateData = {
  733 + galleryId: this.editedItem._id,
  734 + description: this.editedItem.description,
  735 + classId: this.editedItem.classNum,
  736 + uploadImage: this.editedItem.editFiles,
  737 + title: this.editedItem.title,
  738 + updateYouTubeLinkUrl: linkUrl
  739 + };
  740 + } else if (linkUrl == "") {
  741 + var updateData = {
  742 + galleryId: this.editedItem._id,
  743 + description: this.editedItem.description,
  744 + classId: this.editedItem.classNum,
  745 + uploadImage: this.editedItem.editFiles,
  746 + title: this.editedItem.title
  747 + };
  748 + }
  749 + this.editLoading = true;
  750 + http()
  751 + .put("/updateGallery", updateData)
  752 + .then(response => {
  753 + this.getCourseDetailsList();
  754 + this.close();
  755 + this.snackbar = true;
  756 + this.text = response.data.message;
  757 + this.color = "green";
  758 + this.editLoading = false;
  759 + // this.editChapterPointName = "";
  760 + this.editFiles = [];
  761 + })
  762 + .catch(error => {
  763 + this.editLoading = false;
  764 + this.snackbar = true;
  765 + this.text = error.response.data.message;
  766 + this.color = "error";
  767 + });
  768 + },
  769 + getAllClasses() {
  770 + http()
  771 + .get("/getClassesList", {
  772 + headers: { Authorization: "Bearer " + this.token }
  773 + })
  774 + .then(response => {
  775 + this.addclass = response.data.data;
  776 + })
  777 + .catch(err => {
  778 + // console.log("err====>", err);
  779 + });
  780 + },
  781 + removeAddFind: function() {
  782 + this.finds = [{ value: "" }];
  783 + },
  784 + addFind: function() {
  785 + this.finds.push({ value: "" });
  786 + },
  787 + update: function() {
  788 + this.updates.push({ youTubeLink: "" });
  789 + },
  790 + deleteFind: function(index) {
  791 + this.finds.splice(index, 1);
  792 + if (index === 0) this.addFind();
  793 + },
  794 + deleteUpdate: function(index) {
  795 + this.updates.splice(index, 1);
  796 + if (index === 0) this.update();
  797 + },
  798 + deleteUrl: function(index, youTubelinkId, id) {
  799 + this.editedItem.youTubeLinkUrl.splice(index, 1);
  800 + if (index === 0) this.update();
  801 + let deleteYouTubeUrl = {
  802 + galleryId: id,
  803 + youTubeId: youTubelinkId
  804 + };
  805 + http()
  806 + .put("/deleteYoutubeLink", deleteYouTubeUrl)
  807 + .then(response => {
  808 + this.snackbar = true;
  809 + this.text = response.data.message;
  810 + this.color = "green";
  811 + this.getCourseDetailsList();
  812 + this.close();
  813 + })
  814 + .catch(error => {
  815 + this.snackbar = true;
  816 + this.text = error.response.data.message;
  817 + this.color = "error";
  818 + });
  819 + },
  820 + displaySearch() {
  821 + this.show = false;
  822 + this.showSearch = true;
  823 + },
  824 + closeSearch() {
  825 + this.showSearch = false;
  826 + this.show = true;
  827 + this.search = "";
  828 + }
  829 + },
  830 + mounted() {
  831 + this.token = this.$store.state.token;
  832 + this.getAllClasses();
  833 + }
  834 +};
  835 +</script>
0 836 \ No newline at end of file
... ...
src/pages/Course/enrollStudents.vue
... ... @@ -236,6 +236,7 @@ export default {
236 236 getStudentTable(id) {
237 237 console.log("id", this.getReport.courseId);
238 238 this.getStudents();
  239 + this.getParticularCourse();
239 240 },
240 241 update() {
241 242 var studentsAttendence = [];
... ... @@ -270,7 +271,7 @@ export default {
270 271 console.log("this.selected", this.selected);
271 272 console.log("selected====", selected);
272 273 let selectedStudentsArray = [];
273   - selectedStudentsArray.push(selected.id);
  274 + selectedStudentsArray.push({ studentId: selected.id });
274 275 var payload = {
275 276 courseId: this.getReport.courseId,
276 277 enrollStudents: selectedStudentsArray
... ... @@ -289,7 +290,7 @@ export default {
289 290 selectParticularStudent(selected) {
290 291 console.log("selected====", selected);
291 292 let selectedStudentsArray = [];
292   - selectedStudentsArray.push(selected);
  293 + selectedStudentsArray.push({ studentId: selected });
293 294 var payload = {
294 295 courseId: this.getReport.courseId,
295 296 enrollStudents: selectedStudentsArray
... ... @@ -305,6 +306,24 @@ export default {
305 306 this.text = error.response.data.message;
306 307 });
307 308 },
  309 + getParticularCourse() {
  310 + var payload = {
  311 + courseId: this.getReport.courseId
  312 + };
  313 + http()
  314 + .get("/getParticularCourse", {
  315 + params: payload
  316 + })
  317 + .then(response => {
  318 + conso.log("DTAAAAA", response.data.data);
  319 + this.snackbar = true;
  320 + this.text = response.data.message;
  321 + })
  322 + .catch(error => {
  323 + this.snackbar = true;
  324 + this.text = error.response.data.message;
  325 + });
  326 + },
308 327 changeSort(column) {
309 328 if (this.pagination.sortBy === column) {
310 329 this.pagination.descending = !this.pagination.descending;
... ...
src/pages/Dashboard/dashboard.vue
... ... @@ -98,7 +98,11 @@
98 98 </v-flex>
99 99 </v-layout>
100 100 </v-flex>
101   - <v-layout>
  101 + <p
  102 + v-if="studentsData.length === 0 && role == 'PARENT'"
  103 + class="text-center title grey lighten-4 error--text"
  104 + >You have no student registered with scholl</p>
  105 + <v-layout v-if="role != 'PARENT'">
102 106 <v-flex xs12>
103 107 <v-card class="card mt-2 account-Card">
104 108 <h4>
... ... @@ -162,7 +166,7 @@
162 166 </v-card>
163 167 </v-flex>
164 168 </v-layout>
165   - <v-card class="mt-2 card">
  169 + <v-card class="mt-2 card" v-if="role != 'PARENT'">
166 170 <!-- <full-calendar
167 171 ref="calendar"
168 172 defaultView="month"
... ... @@ -214,6 +218,120 @@
214 218 </template>
215 219 </v-data-table>
216 220 </v-card>
  221 + <!-- COURSES -->
  222 + <v-layout v-if="role == 'PARENT'">
  223 + <v-flex xs12>
  224 + <v-card class="card mt-2 account-Card">
  225 + <h4>
  226 + <b>My Courses</b>
  227 + </h4>
  228 + <v-layout wrap>
  229 + <v-flex xs12 sm12>
  230 + <v-list two-line>
  231 + <template>
  232 + <v-list-tile v-for="(course,i) in courseData" :key="i">
  233 + <v-list-tile-avatar>
  234 + <v-icon class="account-circle darkBlue-color">panorama_fish_eye</v-icon>
  235 + </v-list-tile-avatar>
  236 + <v-list-tile-content>
  237 + <v-list-tile-title>{{ course.coursrName }}</v-list-tile-title>
  238 + </v-list-tile-content>
  239 + </v-list-tile>
  240 + </template>
  241 + </v-list>
  242 + </v-flex>
  243 + </v-layout>
  244 + </v-card>
  245 + </v-flex>
  246 + </v-layout>
  247 + <v-layout v-if="role == 'PARENT'">
  248 + <v-flex xs6>
  249 + <v-card class="mt-2 card">
  250 + <h4 class="pa-3">
  251 + <b>Latest Annoucements</b>
  252 + </h4>
  253 +
  254 + <v-data-table
  255 + :items="annoucementData"
  256 + class="elevation-0"
  257 + flat
  258 + hide-actions
  259 + hide-headers
  260 + style="border-spacing: 0 !important;"
  261 + >
  262 + <template
  263 + slot="items"
  264 + slot-scope="props"
  265 + v-if="props.index < 5"
  266 + style="border-spacing: 0 !important;"
  267 + >
  268 + <tr class="td-notice">
  269 + <td class="grey--text" style="width:18px">{{ props.index + 1}}</td>
  270 + <td>
  271 + <span class="grey--text caption">{{ date(props.item.created) }}</span>
  272 + <br />
  273 + <span class="body-2">{{ props.item.discussionType}}</span>
  274 + </td>
  275 + <td class="text-xs-center">
  276 + <span>
  277 + <v-tooltip top>
  278 + <img
  279 + slot="activator"
  280 + style="cursor:pointer; width:25px; height:25px; "
  281 + src="/static/icon/view.png"
  282 + />
  283 + <span>View</span>
  284 + </v-tooltip>
  285 + </span>
  286 + </td>
  287 + </tr>
  288 + </template>
  289 + </v-data-table>
  290 + </v-card>
  291 + </v-flex>
  292 + <v-flex xs6>
  293 + <v-card class="mt-2 card">
  294 + <h4 class="pa-3">
  295 + <b>Online User</b>
  296 + </h4>
  297 +
  298 + <v-data-table
  299 + :items="onlineUser"
  300 + class="elevation-0"
  301 + flat
  302 + hide-actions
  303 + hide-headers
  304 + style="border-spacing: 0 !important;"
  305 + >
  306 + <template
  307 + slot="items"
  308 + slot-scope="props"
  309 + v-if="props.index < 5"
  310 + style="border-spacing: 0 !important;"
  311 + >
  312 + <tr class="td-notice">
  313 + <td class="grey--text" style="width:18px">{{ props.index + 1}}</td>
  314 + <td>
  315 + <span class="body-2">{{ props.item.user }}</span>
  316 + </td>
  317 + <td class="text-xs-center">
  318 + <span>
  319 + <v-tooltip top>
  320 + <img
  321 + slot="activator"
  322 + style="cursor:pointer; width:25px; height:25px; "
  323 + src="/static/icon/view.png"
  324 + />
  325 + <span>View</span>
  326 + </v-tooltip>
  327 + </span>
  328 + </td>
  329 + </tr>
  330 + </template>
  331 + </v-data-table>
  332 + </v-card>
  333 + </v-flex>
  334 + </v-layout>
217 335 </v-container>
218 336 </v-flex>
219 337 <v-flex xs12 sm12 md3>
... ... @@ -316,7 +434,23 @@ export default {
316 434 customClass: "disabled highlight" // Custom classes to an calendar cell
317 435 }
318 436 ],
319   -
  437 + onlineUser: [
  438 + {
  439 + user: "Student Demo"
  440 + },
  441 + {
  442 + user: "Teacher Demo"
  443 + },
  444 + {
  445 + user: "Priyansh Gupta"
  446 + },
  447 + {
  448 + user: "Gaurav Aggarwal"
  449 + },
  450 + {
  451 + user: "Approve Arorra"
  452 + }
  453 + ],
320 454 showLoader: false,
321 455 calendarData: {},
322 456 dialog: false,
... ... @@ -345,7 +479,10 @@ export default {
345 479 expenseData: [],
346 480 feeData: [],
347 481 collectionData: [],
348   -
  482 + courseData: [],
  483 + studentsData: [],
  484 + annoucementData: [],
  485 + role: "",
349 486 attrs: [
350 487 {
351 488 key: "today",
... ... @@ -452,7 +589,10 @@ export default {
452 589 this.token = this.$store.state.token;
453 590 } else if (this.$store.state.role === "LIBRARIAN") {
454 591 this.token = this.$store.state.token;
  592 + } else if (this.$store.state.role === "PARENT") {
  593 + this.token = this.$store.state.token;
455 594 }
  595 + this.role = this.$store.state.role;
456 596 // console.log("role", this.$store.state.schoolRole,"tt",this.$store.state.schoolToken);
457 597 // this.getData();
458 598 this.getStudents();
... ... @@ -463,6 +603,7 @@ export default {
463 603 this.getUserData();
464 604 this.getFeesAndCollectionsData();
465 605 this.getExpensesData();
  606 + this.getparentStudents();
466 607 // this.getUsersList();
467 608 },
468 609 methods: {
... ... @@ -608,7 +749,7 @@ export default {
608 749 // this.collectionData = response.data.data;
609 750 this.series[0].data[0] = this.feeData.totalFees;
610 751 this.series[0].data[1] = this.feeData.totalCollection;
611   - console.log("this.series====", this.series);
  752 + // console.log("this.series====", this.series);
612 753  
613 754 this.showLoader = false;
614 755 })
... ... @@ -639,6 +780,77 @@ export default {
639 780 .catch(error => {
640 781 this.showLoader = false;
641 782 });
  783 + },
  784 + getparentStudents() {
  785 + this.showLoader = true;
  786 + http()
  787 + .get("/parentStudentsList")
  788 + .then(response => {
  789 + // console.log("resssssss", response.data.data.students[0].classId);
  790 + this.studentsData = response.data.data;
  791 + // localStorage.setItem(
  792 + // "parentStudentId",
  793 + // this.studentsData.students[0]._id
  794 + // );
  795 + // localStorage.setItem(
  796 + // "parentClassId",
  797 + // this.studentsData.students[0].classId
  798 + // );
  799 + console.log(
  800 + "localStorage.getItem('parentStudentId')",
  801 + localStorage.getItem("parentStudentId")
  802 + );
  803 + if (localStorage.getItem("parentStudentId") == null) {
  804 + var parentStudentsId = response.data.data.students[0].classId;
  805 + var ClassId = response.data.data.students[0]._id;
  806 + }
  807 + if (localStorage.getItem("parentStudentId")) {
  808 + var parentStudentsId = localStorage.getItem("parentStudentId");
  809 + var ClassId = localStorage.getItem("parentClassId");
  810 + }
  811 + this.getCourses(parentStudentsId, ClassId);
  812 + this.getAnnoucementes(ClassId);
  813 + this.showLoader = false;
  814 + })
  815 + .catch(err => {
  816 + console.log("err====>", err);
  817 + this.showLoader = false;
  818 + });
  819 + },
  820 + getCourses(parentStudentsId, ClassId) {
  821 + this.showLoader = true;
  822 + http()
  823 + .get("/getStudentCourses", {
  824 + params: {
  825 + classId: ClassId,
  826 + studentId: parentStudentsId
  827 + }
  828 + })
  829 + .then(response => {
  830 + this.courseData = response.data.data;
  831 + this.showLoader = false;
  832 + })
  833 + .catch(err => {
  834 + console.log("err====>", err);
  835 + this.showLoader = false;
  836 + });
  837 + },
  838 + getAnnoucementes(ClassId) {
  839 + this.showLoader = true;
  840 + http()
  841 + .get("/getAnnoucementesList", {
  842 + params: {
  843 + classId: ClassId
  844 + }
  845 + })
  846 + .then(response => {
  847 + this.annoucementData = response.data.data;
  848 + this.showLoader = false;
  849 + })
  850 + .catch(err => {
  851 + console.log("err====>", err);
  852 + this.showLoader = false;
  853 + });
642 854 }
643 855 }
644 856 };
... ...
src/pages/Report/idCard.vue
... ... @@ -55,7 +55,7 @@
55 55 <v-layout>
56 56 <v-flex xs12 sm12 lg10 class="ml-2">
57 57 <v-select
58   - :items="getStudentsList"
  58 + :items="getSelectUserData"
59 59 label="Select Student"
60 60 v-model="getReport._id"
61 61 item-text="name"
... ... @@ -71,7 +71,7 @@
71 71 <v-select
72 72 v-model="getReport._id"
73 73 label="Select Teacher"
74   - :items="teacherList"
  74 + :items="getSelectUserData"
75 75 item-text="name"
76 76 item-value="_id"
77 77 required
... ... @@ -85,7 +85,7 @@
85 85 <v-select
86 86 v-model="getReport._id"
87 87 label="Select Admin"
88   - :items="userData"
  88 + :items="getSelectUserData"
89 89 item-text="name"
90 90 item-value="_id"
91 91 required
... ... @@ -99,7 +99,7 @@
99 99 <v-select
100 100 v-model="getReport._id"
101 101 label="Select Accountant"
102   - :items="Users"
  102 + :items="getSelectUserData"
103 103 item-text="name"
104 104 item-value="_id"
105 105 required
... ... @@ -113,7 +113,7 @@
113 113 <v-select
114 114 v-model="getReport._id"
115 115 label="Select Librarian"
116   - :items="Users"
  116 + :items="getSelectUserData "
117 117 item-text="name"
118 118 item-value="_id"
119 119 required
... ... @@ -310,13 +310,6 @@
310 310 <span v-if="getCard.mobile">{{ getCard.mobile}}</span>
311 311 <span v-if="getCard.mobileNo">{{ getCard.mobileNo }}</span>
312 312 </p>
313   - <!-- <p
314   - style="
315   - font-size: 17px;
316   - font-weight: 100;
317   - color: rgb(48, 38, 83);
318   - letter-spacing: 4px;"
319   - >{{ getCard.address}}</p>-->
320 313 <p
321 314 style="
322 315 font-size: 17px;
... ... @@ -350,20 +343,6 @@
350 343 margin-top:10px;
351 344 overflow:hidden"
352 345 />
353   - <!-- <v-layout style="margin:auto">
354   - <img
355   - v-if="getCard.profilePicUrl"
356   - :src="getCard.profilePicUrl"
357   - alt="profileImage"
358   - style=";
359   - width: 110px;
360   - margin:10px auto;
361   - width: 110px;
362   - margin: 10px auto;
363   - border: 3px solid #323232;
364   - border-radius: 12px;"
365   - />
366   - </v-layout>-->
367 346 <p
368 347 v-if="getCard.schoolLogoUrl"
369 348 style="color: #302653;
... ... @@ -472,22 +451,12 @@ export default {
472 451 classList: [],
473 452 getCard: [],
474 453 addSection: [],
475   - getStudentsList: [],
476   - teacherList: [],
477   - userData: [],
478   - Users: [],
  454 + // getStudentsList:
  455 + // teacherList: [],
  456 + getSelectUserData: [],
  457 + // Users: [],
479 458 getReport: {},
480   - // cardRules: [v => !!v || "Id-Card Field is required"],
481   - // classRules: [v => !!v || "Class Field is required"],
482   - // sectionRules: [v => !!v || "Section Field is required"],
483   - // studentRules: [v => !!v || "Student Field is required"],
484   - // teacherRules: [v => !!v || "Teacher Field is required"],
485   - // adminRules: [v => !!v || "Admin Field is required"],
486   - // accountantRules: [v => !!v || "Accountant Field is required"],
487   - // librarianRules: [v => !!v || "Librarian Field is required"],
488   -
489 459 typeRules: [v => !!v || "Type is required"],
490   - // backgroundRules: [v => !!v || "Background is required"],
491 460 typeList: [
492 461 {
493 462 name: "Front Part",
... ... @@ -523,7 +492,7 @@ export default {
523 492 }
524 493 },
525 494 getRoleInputs(role) {
526   - console.log("role", role);
  495 + // console.log("role", role);
527 496 this.showReport = false;
528 497 this.getReport._id = "";
529 498 this.getCard = "";
... ... @@ -585,11 +554,18 @@ export default {
585 554 this.$htmlToPaper("printMe");
586 555 },
587 556 getUserData() {
  557 + this.getSelectUserData = [];
588 558 this.showLoader = true;
589 559 http()
590 560 .get("/getParticularUserDetail")
591 561 .then(response => {
592   - this.userData = response.data.data;
  562 + let mergeObj = {
  563 + name: "Select All",
  564 + id: "Select All"
  565 + };
  566 + this.getSelectUserData.push(mergeObj);
  567 + let getUserDetails = response.data.data;
  568 + this.getSelectUserData.push(getUserDetails);
593 569 this.showLoader = false;
594 570 // this.adminList = response.data.data;
595 571 })
... ... @@ -611,9 +587,6 @@ export default {
611 587 .then(response => {
612 588 var getRoles = [];
613 589 getRoles = response.data.data;
614   - // if (getRoles[0].role !== 1) {
615   - // getRoles = response.data.data;
616   - // }
617 590 for (let i = 0; i < getRoles.length; i++) {
618 591 if (getRoles[i].role != "1" && getRoles[i].role != "5") {
619 592 this.getRoles.push(getRoles[i]);
... ... @@ -632,7 +605,7 @@ export default {
632 605 });
633 606 },
634 607 getClass() {
635   - console.log("get classes");
  608 + // console.log("get classes");
636 609 this.showLoader = true;
637 610 http()
638 611 .get("/getClassesList", {
... ... @@ -668,6 +641,7 @@ export default {
668 641 });
669 642 },
670 643 getStudents() {
  644 + this.getSelectUserData = [];
671 645 this.showLoader = true;
672 646 http()
673 647 .get("/getStudentWithClass", {
... ... @@ -677,7 +651,11 @@ export default {
677 651 }
678 652 })
679 653 .then(response => {
680   - this.getStudentsList = response.data.data;
  654 + response.data.data.unshift({
  655 + name: "Select All",
  656 + _id: "Select All"
  657 + });
  658 + this.getSelectUserData = response.data.data;
681 659 this.showStudents = true;
682 660 this.showLoader = false;
683 661 })
... ... @@ -687,6 +665,33 @@ export default {
687 665 });
688 666 },
689 667 getCards() {
  668 + console.log("this.getSelectUserData", this.getSelectUserData);
  669 + var getSelectUserId = [];
  670 + for (let i = 0; i < this.getSelectUserData.length; i++) {
  671 + console.log("this.getReport._id", this.getReport._id);
  672 + if (this.getReport._id === this.getSelectUserData[i]._id) {
  673 + console.log(
  674 + "this.getSelectUserData[i]._id------------",
  675 + this.getSelectUserData[i]._id
  676 + );
  677 + getSelectUserId.push(this.getSelectUserData[i]._id);
  678 + } else if (this.getReport._id == "Select All") {
  679 + console.log(
  680 + "this.getSelectUserData[i]._id)",
  681 + this.getSelectUserData[i]._id
  682 + );
  683 + getSelectUserId.push(this.getSelectUserData[i]._id);
  684 + if (getSelectUserId[0] == undefined) {
  685 + delete getSelectUserId[0];
  686 + }
  687 + }
  688 + }
  689 + console.log(
  690 + // "this.getSelectUserData[i]._id",/
  691 + // this.getSelectUserData[i]._id,
  692 + "getSelectUserId",
  693 + getSelectUserId
  694 + );
690 695 if (this.$refs.form.validate()) {
691 696 this.showLoader = true;
692 697 http()
... ... @@ -695,7 +700,7 @@ export default {
695 700 Authorization: "Bearer " + this.token
696 701 },
697 702 params: {
698   - profileId: this.getReport._id,
  703 + profileId: getSelectUserId,
699 704 role: this.getReport.role
700 705 }
701 706 })
... ... @@ -707,28 +712,28 @@ export default {
707 712 data.adminData.constructor === Object
708 713 ) {
709 714 this.getCard = response.data.data.adminData;
710   - console.log("this.getCard ", this.getCard);
  715 + // console.log("this.getCard ", this.getCard);
711 716 }
712 717 if (
713 718 Object.keys(data.teachersData).length != 0 &&
714 719 data.teachersData.constructor === Object
715 720 ) {
716 721 this.getCard = response.data.data.teachersData;
717   - console.log("this.getCard--teachersData ", this.getCard);
  722 + // console.log("this.getCard--teachersData ", this.getCard);
718 723 }
719 724 if (
720 725 Object.keys(data.studentData).length != 0 &&
721 726 data.studentData.constructor === Object
722 727 ) {
723 728 this.getCard = response.data.data.studentData;
724   - console.log("this.getCard--studentData ", this.getCard);
  729 + // console.log("this.getCard--studentData ", this.getCard);
725 730 }
726 731 if (
727 732 Object.keys(data.usersData).length != 0 &&
728 733 data.usersData.constructor === Object
729 734 ) {
730 735 this.getCard = response.data.data.usersData;
731   - console.log("this.getCard--usersData ", this.getCard);
  736 + // console.log("this.getCard--usersData ", this.getCard);
732 737 }
733 738 // console.log("this.getCard--all ", response.data.data);
734 739 this.showLoader = false;
... ... @@ -736,7 +741,7 @@ export default {
736 741 })
737 742 .catch(error => {
738 743 this.showLoader = false;
739   - console.log("error", error.response.data.errors);
  744 + // console.log("error", error.response.data.errors);
740 745 if (error.response.data.errors) {
741 746 this.snackbar = true;
742 747 this.text = " Field is required";
... ... @@ -746,6 +751,7 @@ export default {
746 751 }
747 752 },
748 753 getTeacherList() {
  754 + this.getSelectUserData = [];
749 755 this.showLoader = true;
750 756 var token = this.$store.state.token;
751 757 http()
... ... @@ -753,7 +759,11 @@ export default {
753 759 headers: { Authorization: "Bearer " + token }
754 760 })
755 761 .then(response => {
756   - this.teacherList = response.data.data;
  762 + response.data.data.unshift({
  763 + name: "Select All",
  764 + _id: "Select All"
  765 + });
  766 + this.getSelectUserData = response.data.data;
757 767 this.showLoader = false;
758 768 })
759 769 .catch(error => {
... ... @@ -766,6 +776,7 @@ export default {
766 776 });
767 777 },
768 778 getUsersList(role) {
  779 + this.getSelectUserData = [];
769 780 this.showLoader = true;
770 781 var token = this.$store.state.token;
771 782 http()
... ... @@ -773,7 +784,11 @@ export default {
773 784 headers: { Authorization: "Bearer " + token }
774 785 })
775 786 .then(response => {
776   - this.Users = response.data.data;
  787 + response.data.data.unshift({
  788 + name: "Select All",
  789 + _id: "Select All"
  790 + });
  791 + this.getSelectUserData = response.data.data;
777 792 this.showLoader = false;
778 793 })
779 794 .catch(error => {
... ...
src/pages/Report/progressCardReport.vue
... ... @@ -103,8 +103,6 @@
103 103 </v-layout>
104 104 <div id="printMe">
105 105 <card class="elevation-0" v-for="(value, id, Index) in filterData" :key="Index">
106   - <!-- <v-flex xs12 flat> -->
107   - <!-- {{value}}---{{id}}---{{index}} -->
108 106 <v-card
109 107 class="ma-3"
110 108 style="
... ... @@ -251,11 +249,6 @@
251 249 webkit-box-shadow: 0px 0px 0px 0px rgba(0,0,0,0.2), 0px 0px 0px 0px rgba(0,0,0,0.14), 0px 0px 0px 0px rgba(0,0,0,0.12) !important;
252 250 box-shadow: 0px 0px 0px 0px rgba(0,0,0,0.2), 0px 0px 0px 0px rgba(0,0,0,0.14), 0px 0px 0px 0px rgba(0,0,0,0.12) !important;"
253 251 >
254   - <!-- {{studentMark}} -->
255   - <!-- <div
256   - style="overflow-x:auto;
257   - border: 1px solid lightgrey !important;"
258   - >-->
259 252 <table
260 253 v-for="(studentMark,key) in studentMarks"
261 254 :key="key"
... ... @@ -506,7 +499,6 @@ export default {
506 499 });
507 500 this.getStudentsList = response.data.data;
508 501 this.showLoader = false;
509   - // console.log("getSectionsList=====>", response.data.data);
510 502 })
511 503 .catch(error => {
512 504 console.log("err====>", error);
... ... @@ -619,11 +611,11 @@ export default {
619 611 this.userData = response.data.data;
620 612 })
621 613 .catch(error => {
622   - // if (error.response.status === 401) {
623   - // this.$router.replace({ path: "/" });
624   - // this.$store.dispatch("setToken", null);
625   - // this.$store.dispatch("Id", null);
626   - // }
  614 + if (error.response.status === 401) {
  615 + this.$router.replace({ path: "/" });
  616 + this.$store.dispatch("setToken", null);
  617 + this.$store.dispatch("Id", null);
  618 + }
627 619 });
628 620 }
629 621 }
... ...
src/pages/Students/students.vue
... ... @@ -15,9 +15,7 @@
15 15 <v-layout>
16 16 <v-flex xs12 class="text-xs-center text-sm-center text-md-center text-lg-center">
17 17 <v-avatar size="100px" v-if="!editedItem.profilePicUrl && !editImageUrl">
18   - <img
19   - src="/static/icon/user.png"
20   - />
  18 + <img src="/static/icon/user.png" />
21 19 </v-avatar>
22 20 <img
23 21 :src="editedItem.profilePicUrl"
... ... @@ -364,7 +362,7 @@
364 362 </v-layout>
365 363 </v-flex>
366 364 </v-layout>
367   - <v-layout class="hidden-xs-only hidden-sm-only" >
  365 + <v-layout class="hidden-xs-only hidden-sm-only">
368 366 <v-flex xs12 sm4>
369 367 <v-layout>
370 368 <v-flex xs4 class="pt-4 subheading">
... ... @@ -866,7 +864,13 @@
866 864 </v-flex>
867 865 </v-card-actions>
868 866 <v-spacer></v-spacer>
869   - <v-btn @click="findStudents()" round dark :loading="loading" class="add-button hidden-xs-only hidden-sm-only">Find</v-btn>
  867 + <v-btn
  868 + @click="findStudents()"
  869 + round
  870 + dark
  871 + :loading="loading"
  872 + class="add-button hidden-xs-only hidden-sm-only"
  873 + >Find</v-btn>
870 874 <v-card-title class="body-1" v-show="show">
871 875 <v-btn icon large flat @click="displaySearch">
872 876 <v-avatar size="27">
... ... @@ -921,7 +925,14 @@
921 925 </v-layout>
922 926 <v-layout>
923 927 <v-flex xs5 class="mx-auto mb-2">
924   - <v-btn @click="findStudents()" block round dark :loading="loading" class="add-button">Find</v-btn>
  928 + <v-btn
  929 + @click="findStudents()"
  930 + block
  931 + round
  932 + dark
  933 + :loading="loading"
  934 + class="add-button"
  935 + >Find</v-btn>
925 936 </v-flex>
926 937 </v-layout>
927 938 </v-flex>
... ... @@ -966,9 +977,7 @@
966 977 />
967 978 <span>View</span>
968 979 </v-tooltip>
969   - <v-tooltip top
970   - v-if="role != 'TEACHER' "
971   - >
  980 + <v-tooltip top v-if="role != 'TEACHER' ">
972 981 <img
973 982 slot="activator"
974 983 style="cursor:pointer; width:20px; height:18px; "
... ... @@ -978,9 +987,7 @@
978 987 />
979 988 <span>Edit</span>
980 989 </v-tooltip>
981   - <v-tooltip top
982   - v-if="role != 'TEACHER' "
983   - >
  990 + <v-tooltip top v-if="role != 'TEACHER' ">
984 991 <img
985 992 slot="activator"
986 993 style="cursor:pointer; width:20px; height:20px; "
... ... @@ -1206,6 +1213,7 @@
1206 1213 :rules="fatheCellNoRules"
1207 1214 counter="10"
1208 1215 required
  1216 + v-on:keyup="getParentDetails()"
1209 1217 ></v-text-field>
1210 1218 </v-flex>
1211 1219 </v-layout>
... ... @@ -1582,7 +1590,6 @@
1582 1590 placeholder="fill your MobileNo"
1583 1591 name="mobileNo"
1584 1592 type="number"
1585   -
1586 1593 ></v-text-field>
1587 1594 </v-flex>
1588 1595 </v-layout>
... ... @@ -1944,8 +1951,8 @@ export default {
1944 1951 v => v <= 10000000000 || "Max 10 characters is required"
1945 1952 ],
1946 1953 password: [
1947   - v => !!v || "Password field is Required.",
1948   - // v => (/^(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/).test(v) && v.length >= 8
  1954 + v => !!v || "Password field is Required."
  1955 + // v => (/^(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/).test(v) && v.length >= 8
1949 1956 ],
1950 1957 mobileNoRule: [v => !!v || " Mobile Number is required"],
1951 1958 establishmentYearRules: [v => !!v || " Academic Year is required"],
... ... @@ -2121,7 +2128,7 @@ export default {
2121 2128 },
2122 2129 dates: function(date) {
2123 2130 return moment(date).format("MMMM DD, YYYY");
2124   - return date
  2131 + return date;
2125 2132 },
2126 2133 onFilePicked(e) {
2127 2134 // console.log(e)
... ... @@ -2366,6 +2373,7 @@ export default {
2366 2373 }
2367 2374 },
2368 2375 getParentDetails() {
  2376 + console.log("AYYYYYYYYYYYYYYYYYYAAAAAAAAAAAAAAA");
2369 2377 if (this.parentData.fatherCellNo.length > 9) {
2370 2378 this.showLoader = true;
2371 2379 http()
... ...
src/pages/changeStudents/changeStudents.vue
... ... @@ -0,0 +1,113 @@
  1 +<template>
  2 + <v-app id="login">
  3 + <v-container fluid fill-height>
  4 + <v-layout>
  5 + <v-flex xs12 sm8 md8 lg5 offset-sm2 offset-lg3 class="mt-5">
  6 + <v-card flat class="card-style pa-2" dark id="form">
  7 + <v-layout>
  8 + <v-flex xs12>
  9 + <label class="title text-xs-center">Change Student</label>
  10 + </v-flex>
  11 + </v-layout>
  12 + <v-card-text>
  13 + <v-flex xs12 sm8 md8 lg8 offset-sm2>
  14 + <v-form class="mt-3">
  15 + <v-select
  16 + :items="studentsData"
  17 + item-text="name"
  18 + item-value="_id"
  19 + v-model="changeStudent"
  20 + label="Students"
  21 + ></v-select>
  22 + </v-form>
  23 + </v-flex>
  24 + </v-card-text>
  25 + <v-card-actions>
  26 + <v-flex text-xs-center>
  27 + <v-btn round dark :loading="loading" @click="change" class="add-button">Change</v-btn>
  28 + </v-flex>
  29 + </v-card-actions>
  30 + <v-snackbar
  31 + :timeout="timeout"
  32 + :top="y === 'top'"
  33 + :right="x === 'right'"
  34 + :vertical="mode === 'vertical'"
  35 + v-model="snackbar"
  36 + :color="color"
  37 + >{{ text }}</v-snackbar>
  38 + </v-card>
  39 + </v-flex>
  40 + </v-layout>
  41 + </v-container>
  42 + </v-app>
  43 +</template>
  44 +<script>
  45 +import http from "@/Services/http.js";
  46 +
  47 +export default {
  48 + data() {
  49 + return {
  50 + snackbar: false,
  51 + y: "top",
  52 + x: "right",
  53 + mode: "",
  54 + timeout: 4000,
  55 + text: "",
  56 + loading: false,
  57 + valid: false,
  58 + changeStudent: {},
  59 + studentsData: []
  60 + };
  61 + },
  62 + mounted() {
  63 + this.getparentStudents();
  64 + },
  65 + methods: {
  66 + change() {
  67 + console.log("changeStudent", this.changeStudent);
  68 + localStorage.setItem("parentStudentId", this.changeStudent);
  69 + this.$router.replace({ path: "/" });
  70 + },
  71 + getparentStudents() {
  72 + this.showLoader = true;
  73 + http()
  74 + .get("/parentStudentsList")
  75 + .then(response => {
  76 + // console.log("resssssss", response.data.data.students[0].classId);
  77 + this.studentsData = response.data.data.students;
  78 + localStorage.setItem(
  79 + "parentClassId",
  80 + response.data.data.students[0].classId
  81 + );
  82 + this.showLoader = false;
  83 + })
  84 + .catch(err => {
  85 + console.log("err====>", err);
  86 + this.showLoader = false;
  87 + });
  88 + }
  89 + },
  90 + computed: {
  91 + color() {
  92 + return this.loading ? "success" : "error";
  93 + }
  94 + }
  95 +};
  96 +</script>
  97 +<style scoped>
  98 +img {
  99 + position: absolute;
  100 + top: 13px;
  101 + left: 50px;
  102 +}
  103 +.v-btn--large {
  104 + padding: 0px 74px;
  105 +}
  106 +@media screen and (max-width: 769px) {
  107 + .v-btn--large {
  108 + font-size: 14px;
  109 + height: 44px;
  110 + padding: 0 32px;
  111 + }
  112 +}
  113 +</style>
... ...
src/router/paths.js
... ... @@ -806,6 +806,18 @@ export default [{
806 806 )
807 807 },
808 808 {
  809 + path: '/courseDetail',
  810 + meta: {},
  811 + name: 'Course Detail',
  812 + props: (route) => ({ type: route.query.type }),
  813 + component: () =>
  814 + import (
  815 + /* webpackChunkName: "routes" */
  816 + /* webpackMode: "lazy-once" */
  817 + `@/pages/Course/courseDetail.vue`
  818 + )
  819 + },
  820 + {
809 821 path: '/enrollStudents',
810 822 meta: {},
811 823 name: 'Enroll Students',
... ... @@ -818,6 +830,18 @@ export default [{
818 830 )
819 831 },
820 832 {
  833 + path: '/changeStudents',
  834 + meta: {},
  835 + name: 'Change Students',
  836 + props: (route) => ({ type: route.query.type }),
  837 + component: () =>
  838 + import (
  839 + /* webpackChunkName: "routes" */
  840 + /* webpackMode: "lazy-once" */
  841 + `@/pages/changeStudents/changeStudents.vue`
  842 + )
  843 + },
  844 + {
821 845 path: '/annoucement',
822 846 meta: {},
823 847 name: 'Annoucement',
... ...