Blame view

src/pages/Notification/notification.vue 14.9 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
83
  
          <v-dialog v-model="dialog1" max-width="600px">
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
145
146
147
148
149
                <span>
                  <img
                    style="cursor:pointer; width:25px; height:18px; "
                    class="mr-5"
                    @click="profile(props.item)"
                    src="/static/icon/eye1.png"
a17c68a03   Neeraj Sharma   implement two rou...
150
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
151
152
153
154
155
                  <img
                    style="cursor:pointer; width:20px; height:18px; "
                    class="mr-5"
                    @click="editItem(props.item)"
                    src="/static/icon/edit1.png"
a17c68a03   Neeraj Sharma   implement two rou...
156
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
157
                  <img
b39d2afd2   Neeraj Sharma   responsive dashboard
158
                    style="cursor:pointer;width:20px; height:20px; "
55f72b7d7   Neeraj Sharma   add new page are ...
159
160
161
                    class="mr-5"
                    @click="deleteItem(props.item)"
                    src="/static/icon/delete1.png"
a17c68a03   Neeraj Sharma   implement two rou...
162
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
163
164
165
166
167
168
169
170
171
172
173
                </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...
174
        <!-- ****** ADD MULTIPLE NOTIFICATION ****** -->
a17c68a03   Neeraj Sharma   implement two rou...
175

55f72b7d7   Neeraj Sharma   add new page are ...
176
177
178
179
180
181
182
183
184
185
        <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...
186
            <v-flex xs12 sm8 class="top" offset-sm2>
55f72b7d7   Neeraj Sharma   add new page are ...
187
188
              <v-card flat>
                <v-form ref="form" v-model="valid" lazy-validation>
f4df757fe   Neeraj Sharma   responsive vie in...
189
                  <v-container>
a17c68a03   Neeraj Sharma   implement two rou...
190
191
192
193
194
                    <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...
195
                        <v-flex xs8 sm6 class="ml-3">
a17c68a03   Neeraj Sharma   implement two rou...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
                          <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...
211
                        <v-flex xs10 sm6 class="ml-3">
a17c68a03   Neeraj Sharma   implement two rou...
212
213
214
215
216
217
218
219
220
221
                          <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>
f4df757fe   Neeraj Sharma   responsive vie in...
222
223
224
225
226
227
228
229
230
231
                     <v-layout>
                      <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 ...
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
                      </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...
262
      showLoader: false,
55f72b7d7   Neeraj Sharma   add new page are ...
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
      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...
285
286
287
288
289
290
        {
          text: "Description",
          value: "description",
          sortable: false,
          align: "center"
        },
55f72b7d7   Neeraj Sharma   add new page are ...
291
292
293
294
        { text: "Action", value: "", sortable: false, align: "center" }
      ],
      desserts: [],
      editedIndex: -1,
a17c68a03   Neeraj Sharma   implement two rou...
295
296
297
      addNotification: {
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
298
299
      },
      editedItem: {
a17c68a03   Neeraj Sharma   implement two rou...
300
301
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
302
303
      },
      defaultItem: {
a17c68a03   Neeraj Sharma   implement two rou...
304
305
306
        title: "",
        description: ""
      }
55f72b7d7   Neeraj Sharma   add new page are ...
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
    }),
    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...
337
      getNotifications() {
55f72b7d7   Neeraj Sharma   add new page are ...
338
339
340
341
342
343
344
345
346
347
348
349
350
351
        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)
          })
          .catch(err => {
            // console.log("err====>", err);
            this.showLoader = false;
a17c68a03   Neeraj Sharma   implement two rou...
352
353
354
355
356
            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 ...
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
          });
      },
      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...
386
            this.getNotifications();
55f72b7d7   Neeraj Sharma   add new page are ...
387
388
          })
          .catch(error => {
a17c68a03   Neeraj Sharma   implement two rou...
389
            console.log(error);
55f72b7d7   Neeraj Sharma   add new page are ...
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
          });
      },
      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...
422
            description: this.addNotification.description
55f72b7d7   Neeraj Sharma   add new page are ...
423
424
            // imageData
          };
a17c68a03   Neeraj Sharma   implement two rou...
425
          console.log(create);
5f1d4b444   Neeraj Sharma   fix design and fi...
426
          this.loading = true;
55f72b7d7   Neeraj Sharma   add new page are ...
427
428
429
          http()
            .post("/createNotification", create)
            .then(response => {
a17c68a03   Neeraj Sharma   implement two rou...
430
              console.log(create);
55f72b7d7   Neeraj Sharma   add new page are ...
431
              if ((this.snackbar = true)) {
5f1d4b444   Neeraj Sharma   fix design and fi...
432
                this.text = "New Notification added successfully";
55f72b7d7   Neeraj Sharma   add new page are ...
433
434
435
              }
              this.getNotifications();
              this.clear();
5f1d4b444   Neeraj Sharma   fix design and fi...
436
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
437
438
439
440
441
442
            })
            .catch(error => {
              // console.log(error);
              if ((this.snackbar = true)) {
                this.text = error.response.data.message;
              }
5f1d4b444   Neeraj Sharma   fix design and fi...
443
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
444
445
446
            });
        }
      },
55f72b7d7   Neeraj Sharma   add new page are ...
447
448
449
450
      clear() {
        this.$refs.form.reset();
      },
      save() {
a17c68a03   Neeraj Sharma   implement two rou...
451
452
453
        let imageData = new FormData();
        imageData.append("upload", this.imageFile);
        console.log(imageData);
55f72b7d7   Neeraj Sharma   add new page are ...
454
        let editNotification = {
a17c68a03   Neeraj Sharma   implement two rou...
455
456
457
458
          notificationId: this.editedItem._id,
          title: this.editedItem.title,
          description: this.editedItem.description
          // imageData
55f72b7d7   Neeraj Sharma   add new page are ...
459
460
461
462
463
464
465
466
467
468
469
470
471
472
        };
        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 ...
473
474
475
476
477
      }
    },
    mounted() {
      this.getNotifications();
    },
a17c68a03   Neeraj Sharma   implement two rou...
478
479
480
481
482
483
484
485
    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 ...
486
487
488
489
    }
  };
  </script>
  <style scoped>
55f72b7d7   Neeraj Sharma   add new page are ...
490
  #td {
a17c68a03   Neeraj Sharma   implement two rou...
491
    max-width: 200px;
55f72b7d7   Neeraj Sharma   add new page are ...
492
493
  }
  .active {
687e0b929   Neeraj Sharma   add user,attenden...
494
    background-color: gray;
55f72b7d7   Neeraj Sharma   add new page are ...
495
496
497
498
499
    color: white !important;
  }
  .activebtn {
    color: black !important;
  }
55f72b7d7   Neeraj Sharma   add new page are ...
500
  </style>