Blame view

src/pages/Notification/notification.vue 15.4 KB
55f72b7d7   Neeraj Sharma   add new page are ...
1
2
  <template>
    <v-app id="pages-dasboard">
687e0b929   Neeraj Sharma   add user,attenden...
3
      <v-tabs grow slider-color="gray">
55f72b7d7   Neeraj Sharma   add new page are ...
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        <v-tab
          ripple
          @click="activeTab('existing')"
          v-bind:class="{ active: isActive }"
          id="tab"
          class="subheading"
        >Existing Notifictaion</v-tab>
        <v-tab
          ripple
          @click="activeTab('new')"
          v-bind:class="{ active: newActive }"
          id="tab1"
          User
          class="subheading"
        >Add New Notifictaion</v-tab>
4bd94ba60   Neeraj Sharma   implement api and...
19
        <!-- ****** EDITS  NOTIFICATION DETAILS ****** -->
55f72b7d7   Neeraj Sharma   add new page are ...
20
21
22
23
24
25
26
27
28
29
30
  
        <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">
506be6fd7   Neeraj Sharma   implemet dyamic i...
31
32
            <v-flex xs12 sm12>
              <v-toolbar color="v-toolbar">
55f72b7d7   Neeraj Sharma   add new page are ...
33
                <v-spacer></v-spacer>
a17c68a03   Neeraj Sharma   implement two rou...
34
35
36
                <v-toolbar-title>
                  <h3>Edit Notifictaion</h3>
                </v-toolbar-title>
55f72b7d7   Neeraj Sharma   add new page are ...
37
38
                <v-spacer></v-spacer>
              </v-toolbar>
f4df757fe   Neeraj Sharma   responsive vie in...
39
40
41
42
43
              <v-card flat class="pa-3">
                <v-flex xs12 sm12>
                  <v-layout>
                    <v-flex xs4 class="pt-4 subheading">
                      <label class="right">Title:</label>
a17c68a03   Neeraj Sharma   implement two rou...
44
                    </v-flex>
f4df757fe   Neeraj Sharma   responsive vie in...
45
46
47
48
49
50
51
                    <v-flex xs8 sm5 class="ml-3">
                      <v-text-field
                        v-model="editedItem.title"
                        placeholder="fill your Title"
                        name="name"
                        type="text"
                      ></v-text-field>
a17c68a03   Neeraj Sharma   implement two rou...
52
                    </v-flex>
f4df757fe   Neeraj Sharma   responsive vie in...
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
                  </v-layout>
                </v-flex>
                <v-flex xs12 sm12>
                  <v-layout>
                    <v-flex xs4 class="pt-4 subheading">
                      <label class="right">Description:</label>
                    </v-flex>
                    <v-flex xs8 sm5 class="ml-3">
                      <v-text-field
                        placeholder="fill your Description"
                        v-model="editedItem.description"
                        type="text"
                      ></v-text-field>
                    </v-flex>
                  </v-layout>
                </v-flex>
                <v-layout>
                  <v-flex xs12 sm10 offset-sm1>
                    <v-card-actions>
                      <v-btn round dark @click.native="close">Cancel</v-btn>
                      <v-spacer></v-spacer>
                      <v-btn round dark @click="save">Save</v-btn>
                    </v-card-actions>
                  </v-flex>
                </v-layout>
55f72b7d7   Neeraj Sharma   add new page are ...
78
79
80
              </v-card>
            </v-flex>
          </v-dialog>
4bd94ba60   Neeraj Sharma   implement api and...
81
          <!-- ****** PROFILE VIEW NOTIFICATION DEATILS ******  -->
55f72b7d7   Neeraj Sharma   add new page are ...
82

79583580d   Neeraj Sharma   implement task ma...
83
          <v-dialog v-model="dialog1" max-width="700px">
0551a0f15   Neeraj Sharma   implemnet functio...
84
            <v-toolbar color="v-toolbar">
55f72b7d7   Neeraj Sharma   add new page are ...
85
              <v-spacer></v-spacer>
a17c68a03   Neeraj Sharma   implement two rou...
86
87
88
              <v-toolbar-title>
                <h3>Notification</h3>
              </v-toolbar-title>
55f72b7d7   Neeraj Sharma   add new page are ...
89
90
91
92
              <v-spacer></v-spacer>
              <v-icon @click="close1">close</v-icon>
            </v-toolbar>
            <v-card>
55f72b7d7   Neeraj Sharma   add new page are ...
93
94
95
              <v-card-text>
                <v-container grid-list-md>
                  <v-layout wrap>
f4df757fe   Neeraj Sharma   responsive vie in...
96
                    <v-flex xs12>
55f72b7d7   Neeraj Sharma   add new page are ...
97
                      <v-layout>
