Blame view
src/pages/Subjects/subjects.vue
15.4 KB
beb598536
|
1 2 |
<template> <v-app id="pages-dasboard"> |
687e0b929
|
3 |
<v-tabs grow slider-color="gray"> |
beb598536
|
4 5 6 7 8 9 |
<v-tab ripple @click="activeTab('existing')" v-bind:class="{ active: isActive }" id="tab" class="subheading" |
46db0a3b5
|
10 |
>Existing Subjects</v-tab> |
beb598536
|
11 12 13 14 15 16 17 |
<v-tab ripple @click="activeTab('new')" v-bind:class="{ active: newActive }" id="tab1" User class="subheading" |
46db0a3b5
|
18 |
>Add New Subject</v-tab> |
beb598536
|
19 |
|
46db0a3b5
|
20 |
<!-- ****** EDIT Subject ****** --> |
beb598536
|
21 22 23 24 25 26 27 28 29 30 31 32 |
<v-tab-item> <v-snackbar :timeout="timeout" :top="y === 'top'" :right="x === 'right'" :vertical="mode === 'vertical'" v-model="snackbar" color="success" >{{ text }}</v-snackbar> <v-dialog v-model="dialog" max-width="600px"> <v-flex xs12 sm12 class> |
506be6fd7
|
33 |
<v-toolbar color="v-toolbar"> |
beb598536
|
34 |
<v-spacer></v-spacer> |
46db0a3b5
|
35 36 37 |
<v-toolbar-title> <h3>Edit Subject</h3> </v-toolbar-title> |
beb598536
|
38 39 40 |
<v-spacer></v-spacer> </v-toolbar> <v-card flat> |
495e4037c
|
41 |
<v-container fluid> |
afc98f028
|
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<v-form ref="formEditSubject" v-model="validEditSubject" lazy-validation> <v-layout> <v-flex xs4 class="pt-4 subheading"> <label class="right">Class:</label> </v-flex> <v-flex xs6 class="ml-3"> <v-select :items="classList" label="Select Class" v-model="addSubject.selectName" item-text="classNum" item-value="_id" name="Select Class" :rules="nameEditSubjectRules" required ></v-select> </v-flex> </v-layout> <v-layout> <v-flex xs4 class="pt-4 subheading"> <label class="right">Subject:</label> </v-flex> <v-flex xs6 class="ml-3"> <v-text-field placeholder="fill your Subject" v-model="editedItem.subjectName" |
39fb2832e
|
68 |
:rules="subjectEditNameRules" |
afc98f028
|
69 70 71 72 73 74 75 76 77 78 79 80 |
type="text" name="email" required ></v-text-field> </v-flex> </v-layout> <v-flex xs12 sm9 offset-sm2> <v-card-actions> <v-btn round dark @click.native="close">Cancel</v-btn> <v-spacer></v-spacer> <v-btn round dark @click="save" :loading="editLoading">Save</v-btn> </v-card-actions> |
46db0a3b5
|
81 |
</v-flex> |
afc98f028
|
82 |
</v-form> |
495e4037c
|
83 |
</v-container> |
beb598536
|
84 85 86 |
</v-card> </v-flex> </v-dialog> |
46db0a3b5
|
87 |
<!-- ****** VIEW PROFIL NOTICE BOARD ****** --> |
beb598536
|
88 89 |
<v-dialog v-model="dialog1" max-width="600px"> |
506be6fd7
|
90 |
<v-toolbar color="v-toolbar"> |
beb598536
|
91 |
<v-spacer></v-spacer> |
46db0a3b5
|
92 93 94 |
<v-toolbar-title> <h3>Subject</h3> </v-toolbar-title> |
beb598536
|
95 96 97 98 |
<v-spacer></v-spacer> <v-icon @click="close1">close</v-icon> </v-toolbar> <v-card> |
beb598536
|
99 100 101 102 |
<v-card-text> <v-container grid-list-md> <v-layout wrap> <v-flex> |
beb598536
|
103 |
<v-layout> |
aa8fc5033
|
104 |
<v-flex xs7 sm6> |
46db0a3b5
|
105 106 107 |
<h5 class="right my-1"> <b>Subject Name:</b> </h5> |
beb598536
|
108 |
</v-flex> |
aa8fc5033
|
109 |
<v-flex sm6 xs5> |
46db0a3b5
|
110 |
<h5 class="my-1">{{ editedItem.subjectName }}</h5> |
beb598536
|
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
</v-flex> </v-layout> </v-flex> </v-layout> </v-container> </v-card-text> </v-card> </v-dialog> <v-snackbar :timeout="timeout" :top="y === 'top'" :right="x === 'right'" :vertical="mode === 'vertical'" v-model="snackbar" color="success" >{{ text }}</v-snackbar> |
46db0a3b5
|
128 129 130 131 |
<!-- ****** EXISTING SUBJECTS TABLE ****** --> <v-card flat> <v-card-actions> <v-layout> |
79583580d
|
132 |
<v-flex xs4 sm2 lg1> |
46db0a3b5
|
133 134 |
<label class="right mt-4">Select Class:</label> </v-flex> |
79583580d
|
135 |
<v-flex xs8 sm4 lg3> |
46db0a3b5
|
136 137 138 |
<v-select :items="classList" label="Select Class" |
0721aca93
|
139 |
v-model="selectClassId" |
46db0a3b5
|
140 141 142 143 |
item-text="classNum" item-value="_id" name="Select Class" :rules="nameRules" |
0721aca93
|
144 |
@change="getClassSubject" |
46db0a3b5
|
145 146 147 148 149 150 151 |
class="px-4" required ></v-select> </v-flex> </v-layout> </v-card-actions> </v-card> |
beb598536
|
152 153 |
<v-data-table :headers="headers" |
46db0a3b5
|
154 |
:items="subjectList.subjects" |
beb598536
|
155 156 157 158 |
:pagination.sync="pagination" :search="search" > <template slot="items" slot-scope="props"> |
495e4037c
|
159 |
<td id="td" class="text-xs-center">{{ props.index + 1}}</td> |
46db0a3b5
|
160 |
<td id="td" class="text-xs-center">{{ props.item.subjectName}}</td> |
beb598536
|
161 162 163 |
<td class="text-xs-center"> <span> |
495e4037c
|
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
<v-tooltip top> <img slot="activator" style="cursor:pointer; width:25px; height:18px; " class="mr5" @click="profile(props.item)" src="/static/icon/eye1.png" /> <span>View</span> </v-tooltip> <v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:18px; " class="mr5" @click="editItem(props.item)" src="/static/icon/edit1.png" /> <span>Edit</span> </v-tooltip> <v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:20px; " class="mr5" @click="deleteItem(props.item)" src="/static/icon/delete1.png" /> <span>Delete</span> </v-tooltip> |
beb598536
|
194 195 196 197 198 199 200 201 202 203 204 |
</span> </td> </template> <v-alert slot="no-results" :value="true" color="error" icon="warning" >Your search for "{{ search }}" found no results.</v-alert> </v-data-table> </v-tab-item> |
46db0a3b5
|
205 |
<!-- ****** ADD MULTIPLE Subject ****** --> |
beb598536
|
206 207 208 209 210 211 212 213 214 |
<v-tab-item> <v-container> <v-snackbar :timeout="timeout" :top="y === 'top'" :right="x === 'right'" :vertical="mode === 'vertical'" v-model="snackbar" |
0721aca93
|
215 |
:color="color" |
beb598536
|
216 217 218 219 220 221 222 223 |
>{{ text }}</v-snackbar> <v-flex xs12 sm8 offset-sm2 class="top"> <v-card flat> <v-container fluid fill-height> <v-layout align-center> <v-flex xs12> <v-form ref="form" v-model="valid" lazy-validation> <v-layout> |
aa8fc5033
|
224 |
<v-flex xs4 sm4 class="pt-4 subheading"> |
46db0a3b5
|
225 |
<label class="right">Class:</label> |
beb598536
|
226 |
</v-flex> |
aa8fc5033
|
227 |
<v-flex xs8 sm6 class="ml-3"> |
ebe04cc1d
|
228 |
<v-select |
46db0a3b5
|
229 |
v-model="addSubject.classId" |
ebe04cc1d
|
230 |
label="Select your class" |
beb598536
|
231 |
type="text" |
46db0a3b5
|
232 233 234 235 |
:items="classList" item-text="classNum" item-value="_id" :rules="nameRules" |
beb598536
|
236 |
required |
ebe04cc1d
|
237 |
></v-select> |
beb598536
|
238 239 |
</v-flex> </v-layout> |
46db0a3b5
|
240 |
<v-layout> |
aa8fc5033
|
241 |
<v-flex xs4 sm4 class="pt-4 subheading"> |
46db0a3b5
|
242 |
<label class="right">Subject:</label> |
beb598536
|
243 |
</v-flex> |
aa8fc5033
|
244 |
<v-flex xs8 sm6 class="ml-3"> |
beb598536
|
245 |
<v-text-field |
46db0a3b5
|
246 |
v-model="addSubject.subjectName" |
51e4f3e16
|
247 |
placeholder="fill your Subject Name" |
beb598536
|
248 249 |
name="name" type="text" |
46db0a3b5
|
250 |
:rules="subjectRules" |
beb598536
|
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
required ></v-text-field> </v-flex> </v-layout> <v-layout> <v-flex xs12 sm9 offset-sm2> <v-card-actions> <v-btn @click="clear" round dark>clear</v-btn> <v-spacer></v-spacer> <v-btn @click="submit" round dark :loading="loading">Add</v-btn> </v-card-actions> </v-flex> </v-layout> </v-form> </v-flex> </v-layout> </v-container> </v-card> </v-flex> </v-container> </v-tab-item> </v-tabs> |
36fc987df
|
273 274 275 |
<div class="loader" v-if="showLoader"> <v-progress-circular indeterminate color="white"></v-progress-circular> </div> |
beb598536
|
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
</v-app> </template> <script> import http from "@/Services/http.js"; import Util from "@/util"; export default { data: () => ({ snackbar: false, y: "top", x: "right", mode: "", timeout: 3000, text: "", |
0721aca93
|
291 |
color: "", |
fc82ac667
|
292 |
showLoader: false, |
beb598536
|
293 |
loading: false, |
afc98f028
|
294 |
editLoading: false, |
beb598536
|
295 296 |
date: null, search: "", |
beb598536
|
297 298 299 |
dialog: false, dialog1: false, valid: true, |
afc98f028
|
300 |
validEditSubject: true, |
beb598536
|
301 302 |
isActive: true, newActive: false, |
beb598536
|
303 |
gender: ["Male", "Female"], |
beb598536
|
304 |
pagination: { |
2b0e316ee
|
305 |
rowsPerPage: 19 |
beb598536
|
306 |
}, |
46db0a3b5
|
307 308 |
token: "", nameRules: [v => !!v || " Class Name is required"], |
afc98f028
|
309 |
nameEditSubjectRules: [v => !!v || " Class Name is required"], |
46db0a3b5
|
310 |
subjectRules: [v => !!v || " Subject Name is required"], |
39fb2832e
|
311 |
subjectEditNameRules: [v => !!v || " Subject Name is required"], |
beb598536
|
312 313 314 315 316 317 318 |
headers: [ { text: "No", align: "center", sortable: false, value: "No" }, |
fc82ac667
|
319 |
{ |
46db0a3b5
|
320 321 |
text: "Subject Name", value: "subjectName", |
fc82ac667
|
322 323 324 |
sortable: false, align: "center" }, |
beb598536
|
325 326 |
{ text: "Action", value: "", sortable: false, align: "center" } ], |
46db0a3b5
|
327 328 |
subjectList: [], classList: [], |
beb598536
|
329 |
editedIndex: -1, |
46db0a3b5
|
330 331 |
addSubject: {}, selectClassId: "", |
0721aca93
|
332 |
selectClassId: "", |
beb598536
|
333 |
editedItem: { |
46db0a3b5
|
334 |
subjectName: "" |
a17c68a03
|
335 |
} |
beb598536
|
336 |
}), |
beb598536
|
337 338 339 340 |
methods: { pickFile() { this.$refs.image.click(); }, |
beb598536
|
341 |
editItem(item) { |
afc98f028
|
342 |
console.log("item", item); |
beb598536
|
343 344 345 346 |
this.editedItem = Object.assign({}, item); this.dialog = true; }, profile(item) { |
beb598536
|
347 348 349 350 |
this.editedItem = Object.assign({}, item); this.dialog1 = true; }, deleteItem(item) { |
46db0a3b5
|
351 |
let deleteSubject = { |
0721aca93
|
352 |
classId: this.selectClassId, |
46db0a3b5
|
353 |
subjectId: item._id |
beb598536
|
354 355 356 |
}; http() .delete( |
46db0a3b5
|
357 |
"/deleteSubject", |
beb598536
|
358 |
confirm("Are you sure you want to delete this?") && { |
46db0a3b5
|
359 |
params: deleteSubject |
beb598536
|
360 361 362 |
} ) .then(response => { |
0721aca93
|
363 364 365 |
this.getClassSubject(); this.snackbar = true; this.text = "Successfully delete Existing Subject"; |
beb598536
|
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
}) .catch(error => { // console.log(error); }); }, activeTab(type) { switch (type) { case "existing": this.newActive = false; this.isActive = true; break; default: this.newActive = true; this.isActive = false; break; } }, close() { this.dialog = false; |
beb598536
|
386 387 388 389 390 391 |
}, close1() { this.dialog1 = false; }, submit() { if (this.$refs.form.validate()) { |
beb598536
|
392 |
http() |
46db0a3b5
|
393 |
.post("/addSubject", this.addSubject) |
beb598536
|
394 |
.then(response => { |
0721aca93
|
395 396 397 |
this.getClassSubject(); this.snackbar = true; this.text = "New Subject added successfully"; |
beb598536
|
398 |
this.clear(); |
0721aca93
|
399 |
this.color = "green"; |
beb598536
|
400 401 402 |
}) .catch(error => { // console.log(error); |
0721aca93
|
403 404 405 |
this.snackbar = true; this.text = error.response.data.message; this.color = "error"; |
beb598536
|
406 407 408 |
}); } }, |
beb598536
|
409 410 411 412 |
clear() { this.$refs.form.reset(); }, save() { |
afc98f028
|
413 414 415 416 417 418 419 420 421 422 423 |
if (this.$refs.formEditSubject.validate()) { let editSubject = { classId: this.addSubject.selectName, subjectId: this.editedItem._id, subjectName: this.editedItem.subjectName }; this.editLoading = true; http() .put("/updateSubject", editSubject) .then(response => { this.snackbar = true; |
46db0a3b5
|
424 |
this.text = "Successfully Edit Existing Subject"; |
afc98f028
|
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 |
this.editLoading = false; http() .get( "/getParticularClass", { params: { classId: this.selectClassId } }, { headers: { Authorization: "Bearer " + this.token } } ) .then(response => { this.subjectList = response.data.data; this.getClassSubject(); this.snackbar = true; this.color = "green"; this.text = response.data.message; this.close(); }) .catch(err => { console.log("err====>", err); }); }) .catch(error => { this.editLoading = false; // console.log(error); }); } |
beb598536
|
452 |
}, |
0721aca93
|
453 454 |
getClassSubject() { this.selectClassId = this.selectClassId; |
46db0a3b5
|
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 |
http() .get( "/getParticularClass", { params: { classId: this.selectClassId } }, { headers: { Authorization: "Bearer " + this.token } } ) .then(response => { this.subjectList = response.data.data; }) .catch(err => { console.log("err====>", err); }); }, getClass() { http() .get("/getClassesList", { headers: { Authorization: "Bearer " + this.token } }) .then(response => { this.classList = response.data.data; }) |
00e4bc4e1
|
478 |
.catch(error => { |
a17c68a03
|
479 480 481 482 483 |
if (error.response.status === 401) { this.$router.replace({ path: "/" }); this.$store.dispatch("setToken", null); this.$store.dispatch("Id", null); } |
46db0a3b5
|
484 |
}); |
beb598536
|
485 486 487 |
} }, mounted() { |
46db0a3b5
|
488 489 490 |
this.token = this.$store.state.token; // this.getNoticeDataList(); this.getClass(); |
beb598536
|
491 |
}, |
a17c68a03
|
492 493 494 495 496 497 498 499 |
created() { this.$root.$on("app:search", search => { this.search = search; }); }, beforeDestroy() { // dont forget to remove the listener this.$root.$off("app:search"); |
beb598536
|
500 501 502 503 |
} }; </script> <style scoped> |
beb598536
|
504 |
.active { |
687e0b929
|
505 |
background-color: gray; |
beb598536
|
506 507 508 509 510 |
color: white !important; } .activebtn { color: black !important; } |
beb598536
|
511 |
</style> |