Blame view

src/pages/Notification/notification.vue 17.1 KB
55f72b7d7   Neeraj Sharma   add new page are ...
1
2
  <template>
    <v-app id="pages-dasboard">
55f72b7d7   Neeraj Sharma   add new page are ...
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
      <v-tabs grow slider-color="black">
        <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
39
40
41
42
43
44
45
46
47
                <v-spacer></v-spacer>
              </v-toolbar>
              <v-card flat>
                <v-form ref="form">
                  <v-container fluid>
                    <v-layout>
                      <v-flex
                        xs12
                        class="text-xs-center text-sm-center text-md-center text-lg-center mr-4"
                      >
                        <v-avatar size="100px">
a17c68a03   Neeraj Sharma   implement two rou...
48
                          <img src="/static/icon/user.png" v-if="!imageUrl" />
55f72b7d7   Neeraj Sharma   add new page are ...
49
50
51
52
53
54
55
                        </v-avatar>
                        <input
                          type="file"
                          style="display: none"
                          ref="image"
                          accept="image/*"
                          @change="onFilePicked"
a17c68a03   Neeraj Sharma   implement two rou...
56
                        />
55f72b7d7   Neeraj Sharma   add new page are ...
57
58
59
60
61
                        <img
                          :src="imageData.imageUrl"
                          height="150"
                          v-if="imageUrl"
                          style="border-radius:50%; width:200px"
a17c68a03   Neeraj Sharma   implement two rou...
62
                        />
55f72b7d7   Neeraj Sharma   add new page are ...
63
64
                      </v-flex>
                    </v-layout>
a17c68a03   Neeraj Sharma   implement two rou...
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
                    <v-flex xs12 sm12>
                      <v-layout>
                        <v-flex xs4 class="pt-4 subheading">
                          <label class="right">Title:</label>
                        </v-flex>
                        <v-flex xs5 class="ml-3">
                          <v-text-field
                            v-model="editedItem.title"
                            placeholder="fill your Title"
                            name="name"
                            type="text"
                          ></v-text-field>
                        </v-flex>
                      </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 xs5 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>
55f72b7d7   Neeraj Sharma   add new page are ...
94
95
                    <v-layout>
                      <v-flex xs12 sm10 offset-sm1>
a17c68a03   Neeraj Sharma   implement two rou...
96
97
98
99
100
                        <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>
55f72b7d7   Neeraj Sharma   add new page are ...
101
102
103
104
105
106
107
                      </v-flex>
                    </v-layout>
                  </v-container>
                </v-form>
              </v-card>
            </v-flex>
          </v-dialog>
4bd94ba60   Neeraj Sharma   implement api and...
108
          <!-- ****** PROFILE VIEW NOTIFICATION DEATILS ******  -->
55f72b7d7   Neeraj Sharma   add new page are ...
109
110
111
112
  
          <v-dialog v-model="dialog1" max-width="600px">
            <v-toolbar color="white">
              <v-spacer></v-spacer>
a17c68a03   Neeraj Sharma   implement two rou...
113
114
115
              <v-toolbar-title>
                <h3>Notification</h3>
              </v-toolbar-title>
55f72b7d7   Neeraj Sharma   add new page are ...
116
117
118
119
120
121
              <v-spacer></v-spacer>
              <v-icon @click="close1">close</v-icon>
            </v-toolbar>
            <v-card>
              <v-flex align-center justify-center layout text-xs-center>
                <v-avatar size="50px" style="position:absolute; top:20px;">
a17c68a03   Neeraj Sharma   implement two rou...
122
                  <img src="/static/icon/user.png" />
55f72b7d7   Neeraj Sharma   add new page are ...
123
124
125
126
127
128
                </v-avatar>
              </v-flex>
              <v-card-text>
                <v-container grid-list-md>
                  <v-layout wrap>
                    <v-flex>
a17c68a03   Neeraj Sharma   implement two rou...
129
130
                      <br />
                      <br />
55f72b7d7   Neeraj Sharma   add new page are ...
131
132
                      <v-layout>
                        <v-flex xs5 sm6>
ceb43037a   Neeraj Sharma   fix bugs
133
                          <h5 class="right my-1"><b>Title:</b></h5>