f4df757fe   Neeraj Sharma   responsive vie in...
98
99
100
101
                        <v-flex xs4 sm6>
                          <h5 class="right my-1">
                            <b>Title:</b>
                          </h5>
55f72b7d7   Neeraj Sharma   add new page are ...
102
103
104
105
106
                        </v-flex>
                        <v-flex sm6 xs8>
                          <h5 class="my-1">{{ editedItem.title }}</h5>
                        </v-flex>
                      </v-layout>
55f72b7d7   Neeraj Sharma   add new page are ...
107
                    </v-flex>
f4df757fe   Neeraj Sharma   responsive vie in...
108
109
110
111
112
113
114
115
116
117
                    <v-layout>
                      <v-flex xs4 sm6>
                        <h5 class="right my-1">
                          <b>Description:</b>
                        </h5>
                      </v-flex>
                      <v-flex sm6 xs8>
                        <h5 class="my-1">{{ editedItem.description }}</h5>
                      </v-flex>
                    </v-layout>
55f72b7d7   Neeraj Sharma   add new page are ...
118
119
120
121
122
123
124
125
126
127
128
129
130
                  </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>
4bd94ba60   Neeraj Sharma   implement api and...
131
          <!-- ****** EXISTING-USERS NOTIFICATION TABLE ****** -->
55f72b7d7   Neeraj Sharma   add new page are ...
132
133
134
135
136
137
138
139
  
          <v-data-table
            :headers="headers"
            :items="desserts"
            :pagination.sync="pagination"
            :search="search"
          >
            <template slot="items" slot-scope="props">
f4df757fe   Neeraj Sharma   responsive vie in...
140
              <td id="td" class="text-xs-center">{{ props.index + 1}}</td>
55f72b7d7   Neeraj Sharma   add new page are ...
141
142
              <td id="td" class="text-xs-center">{{ props.item.title}}</td>
              <td id="td" class="text-xs-center">{{ props.item.description}}</td>
a17c68a03   Neeraj Sharma   implement two rou...
143
              <td id="td" class="text-xs-center">
55f72b7d7   Neeraj Sharma   add new page are ...
144
                <span>
495e4037c   Neeraj Sharma   update
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
                  <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>
55f72b7d7   Neeraj Sharma   add new page are ...
175
176
177
178
179
180
181
182
183
184
185
                </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>
4bd94ba60   Neeraj Sharma   implement api and...
186
        <!-- ****** ADD MULTIPLE NOTIFICATION ****** -->
a17c68a03   Neeraj Sharma   implement two rou...
187

55f72b7d7   Neeraj Sharma   add new page are ...
188
189
190
191
192
193
194
195
196
197
        <v-tab-item>
          <v-container>
            <v-snackbar
              :timeout="timeout"
              :top="y === 'top'"
              :right="x === 'right'"
              :vertical="mode === 'vertical'"
              v-model="snackbar"
              color="success"
            >{{ text }}</v-snackbar>
f4df757fe   Neeraj Sharma   responsive vie in...
198
            <v-flex xs12 sm8 class="top" offset-sm2>
55f72b7d7   Neeraj Sharma   add new page are ...
199
200
              <v-card flat>
                <v-form ref="form" v-model="valid" lazy-validation>
f4df757fe   Neeraj Sharma   responsive vie in...
201
                  <v-container>
a17c68a03   Neeraj Sharma   implement two rou...
202
203
204
205
206
                    <v-flex xs12>
                      <v-layout>
                        <v-flex xs4 class="pt-4 subheading">
                          <label class="right">Title:</label>
                        </v-flex>
f4df757fe   Neeraj Sharma   responsive vie in...
207
                        <v-flex xs8 sm6 class="ml-3">
a17c68a03   Neeraj Sharma   implement two rou...
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
                          <v-text-field
                            v-model="addNotification.title"
                            placeholder="fill your Title"
                            type="text"
                            :rules="titleRules"
                            required
                          ></v-text-field>
                        </v-flex>
                      </v-layout>
                    </v-flex>
                    <v-flex xs12>
                      <v-layout>
                        <v-flex xs4 class="pt-4 subheading">
                          <label class="right">Description:</label>
                        </v-flex>
f4df757fe   Neeraj Sharma   responsive vie in...
223
                        <v-flex xs10 sm6 class="ml-3">
a17c68a03   Neeraj Sharma   implement two rou...
224
225
226
227
228
229
230
231
232
233
                          <v-text-field
                            placeholder="fill your Description"
                            :rules="descriptionRules"
                            v-model="addNotification.description"
                            type="text"
                            required
                          ></v-text-field>
                        </v-flex>
                      </v-layout>
                    </v-flex>
495e4037c   Neeraj Sharma   update
234
                    <v-layout>
f4df757fe   Neeraj Sharma   responsive vie in...
235
236
237
238
239
240
241
242
243
                      <v-flex xs12 sm9 offset-sm2>
                        <v-layout>
                          <v-flex xs6>
                            <v-btn @click="clear" round class="ml-3" dark>clear</v-btn>
                          </v-flex>
                          <v-flex xs6>
                            <v-btn @click="submit" round dark :loading="loading" class="right">Add</v-btn>
                          </v-flex>
                        </v-layout>
55f72b7d7   Neeraj Sharma   add new page are ...
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
                      </v-flex>
                    </v-layout>
                  </v-container>
                </v-form>
              </v-card>
            </v-flex>
          </v-container>
        </v-tab-item>
      </v-tabs>
      <div class="loader" v-if="showLoader">
        <v-progress-circular indeterminate color="white"></v-progress-circular>
      </div>
    </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: "",
      loading: false,
      date: null,
      search: "",
a17c68a03   Neeraj Sharma   implement two rou...
274
      showLoader: false,
55f72b7d7   Neeraj Sharma   add new page are ...
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
      dialog: false,
      dialog1: false,
      valid: true,
      isActive: true,
      newActive: false,
      pagination: {
        rowsPerPage: 15
      },
      imageData: {},
      imageName: "",
      imageUrl: "",
      imageFile: "",
      titleRules: [v => !!v || " Tilte is required"],
      descriptionRules: [v => !!v || " Description is required"],
      headers: [
        {
          text: "No",
          align: "center",
          sortable: false,
          value: "No"
        },
        { text: "Title", value: "title", sortable: false, align: "center" },
a17c68a03   Neeraj Sharma   implement two rou...
297
298
299
300
301
302
        {
          text: "Description",
          value: "description",
          sortable: false,
          align: "center"
        },
55f72b7d7   Neeraj Sharma   add new page are ...
303
304
305
306
        { text: "Action", value: "", sortable: false, align: "center" }
      ],
      desserts: [],
      editedIndex: -1,
a17c68a03   Neeraj Sharma   implement two rou...
307
308
309
      addNotification: {
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
310
311
      },
      editedItem: {
a17c68a03   Neeraj Sharma   implement two rou...
312
313
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
314
315
      },
      defaultItem: {
a17c68a03   Neeraj Sharma   implement two rou...
316
317
318
        title: "",
        description: ""
      }