55f72b7d7   Neeraj Sharma   add new page are ...
134
135
136
137
138
139
140
                        </v-flex>
                        <v-flex sm6 xs8>
                          <h5 class="my-1">{{ editedItem.title }}</h5>
                        </v-flex>
                      </v-layout>
                      <v-layout>
                        <v-flex xs5 sm6>
ceb43037a   Neeraj Sharma   fix bugs
141
                          <h5 class="right my-1"><b>Description:</b></h5>
55f72b7d7   Neeraj Sharma   add new page are ...
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
                        </v-flex>
                        <v-flex sm6 xs8>
                          <h5 class="my-1">{{ editedItem.description }}</h5>
                        </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>
4bd94ba60   Neeraj Sharma   implement api and...
161
          <!-- ****** EXISTING-USERS NOTIFICATION TABLE ****** -->
55f72b7d7   Neeraj Sharma   add new page are ...
162
163
164
165
166
167
168
169
170
171
172
  
          <v-data-table
            :headers="headers"
            :items="desserts"
            :pagination.sync="pagination"
            :search="search"
          >
            <template slot="items" slot-scope="props">
              <td id="td" class="text-xs-center">{{ props.index}}</td>
              <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...
173
              <td id="td" class="text-xs-center">
55f72b7d7   Neeraj Sharma   add new page are ...
174
175
176
177
178
179
                <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...
180
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
181
182
183
184
185
                  <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...
186
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
187
                  <img
b39d2afd2   Neeraj Sharma   responsive dashboard
188
                    style="cursor:pointer;width:20px; height:20px; "
55f72b7d7   Neeraj Sharma   add new page are ...
189
190
191
                    class="mr-5"
                    @click="deleteItem(props.item)"
                    src="/static/icon/delete1.png"
a17c68a03   Neeraj Sharma   implement two rou...
192
                  />
55f72b7d7   Neeraj Sharma   add new page are ...
193
194
195
196
197
198
199
200
201
202
203
                </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...
204
        <!-- ****** ADD MULTIPLE NOTIFICATION ****** -->
a17c68a03   Neeraj Sharma   implement two rou...
205

55f72b7d7   Neeraj Sharma   add new page are ...
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
        <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>
            <v-flex xs12 sm12 class="my-4">
              <v-card flat>
                <v-form ref="form" v-model="valid" lazy-validation>
                  <v-container fluid>
                    <v-layout>
                      <v-flex
                        xs12
                        class="text-xs-center text-sm-center text-md-center text-lg-center my-4 mr-4"
                      >
                        <v-avatar size="100px">
a17c68a03   Neeraj Sharma   implement two rou...
226
                          <img src="/static/icon/user.png" v-if="!imageUrl" />
55f72b7d7   Neeraj Sharma   add new page are ...
227
228
229
230
231
232
233
                        </v-avatar>
                        <input
                          type="file"
                          style="display: none"
                          ref="image"
                          accept="image/*"
                          @change="onFilePicked"
a17c68a03   Neeraj Sharma   implement two rou...
234
                        />
55f72b7d7   Neeraj Sharma   add new page are ...
235
236
237
238
239
                        <img
                          :src="imageData.imageUrl"
                          height="150"
                          v-if="imageUrl"
                          style="border-radius:50%; width:200px"
a17c68a03   Neeraj Sharma   implement two rou...
240
                        />
55f72b7d7   Neeraj Sharma   add new page are ...
241
242
                      </v-flex>
                    </v-layout>
a17c68a03   Neeraj Sharma   implement two rou...
243
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
274
                    <v-flex xs12>
                      <v-layout>
                        <v-flex xs4 class="pt-4 subheading">
                          <label class="right">Title:</label>
                        </v-flex>
                        <v-flex xs4 class="ml-3">
                          <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>
                        <v-flex xs4 class="ml-3">
                          <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>
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
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
                    <v-layout>
                      <v-flex xs12 sm6 offset-sm3>
                        <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-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...
312
      showLoader: false,
55f72b7d7   Neeraj Sharma   add new page are ...
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
      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...