55f72b7d7   Neeraj Sharma   add new page are ...
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
    }),
    methods: {
      pickFile() {
        this.$refs.image.click();
      },
  
      onFilePicked(e) {
        // console.log(e)
        const files = e.target.files;
        this.imageData.upload = e.target.files[0];
        if (files[0] !== undefined) {
          this.imageName = files[0].name;
          if (this.imageName.lastIndexOf(".") <= 0) {
            return;
          }
          const fr = new FileReader();
          fr.readAsDataURL(files[0]);
          fr.addEventListener("load", () => {
            this.imageUrl = fr.result;
            this.imageFile = files[0]; // this is an image file that can be sent to server...
            this.imageData.imageUrl = URL.createObjectURL(this.imageFile);
            console.log("upload=======>", this.imageData.imageUrl);
            console.log("imageFile", this.imageFile);
          });
        } else {
          this.imageName = "";
          this.imageFile = "";
          this.imageUrl = "";
        }
      },
a17c68a03   Neeraj Sharma   implement two rou...
349
      getNotifications() {
55f72b7d7   Neeraj Sharma   add new page are ...
350
351
352
353
354
355
356
357
358
359
360
        this.showLoader = true;
        var token = this.$store.state.token;
        http()
          .get("/getNotificationsList", {
            headers: { Authorization: "Bearer " + token }
          })
          .then(response => {
            this.desserts = response.data.data;
            this.showLoader = false;
            // console.log("getNotifications=====>",this.desserts)
          })
00e4bc4e1   Neeraj Sharma   fixed auntentication
361
          .catch(error => {
55f72b7d7   Neeraj Sharma   add new page are ...
362
363
            // console.log("err====>", err);
            this.showLoader = false;
a17c68a03   Neeraj Sharma   implement two rou...
364
365
366
367
368
            if (error.response.status === 401) {
              this.$router.replace({ path: "/" });
              this.$store.dispatch("setToken", null);
              this.$store.dispatch("Id", null);
            }
55f72b7d7   Neeraj Sharma   add new page are ...
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
          });
      },
      editItem(item) {
        this.editedIndex = this.desserts.indexOf(item);
        this.editedItem = Object.assign({}, item);
        this.dialog = true;
      },
      profile(item) {
        this.editedIndex = this.desserts.indexOf(item);
        this.editedItem = Object.assign({}, item);
        this.dialog1 = true;
      },
  
      deleteItem(item) {
        let deleteNotification = {
          notificationId: item._id
        };
        http()
          .delete(
            "/deleteNotification",
            confirm("Are you sure you want to delete this?") && {
              params: deleteNotification
            }
          )
          .then(response => {
            // console.log("deleteNotification",deleteNotification)
            if ((this.snackbar = true)) {
              this.text = "Successfully Delete Notification";
            }
a17c68a03   Neeraj Sharma   implement two rou...
398
            this.getNotifications();
55f72b7d7   Neeraj Sharma   add new page are ...
399
400
          })
          .catch(error => {
a17c68a03   Neeraj Sharma   implement two rou...
401
            console.log(error);
55f72b7d7   Neeraj Sharma   add new page are ...
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
          });
      },
      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;
        setTimeout(() => {
          this.editedItem = Object.assign({}, this.defaultItem);
          this.editedIndex = -1;
        }, 300);
      },
      close1() {
        this.dialog1 = false;
      },
      submit() {
        if (this.$refs.form.validate()) {
          let imageData = new FormData();
          imageData.append("upload", this.imageFile);
          console.log(imageData);
          let create = {
            title: this.addNotification.title,
a17c68a03   Neeraj Sharma   implement two rou...
434
            description: this.addNotification.description
55f72b7d7   Neeraj Sharma   add new page are ...
435
436
            // imageData
          };
a17c68a03   Neeraj Sharma   implement two rou...
437
          console.log(create);
5f1d4b444   Neeraj Sharma   fix design and fi...
438
          this.loading = true;
55f72b7d7   Neeraj Sharma   add new page are ...
439
440
441
          http()
            .post("/createNotification", create)
            .then(response => {
a17c68a03   Neeraj Sharma   implement two rou...
442
              console.log(create);
55f72b7d7   Neeraj Sharma   add new page are ...
443
              if ((this.snackbar = true)) {
5f1d4b444   Neeraj Sharma   fix design and fi...
444
                this.text = "New Notification added successfully";
55f72b7d7   Neeraj Sharma   add new page are ...
445
446
447
              }
              this.getNotifications();
              this.clear();
5f1d4b444   Neeraj Sharma   fix design and fi...
448
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
449
450
451
452
453
454
            })
            .catch(error => {
              // console.log(error);
              if ((this.snackbar = true)) {
                this.text = error.response.data.message;
              }
5f1d4b444   Neeraj Sharma   fix design and fi...
455
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
456
457
458
            });
        }
      },
55f72b7d7   Neeraj Sharma   add new page are ...
459
460
461
462
      clear() {
        this.$refs.form.reset();
      },
      save() {
a17c68a03   Neeraj Sharma   implement two rou...
463
464
465
        let imageData = new FormData();
        imageData.append("upload", this.imageFile);
        console.log(imageData);
55f72b7d7   Neeraj Sharma   add new page are ...
466
        let editNotification = {
a17c68a03   Neeraj Sharma   implement two rou...
467
468
469
470
          notificationId: this.editedItem._id,
          title: this.editedItem.title,
          description: this.editedItem.description
          // imageData
55f72b7d7   Neeraj Sharma   add new page are ...
471
472
473
474
475
476
477
478
479
480
481
482
483
484
        };
        http()
          .put("/updateNotification", editNotification)
          .then(response => {
            // console.log("editNotification",editNotification);
            if ((this.snackbar = true)) {
              this.text = "Successfully Edit Notification";
            }
            this.getNotifications();
          })
          .catch(error => {
            // console.log(error);
          });
        this.close();
55f72b7d7   Neeraj Sharma   add new page are ...
485
486
487
488
489
      }
    },
    mounted() {
      this.getNotifications();
    },
a17c68a03   Neeraj Sharma   implement two rou...
490
491
492
493
494
495
496
497
    created() {
      this.$root.$on("app:search", search => {
        this.search = search;
      });
    },
    beforeDestroy() {
      // dont forget to remove the listener
      this.$root.$off("app:search");
55f72b7d7   Neeraj Sharma   add new page are ...
498
499
500
501
    }
  };
  </script>
  <style scoped>
55f72b7d7   Neeraj Sharma   add new page are ...
502
  #td {
a17c68a03   Neeraj Sharma   implement two rou...
503
    max-width: 200px;
55f72b7d7   Neeraj Sharma   add new page are ...
504
505
  }
  .active {
687e0b929   Neeraj Sharma   add user,attenden...
506
    background-color: gray;
55f72b7d7   Neeraj Sharma   add new page are ...
507
508
509
510
511
    color: white !important;
  }
  .activebtn {
    color: black !important;
  }
55f72b7d7   Neeraj Sharma   add new page are ...
512
  </style>