335
336
337
338
339
340
        {
          text: "Description",
          value: "description",
          sortable: false,
          align: "center"
        },
55f72b7d7   Neeraj Sharma   add new page are ...
341
342
343
344
        { text: "Action", value: "", sortable: false, align: "center" }
      ],
      desserts: [],
      editedIndex: -1,
a17c68a03   Neeraj Sharma   implement two rou...
345
346
347
      addNotification: {
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
348
349
      },
      editedItem: {
a17c68a03   Neeraj Sharma   implement two rou...
350
351
        title: "",
        description: ""
55f72b7d7   Neeraj Sharma   add new page are ...
352
353
      },
      defaultItem: {
a17c68a03   Neeraj Sharma   implement two rou...
354
355
356
        title: "",
        description: ""
      }
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
386
    }),
    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...
387
      getNotifications() {
55f72b7d7   Neeraj Sharma   add new page are ...
388
389
390
391
392
393
394
395
396
397
398
399
400
401
        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...
402
403
404
405
406
            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 ...
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
434
435
          });
      },
      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...
436
            this.getNotifications();
55f72b7d7   Neeraj Sharma   add new page are ...
437
438
          })
          .catch(error => {
a17c68a03   Neeraj Sharma   implement two rou...
439
            console.log(error);
55f72b7d7   Neeraj Sharma   add new page are ...
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
          });
      },
      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...
472
            description: this.addNotification.description
55f72b7d7   Neeraj Sharma   add new page are ...
473
474
            // imageData
          };
a17c68a03   Neeraj Sharma   implement two rou...
475
          console.log(create);
5f1d4b444   Neeraj Sharma   fix design and fi...
476
          this.loading = true;
55f72b7d7   Neeraj Sharma   add new page are ...
477
478
479
          http()
            .post("/createNotification", create)
            .then(response => {
a17c68a03   Neeraj Sharma   implement two rou...
480
              console.log(create);
55f72b7d7   Neeraj Sharma   add new page are ...
481
              if ((this.snackbar = true)) {
5f1d4b444   Neeraj Sharma   fix design and fi...
482
                this.text = "New Notification added successfully";
55f72b7d7   Neeraj Sharma   add new page are ...
483
484
485
              }
              this.getNotifications();
              this.clear();
5f1d4b444   Neeraj Sharma   fix design and fi...
486
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
487
488
489
490
491
492
            })
            .catch(error => {
              // console.log(error);
              if ((this.snackbar = true)) {
                this.text = error.response.data.message;
              }
5f1d4b444   Neeraj Sharma   fix design and fi...
493
              this.loading = false;
55f72b7d7   Neeraj Sharma   add new page are ...
494
495
496
            });
        }
      },
55f72b7d7   Neeraj Sharma   add new page are ...
497
498
499
500
      clear() {
        this.$refs.form.reset();
      },
      save() {
a17c68a03   Neeraj Sharma   implement two rou...
501
502
503
        let imageData = new FormData();
        imageData.append("upload", this.imageFile);
        console.log(imageData);
55f72b7d7   Neeraj Sharma   add new page are ...
504
        let editNotification = {
a17c68a03   Neeraj Sharma   implement two rou...
505
506
507
508
          notificationId: this.editedItem._id,
          title: this.editedItem.title,
          description: this.editedItem.description
          // imageData
55f72b7d7   Neeraj Sharma   add new page are ...
509
510
511
512
513
514
515
516
517
518
519
520
521
522
        };
        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 ...
523
524
525
526
527
      }
    },
    mounted() {
      this.getNotifications();
    },
a17c68a03   Neeraj Sharma   implement two rou...
528
529
530
531
532
533
534
535
    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 ...
536
537
538
539
    }
  };
  </script>
  <style scoped>
55f72b7d7   Neeraj Sharma   add new page are ...
540
  #td {
a17c68a03   Neeraj Sharma   implement two rou...
541
    max-width: 200px;
55f72b7d7   Neeraj Sharma   add new page are ...
542
543
544
545
546
547
548
549
  }
  .active {
    background-color: black;
    color: white !important;
  }
  .activebtn {
    color: black !important;
  }
55f72b7d7   Neeraj Sharma   add new page are ...
550
  </style>