ソースを参照

Screens - phase 1

master
George Williams 5年前
コミット
1c8cba3b14

+ 5
- 0
package-lock.json ファイルの表示

7061
         "object-visit": "^1.0.0"
7061
         "object-visit": "^1.0.0"
7062
       }
7062
       }
7063
     },
7063
     },
7064
+    "material-design-icons-iconfont": {
7065
+      "version": "5.0.1",
7066
+      "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-5.0.1.tgz",
7067
+      "integrity": "sha512-Xg6rIdGrfySTqiTZ6d+nQbcFepS6R4uKbJP0oAqyeZXJY/bX6mZDnOmmUJusqLXfhIwirs0c++a6JpqVa8RFvA=="
7068
+    },
7064
     "md5.js": {
7069
     "md5.js": {
7065
       "version": "1.3.5",
7070
       "version": "1.3.5",
7066
       "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
7071
       "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",

+ 1
- 0
package.json ファイルの表示

9
   },
9
   },
10
   "dependencies": {
10
   "dependencies": {
11
     "core-js": "^3.4.4",
11
     "core-js": "^3.4.4",
12
+    "material-design-icons-iconfont": "^5.0.1",
12
     "vue": "^2.6.10",
13
     "vue": "^2.6.10",
13
     "vue-router": "^3.1.3",
14
     "vue-router": "^3.1.3",
14
     "vuetify": "^2.1.0",
15
     "vuetify": "^2.1.0",

バイナリ
public/img/sort-down.png ファイルの表示


バイナリ
public/img/sort-up.png ファイルの表示


+ 38
- 12
src/App.vue ファイルの表示

1
 <template>
1
 <template>
2
   <v-app id="inspire">
2
   <v-app id="inspire">
3
-    <v-navigation-drawer v-model="drawerRight" app right>
3
+    <v-navigation-drawer
4
+      v-if="isloggedIn && showTelemarketer"
5
+      v-model="drawerRight"
6
+      app
7
+      right
8
+      width="285px"
9
+    >
4
       <v-list dense>
10
       <v-list dense>
5
         <v-list-item @click.stop="drawerRight = !drawerRight">
11
         <v-list-item @click.stop="drawerRight = !drawerRight">
6
           <v-list-item-action>
12
           <v-list-item-action>
7
             <v-icon>exit_to_app</v-icon>
13
             <v-icon>exit_to_app</v-icon>
8
           </v-list-item-action>
14
           </v-list-item-action>
9
-          <v-list-item-content>
10
-            <v-list-item-title>Open Temporary</v-list-item-title>
11
-          </v-list-item-content>
12
         </v-list-item>
15
         </v-list-item>
13
       </v-list>
16
       </v-list>
17
+      <tmBar />
14
     </v-navigation-drawer>
18
     </v-navigation-drawer>
15
     <v-navigation-drawer v-model="drawerLeft" app>
19
     <v-navigation-drawer v-model="drawerLeft" app>
16
       <v-list dense>
20
       <v-list dense>
17
-        <v-list-item @click.stop="drawerLeft = !rigdrawerLeftht">
21
+        <v-list-item @click.stop="drawerLeft = !drawerLeft">
18
           <v-list-item-action>
22
           <v-list-item-action>
19
             <v-icon>exit_to_app</v-icon>
23
             <v-icon>exit_to_app</v-icon>
20
           </v-list-item-action>
24
           </v-list-item-action>
21
-          <v-list-item-content>
22
-            <v-list-item-title>Open Temporary</v-list-item-title>
23
-          </v-list-item-content>
24
         </v-list-item>
25
         </v-list-item>
25
       </v-list>
26
       </v-list>
27
+      <navBar @routerGoTo="routerGoTo" v-if="isloggedIn" />
26
     </v-navigation-drawer>
28
     </v-navigation-drawer>
27
 
29
 
28
     <v-app-bar app>
30
     <v-app-bar app>
29
-      <v-app-bar-nav-icon @click.stop="drawerLeft = !drawerLeft" />
31
+      <v-app-bar-nav-icon v-if="isloggedIn" @click.stop="drawerLeft = !drawerLeft" />
30
       <v-toolbar-title>
32
       <v-toolbar-title>
31
         <v-img src="./assets/images/logo.png" height="50" width="450"></v-img>
33
         <v-img src="./assets/images/logo.png" height="50" width="450"></v-img>
32
       </v-toolbar-title>
34
       </v-toolbar-title>
33
       <v-spacer />
35
       <v-spacer />
34
-      <v-app-bar-nav-icon @click.stop="drawerRight = !drawerRight" />
36
+      <v-app-bar-nav-icon v-if="showTelemarketer" @click.stop="drawerRight = !drawerRight" />
35
     </v-app-bar>
37
     </v-app-bar>
36
 
38
 
37
     <v-content>
39
     <v-content>
38
       <v-container class="fill-height" fluid>
40
       <v-container class="fill-height" fluid>
39
         <v-row align="center" justify="center">
41
         <v-row align="center" justify="center">
40
-          <router-view></router-view>
42
+          <router-view v-if="isloggedIn"></router-view>
43
+          <!-- Need to only hide once the user is logged in. then show the router-view -->
44
+          <login v-if="!isloggedIn" />
41
         </v-row>
45
         </v-row>
42
       </v-container>
46
       </v-container>
43
     </v-content>
47
     </v-content>
55
 </template>
59
 </template>
56
 
60
 
57
 <script>
61
 <script>
62
+import navBar from "./components/home/navBar.vue";
63
+import login from "./components/user/login.vue";
64
+import tmBar from "./components/telemarketer/telemarketerBar.vue";
65
+
58
 export default {
66
 export default {
67
+  components: {
68
+    navBar,
69
+    login,
70
+    tmBar
71
+  },
59
   props: {
72
   props: {
60
     source: String
73
     source: String
61
   },
74
   },
62
   data: () => ({
75
   data: () => ({
63
     drawerRight: false,
76
     drawerRight: false,
64
-    drawerLeft: false
77
+    drawerLeft: false,
78
+    isloggedIn: true,
79
+    showTelemarketer: false
65
   }),
80
   }),
66
   created() {
81
   created() {
67
     this.$vuetify.theme.dark = false;
82
     this.$vuetify.theme.dark = false;
83
+  },
84
+  methods: {
85
+    routerGoTo(goTo) {
86
+      console.log(goTo);
87
+      if (goTo === "/telemaketer") {
88
+        this.showTelemarketer = true;
89
+      } else {
90
+        this.showTelemarketer = false;
91
+      }
92
+      this.$router.push(goTo);
93
+    }
68
   }
94
   }
69
 };
95
 };
70
 </script>
96
 </script>

+ 8
- 0
src/assets/staticData/itemsPerPage.js ファイルの表示

1
+const items = [
2
+    10,
3
+    20,
4
+    50,
5
+    100,
6
+  ];
7
+  export default items;
8
+  

+ 36
- 0
src/components/booking/booking.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <h1 style="text-align:center">Past Bookings</h1>
4
+    <v-row>
5
+      <YMFilter />
6
+    </v-row>
7
+    <v-data-table :headers="headers" :items="bookings" :items-per-page="10" class="elevation-1"></v-data-table>
8
+  </v-container>
9
+</template>
10
+
11
+<script>
12
+import YMFilter from "../shared/yearMonthFilter";
13
+
14
+export default {
15
+  name: "PastBookings",
16
+  components: {
17
+    YMFilter
18
+  },
19
+  data() {
20
+    return {
21
+      bookings: [],
22
+      headers: [
23
+        { text: "Booking Ref", value: "bookingRef" },
24
+        { text: "Booking Date", value: "bookingDate" },
25
+        { text: "Lead", value: "lead" },
26
+        { text: "Session", value: "session" },
27
+        { text: "Venue", value: "venue" },
28
+        { text: "Telemarketer", value: "telemarketer" },
29
+        { text: "Arrival", value: "arrival" },
30
+        { text: "Qual", value: "qual" },
31
+        { text: "Contact", value: "contact" }
32
+      ]
33
+    };
34
+  }
35
+};
36
+</script>

+ 46
- 0
src/components/booking/bookingCreate.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <h1>Create New Booking</h1>
4
+    <v-row>
5
+      <v-col cols="12">
6
+        <v-combobox label="Venue" />
7
+      </v-col>
8
+    </v-row>
9
+    <v-row>
10
+      <v-col cols="12">
11
+        <datePicker />
12
+      </v-col>
13
+    </v-row>
14
+    <v-row>
15
+      <v-col cols="12">
16
+        <v-combobox label="Session" />
17
+      </v-col>
18
+    </v-row>
19
+    <v-row>
20
+      <v-col cols="12">
21
+        <v-label>Time of session: {{ sessionTime }}</v-label>
22
+      </v-col>
23
+    </v-row>
24
+    <v-row>
25
+      <v-col cols="12">
26
+        <v-combobox label="Number of People" />
27
+      </v-col>
28
+    </v-row>
29
+
30
+    <v-row>
31
+      <v-col cols="12">
32
+        <v-btn color="primary">Create Booking</v-btn>
33
+      </v-col>
34
+    </v-row>
35
+  </v-container>
36
+</template>
37
+
38
+<script>
39
+import datePicker from "../shared/datePicker";
40
+
41
+export default {
42
+  components: {
43
+    datePicker
44
+  }
45
+};
46
+</script>

+ 32
- 0
src/components/calls/calls.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <h1 style="text-align:center">Call History</h1>
4
+    <v-row>
5
+      <YMFilter />
6
+    </v-row>
7
+    <v-data-table :headers="headers" :items="calls" :items-per-page="10" class="elevation-1"></v-data-table>
8
+  </v-container>
9
+</template>
10
+
11
+<script>
12
+import YMFilter from "../shared/yearMonthFilter";
13
+
14
+export default {
15
+  name: "PastBookings",
16
+  components: {
17
+    YMFilter
18
+  },
19
+  data() {
20
+    return {
21
+      calls: [],
22
+      headers: [
23
+        { text: "Date", value: "date" },
24
+        { text: "Call Duration", value: "callDuration" },
25
+        { text: "Bill Seconds", value: "billSeconds" },
26
+        { text: "Disposition", value: "disposition" },
27
+        { text: "Telemarketer", value: "telemarketer" }
28
+      ]
29
+    };
30
+  }
31
+};
32
+</script>

+ 28
- 0
src/components/home/navBar.vue ファイルの表示

1
+<template>
2
+	<div>
3
+		<v-btn block color="primary" @click="router('/telemaketer')"
4
+			>Telemarketer</v-btn
5
+		>
6
+		<v-btn block color="primary" @click="router('/booking')">Booking</v-btn>
7
+		<v-btn block color="primary" @click="router('/calls')">Calls</v-btn>
8
+		<v-btn block color="primary" @click="router('/importer')"
9
+			>Importer</v-btn
10
+		>
11
+		<v-btn block color="primary" @click="router('/reporting')"
12
+			>Reporting</v-btn
13
+		>
14
+		<v-btn block color="primary" @click="router('/settings')"
15
+			>Settings</v-btn
16
+		>
17
+	</div>
18
+</template>
19
+
20
+<script>
21
+export default {
22
+	methods: {
23
+		router(goTo) {
24
+			this.$emit('routerGoTo', goTo)
25
+		},
26
+	},
27
+}
28
+</script>

+ 88
- 0
src/components/importer/leadImporter.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <v-row>
4
+      <v-col cols="2" offset="4">
5
+        <h3 v-if="telemarketer">Telemarketer</h3>
6
+        <h3 v-else>Import Source</h3>
7
+      </v-col>
8
+      <v-col cols="2">
9
+        <v-btn color="primary" @click="SwitchMode">Switch Mode</v-btn>
10
+      </v-col>
11
+    </v-row>
12
+    <v-row>
13
+      <v-col cols="2">
14
+        <v-btn color="primary">Open File</v-btn>
15
+      </v-col>
16
+      <v-col cols="4">
17
+        <v-text-field />
18
+      </v-col>
19
+      <v-col cols="1">
20
+        <v-btn color="primary">Get Data</v-btn>
21
+      </v-col>
22
+    </v-row>
23
+    <v-row>
24
+      <v-col cols="2">
25
+        <v-btn color="primary">Get Template</v-btn>
26
+      </v-col>
27
+      <v-col cols="4">
28
+        <v-combobox v-if="telemarketer" label="Import Source" />
29
+        <v-combobox v-else label="Allocate To" />
30
+      </v-col>
31
+      <v-col cols="1" offset="5">
32
+        <v-combobox :items="importFilter" label="Importer" v-model="importer" />
33
+      </v-col>
34
+    </v-row>
35
+    <v-row>
36
+      <v-col cols="10" offset="1">
37
+        <v-data-table :headers="headers" />
38
+      </v-col>
39
+    </v-row>
40
+    <v-row>
41
+      <v-col cols="1" offset="10">
42
+        <v-text-field disabled label="Success" v-model="success" />
43
+      </v-col>
44
+      <v-col>
45
+        <v-text-field disabled label="Failed" v-model="failed" />
46
+      </v-col>
47
+    </v-row>
48
+  </v-container>
49
+</template>
50
+
51
+<script>
52
+export default {
53
+  name: "LeadImporter",
54
+  data() {
55
+    return {
56
+      telemarketer: true,
57
+      importer: "All",
58
+      success: 0,
59
+      failed: 0,
60
+      importFilter: ["All", "Success", "Failed"],
61
+      headers: [
62
+        { text: "Title", value: "title" },
63
+        { text: "Initials", value: "initials" },
64
+        { text: "First Name", value: "firstname" },
65
+        { text: "Surname", value: "surname" },
66
+        { text: "ID Number", value: "idNumber" },
67
+        { text: "Cellphone", value: "cellPhone" },
68
+        { text: "Workphone", value: "workPhone" },
69
+        { text: "Homephone", value: "homePhone" },
70
+        { text: "Email", value: "email" },
71
+        { text: "Street", value: "street" },
72
+        { text: "Suburb", value: "suburb" },
73
+        { text: "City", value: "city" },
74
+        { text: "Province", value: "province" },
75
+        { text: "Postal Code", value: "postalCode" },
76
+        { text: "Ethnicity", value: "ethnicity" },
77
+        { text: "Occupation", value: "occupation" },
78
+        { text: "Result", value: "result" }
79
+      ]
80
+    };
81
+  },
82
+  methods: {
83
+    SwitchMode() {
84
+      this.telemarketer = this.telemarketer !== true;
85
+    }
86
+  }
87
+};
88
+</script>

+ 41
- 0
src/components/shared/datePicker.vue ファイルの表示

1
+<template>
2
+  <v-menu
3
+    ref="menu"
4
+    v-model="menu"
5
+    :close-on-content-click="false"
6
+    transition="scale-transition"
7
+    offset-y
8
+    max-width="290px"
9
+    min-width="290px"
10
+  >
11
+    <template v-slot:activator="{ on }">
12
+      <v-text-field v-model="date" readonly v-on="on" label="Date"></v-text-field>
13
+      <!--prepend-icon="event" -->
14
+    </template>
15
+    <v-date-picker ref="picker" v-model="date" @change="save"></v-date-picker>
16
+  </v-menu>
17
+</template>
18
+
19
+<script>
20
+export default {
21
+  name: "DateTimePicker",
22
+  porps: {
23
+    label: { type: String, default: "Date" }
24
+  },
25
+  data: () => ({
26
+    date: null,
27
+    menu: false
28
+  }),
29
+  computed: {
30
+    computedDateFormatted() {
31
+      return this.formatDate(this.date);
32
+    }
33
+  },
34
+  methods: {
35
+    save(date) {
36
+      this.$refs.menu.save(date);
37
+    }
38
+  }
39
+};
40
+</script>
41
+

+ 31
- 0
src/components/shared/timePicker.vue ファイルの表示

1
+<template>
2
+  <v-menu
3
+    ref="menu"
4
+    v-model="menu2"
5
+    :close-on-content-click="false"
6
+    :nudge-right="40"
7
+    :return-value.sync="time"
8
+    transition="scale-transition"
9
+    offset-y
10
+    max-width="290px"
11
+    min-width="290px"
12
+  >
13
+    <template v-slot:activator="{ on }">
14
+      <v-text-field v-model="time" readonly v-on="on" label="Time"></v-text-field>
15
+      <!-- prepend-icon="access_time" -->
16
+    </template>
17
+    <v-time-picker v-if="menu2" v-model="time" full-width @click:minute="$refs.menu.save(time)"></v-time-picker>
18
+  </v-menu>
19
+</template>
20
+
21
+<script>
22
+export default {
23
+  data() {
24
+    return {
25
+      time: null,
26
+      menu2: false,
27
+      modal2: false
28
+    };
29
+  }
30
+};
31
+</script>

+ 54
- 0
src/components/shared/yearMonthFilter.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <v-row>
4
+      <v-col cols="1" offset="5">
5
+        <v-combobox label="Year" v-model="year" :items="YearList" />
6
+      </v-col>
7
+      <v-col cols="1">
8
+        <v-combobox label="Month" v-model="Month" :items="Months" />
9
+      </v-col>
10
+      <v-col cols="1">
11
+        <v-btn color="primary">Go</v-btn>
12
+      </v-col>
13
+    </v-row>
14
+  </v-container>
15
+</template>
16
+
17
+<script>
18
+export default {
19
+  name: "YearMonthFilter",
20
+  data() {
21
+    return {
22
+      Months: [
23
+        "January",
24
+        "February",
25
+        "March",
26
+        "April",
27
+        "May",
28
+        "June",
29
+        "July",
30
+        "August",
31
+        "September",
32
+        "October",
33
+        "November",
34
+        "December"
35
+      ],
36
+      year: new Date().getFullYear(),
37
+      years: []
38
+    };
39
+  },
40
+  computed: {
41
+    YearList: function() {
42
+      let years = this.years;
43
+      var tempyear = new Date().getFullYear() - 5;
44
+      for (var i = 0; i < 11; i++) {
45
+        years.push(tempyear + i);
46
+      }
47
+      return years;
48
+    },
49
+    Month: function() {
50
+      return this.Months[new Date().getMonth()];
51
+    }
52
+  }
53
+};
54
+</script>

+ 66
- 0
src/components/telemarketer/calls.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <div class="form-group row">
4
+      <div class="col-md-12">
5
+        <h2>Call Status</h2>
6
+      </div>
7
+    </div>
8
+    <div class="form-group row">
9
+      <div class="col-md-12">
10
+        <v-alert color="light-green" dark style="text-align:center">Idle</v-alert>
11
+      </div>
12
+    </div>
13
+    <div class="form-group row">
14
+      <div class="col-md-12">
15
+        <v-btn color="primary" class="col-md-1">Lead</v-btn>
16
+        <v-btn color="primary" class="col-md-6">Custom</v-btn>
17
+        <br />
18
+        <v-text-field clearable />
19
+      </div>
20
+    </div>
21
+    <div class="form-group row">
22
+      <div class="col-md-12">
23
+        <v-btn color="primary" class="col-md-1">1</v-btn>
24
+        <v-btn color="primary" class="col-md-1">2</v-btn>
25
+        <v-btn color="primary" class="col-md-1">3</v-btn>
26
+        <br />
27
+        <v-btn color="primary" class="col-md-1">4</v-btn>
28
+        <v-btn color="primary" class="col-md-1">5</v-btn>
29
+        <v-btn color="primary" class="col-md-1">6</v-btn>
30
+        <br />
31
+        <v-btn color="primary" class="col-md-1">7</v-btn>
32
+        <v-btn color="primary" class="col-md-1">8</v-btn>
33
+        <v-btn color="primary" class="col-md-1">9</v-btn>
34
+        <br />
35
+        <v-btn color="primary" class="col-md-1">*</v-btn>
36
+        <v-btn color="primary" class="col-md-1">0</v-btn>
37
+        <v-btn color="primary" class="col-md-1">#</v-btn>
38
+      </div>
39
+    </div>
40
+    <div class="form-group row">
41
+      <div class="col-md-12">
42
+        <v-alert color="light-green" dark style="text-align:center">0:00</v-alert>
43
+        <v-alert color="light-green" dark style="text-align:center"></v-alert>
44
+      </div>
45
+    </div>
46
+    <div class="form-group row">
47
+      <div class="col-md-12">
48
+        <v-btn color="green" class="col-md-1">
49
+          <!-- <v-icon>phone</v-icon> -->
50
+          <span class="mdi mdi-phone"></span>
51
+        </v-btn>
52
+        <v-btn color="primary" class="col-md-1">
53
+          <!-- <v-icon>mic</v-icon> -->
54
+          <span class="mdi mdi-microphone-off"></span>
55
+        </v-btn>
56
+        <v-btn color="red" class="col-md-1">
57
+          <span class="mdi mdi-phone-hangup large"></span>
58
+        </v-btn>
59
+      </div>
60
+    </div>
61
+  </v-container>
62
+</template>
63
+
64
+<script>
65
+export default {};
66
+</script>

+ 13
- 0
src/components/telemarketer/feedback.vue ファイルの表示

1
+<template>
2
+  <v-container>
3
+    <v-row>
4
+      <v-select />
5
+    </v-row>
6
+    <v-row>
7
+      <v-textarea filled />
8
+    </v-row>
9
+    <v-row>
10
+      <v-btn color="primary">Add</v-btn>
11
+    </v-row>
12
+  </v-container>
13
+</template>

+ 186
- 0
src/components/telemarketer/lead.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <v-col cols="10">
4
+      <v-row>
5
+        <v-col>
6
+          <v-chip class="ma-2 col-md-12" label>lead name</v-chip>
7
+        </v-col>
8
+      </v-row>
9
+      <v-row>
10
+        <v-btn color="primary">Cellphone</v-btn>
11
+        <v-btn color="primary">Workphone</v-btn>
12
+        <v-btn color="primary">Homephone</v-btn>
13
+      </v-row>
14
+      <v-row>
15
+        <v-text-field label="Lead Number" class="col-md-4" />
16
+        <v-text-field label="Language" class="col-md-4" />
17
+        <v-text-field label="Ethnicity" class="col-md-4" />
18
+      </v-row>
19
+      <v-row>
20
+        <v-text-field label="Age" class="col-md-4" />
21
+        <v-text-field label="Marital Status" class="col-md-4" />
22
+        <v-text-field label="Email" class="col-md-4" />
23
+      </v-row>
24
+      <v-row>
25
+        <v-text-field label="Address" class="col-md-6" />
26
+        <v-text-field label="Occupation" class="col-md-6" />
27
+      </v-row>
28
+      <v-row>
29
+        <v-text-field class="col-md-6" />
30
+      </v-row>
31
+      <v-row>
32
+        <v-text-field class="col-md-6" />
33
+        <v-text-field label="Spouse Occupation" class="col-md-6" />
34
+      </v-row>
35
+      <v-row>
36
+        <v-text-field class="col-md-6" />
37
+      </v-row>
38
+    </v-col>
39
+    <v-col cols="2">
40
+      <v-card class="d-inline-block mx-auto">
41
+        <v-container>
42
+          <v-row justify="space-between">
43
+            <v-chip class="ma-2 col-md-11" label>Comment</v-chip>
44
+          </v-row>
45
+          <v-row justify="space-between">
46
+            <v-textarea filled class="col-md-11" />
47
+          </v-row>
48
+          <v-row>
49
+            <v-col cols="1">
50
+              <v-btn color="primary">UPDATE</v-btn>
51
+            </v-col>
52
+          </v-row>
53
+          <br />
54
+          <v-row>
55
+            <v-chip class="ma-2 col-md-11" label>Reschedule Call</v-chip>
56
+          </v-row>
57
+          <v-row>
58
+            <v-col cols="6">
59
+              <datepicker />
60
+            </v-col>
61
+            <v-col cols="6">
62
+              <timepicker />
63
+            </v-col>
64
+          </v-row>
65
+          <v-row>
66
+            <v-col cols="1">
67
+              <v-btn color="primary">UPDATE</v-btn>
68
+            </v-col>
69
+          </v-row>
70
+        </v-container>
71
+      </v-card>
72
+    </v-col>
73
+    <v-row>
74
+      <hr />
75
+    </v-row>
76
+    <v-row>
77
+      <v-col cols="11">
78
+        <v-container>
79
+          <v-layout align-left md-12 xs-6>
80
+            <v-flex align-left md-3 xs-1>
81
+              <v-btn color="secondery">release lead</v-btn>
82
+              <v-btn color="secondery">do not contact</v-btn>
83
+              <v-dialog v-model="dialog" persistent max-width="400">
84
+                <template v-slot:activator="{ on }">
85
+                  <v-btn color="secondery" v-on="on">Make Booking</v-btn>
86
+                </template>
87
+                <v-card>
88
+                  <booking />
89
+                  <!-- <v-card-title class="headline">Use Google's location service?</v-card-title>
90
+                  <v-card-text>Let Google help apps determine location. This means sending anonymous location data to Google, even when no apps are running.</v-card-text>
91
+                  -->
92
+                  <v-card-actions>
93
+                    <v-spacer></v-spacer>
94
+                    <v-btn color="primary" text @click="dialog = false">Close</v-btn>
95
+                  </v-card-actions>
96
+                </v-card>
97
+              </v-dialog>
98
+            </v-flex>
99
+            <v-flex align-left md-1 xs-1>
100
+              <v-text-field disabled label="Bookings" />
101
+            </v-flex>
102
+            <v-flex align-left md-1 xs-1>
103
+              <v-text-field disabled label="Calls" />
104
+            </v-flex>
105
+          </v-layout>
106
+        </v-container>
107
+      </v-col>
108
+      <v-col cols="1">
109
+        <v-btn color="green">
110
+          <span class="mdi mdi-phone"></span>
111
+        </v-btn>
112
+      </v-col>
113
+    </v-row>
114
+    <v-row>
115
+      <hr />
116
+    </v-row>
117
+    <v-row>
118
+      <v-tabs background-color="primary" class="elevation-2" dark :vertical="true">
119
+        <v-tab>feedback</v-tab>
120
+        <v-tab>bookings</v-tab>
121
+        <v-tab>Call History</v-tab>
122
+        <v-tab-item>
123
+          <v-container>
124
+            <v-layout align-left md-12 xs-6>
125
+              <v-flex align-left md-2 xs-1>
126
+                <feedback />
127
+              </v-flex>
128
+              <v-flex align-left md-10 xs-1>
129
+                <v-data-table :headers="feedbackHeaders" />
130
+              </v-flex>
131
+            </v-layout>
132
+          </v-container>
133
+        </v-tab-item>
134
+        <v-tab-item>
135
+          <v-data-table :headers="bookingsHeaders" />
136
+        </v-tab-item>
137
+        <v-tab-item>
138
+          <v-data-table :headers="callHeaders" />
139
+        </v-tab-item>
140
+      </v-tabs>
141
+    </v-row>
142
+  </v-container>
143
+</template>
144
+
145
+<script>
146
+import datepicker from "../shared/datePicker";
147
+import timepicker from "../shared/timePicker";
148
+import feedback from "./feedback";
149
+import booking from "../booking/bookingCreate";
150
+
151
+export default {
152
+  components: {
153
+    datepicker,
154
+    timepicker,
155
+    feedback,
156
+    booking
157
+  },
158
+  data() {
159
+    return {
160
+      dialog: false,
161
+      feedbackHeaders: [
162
+        { text: "Feedback Type", value: "feedbackType" },
163
+        { text: "Notes", value: "notes" },
164
+        { text: "Date", value: "date" },
165
+        { text: "Telemarketer", value: "telemarketer" }
166
+      ],
167
+      bookingsHeaders: [
168
+        { text: "Booking Ref", value: "bookingRef" },
169
+        { text: "Booking Date", value: "BookingDate" },
170
+        { text: "Lead", value: "lead" },
171
+        { text: "Session", value: "session" },
172
+        { text: "Venue", value: "venue" },
173
+        { text: "Telemarketer", value: "telemarketer" },
174
+        { text: "Arrived", value: "arrived" }
175
+      ],
176
+      callHeaders: [
177
+        { text: "Date", value: "date" },
178
+        { text: "Call Duration", value: "callDuration" },
179
+        { text: "Bill Seconds", value: "billSeconds" },
180
+        { text: "Disposition", value: "disposition" },
181
+        { text: "Telemarketer", value: "telemarketer" }
182
+      ]
183
+    };
184
+  }
185
+};
186
+</script>

+ 52
- 0
src/components/telemarketer/leadFindByTel.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <h3>Find Lead By Tel</h3>
4
+    <v-row>
5
+      <v-col cols="10">
6
+        <v-text-field placeholder="Phone Number" />
7
+      </v-col>
8
+      <v-col cols="1">
9
+        <v-btn color="primary">Find</v-btn>
10
+      </v-col>
11
+      <v-col cols="1">
12
+        <v-btn color="primary">Clear</v-btn>
13
+      </v-col>
14
+    </v-row>
15
+    <v-row>
16
+      <v-card v-if="false" class="mx-auto" max-width="344">
17
+        <v-card-text>
18
+          <div style="text-align:center">Lead was found in system, lead can be allocated.</div>
19
+          <br />
20
+          <v-btn color="primary" class="col-md-12">ALLOCATE LEAD</v-btn>
21
+        </v-card-text>
22
+      </v-card>
23
+      <v-card v-else class="mx-auto" max-width="344">
24
+        <v-card-text>
25
+          <div style="text-align:center">Lead was not found in system, lead can be added.</div>
26
+        </v-card-text>
27
+      </v-card>
28
+    </v-row>
29
+    <v-row>
30
+      <v-col cols="12">
31
+        <div style="text-align:center">
32
+          <v-chip class="ma-2 col-md-12" label>Invalid Number</v-chip>
33
+        </div>
34
+      </v-col>
35
+    </v-row>
36
+    <v-row>
37
+      <v-col cols="12">
38
+        <v-btn color="primary" @click="Close">Close</v-btn>
39
+      </v-col>
40
+    </v-row>
41
+  </v-container>
42
+</template>
43
+
44
+<script>
45
+export default {
46
+  methods: {
47
+    Close() {
48
+      this.$router.push("telemarketer");
49
+    }
50
+  }
51
+};
52
+</script>

+ 67
- 0
src/components/telemarketer/leads.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <v-row>
4
+      <v-container>
5
+        <v-btn color="primary" @click="FindClick">FIND BY TEL</v-btn>
6
+      </v-container>
7
+      <v-container>
8
+        <v-btn color="primary">RELEASE</v-btn>
9
+      </v-container>
10
+      <v-container>
11
+        <v-btn color="primary" @click="ReplenishClick">REPLENISH</v-btn>
12
+      </v-container>
13
+    </v-row>
14
+    <v-row>
15
+      <v-select v-model="select" :items="items" single-line />
16
+    </v-row>
17
+    <v-row>
18
+      <v-text-field clearable />
19
+    </v-row>
20
+    <v-row>
21
+      <v-col cols="12">
22
+        <v-data-table
23
+          v-if="leads.length > 0"
24
+          :headers="headers"
25
+          :items="leads"
26
+          :items-per-page="10"
27
+          class="elevation-1"
28
+          show-select
29
+        ></v-data-table>
30
+        <v-card v-else class="mx-auto" max-width="344">
31
+          <v-card-text>
32
+            <div style="text-align:center">No leads currently allocated</div>
33
+            <br />
34
+            <v-btn color="primary" class="col-md-12" @click="ReplenishClick">REPLENISH</v-btn>
35
+          </v-card-text>
36
+        </v-card>
37
+      </v-col>
38
+    </v-row>
39
+  </v-container>
40
+</template>
41
+
42
+<script>
43
+export default {
44
+  data() {
45
+    return {
46
+      select: "Pool",
47
+      items: ["Pool", "Own", "Call Back"],
48
+      leads: [],
49
+      headers: [
50
+        { text: "Initals", value: "initals" },
51
+        { text: "Surname", value: "surname" },
52
+        { text: "Import Source", value: "importSource" },
53
+        { text: "Last Called", value: "lastCalled" },
54
+        { text: "Callback Date", value: "callbackDate" }
55
+      ]
56
+    };
57
+  },
58
+  methods: {
59
+    FindClick() {
60
+      this.$router.push("leadFind");
61
+    },
62
+    ReplenishClick() {
63
+      this.$router.push("leadReplenish");
64
+    }
65
+  }
66
+};
67
+</script>

+ 30
- 0
src/components/telemarketer/replenishLeads.vue ファイルの表示

1
+<template>
2
+  <v-card class="mx-auto" max-width="344" outlined>
3
+    <v-list-item style="text-align:center">
4
+      <v-list-item-content>
5
+        <v-list-item-title class="headline mb-1">Replenish Leads</v-list-item-title>
6
+        <v-list-item-subtitle>Select an Import Source</v-list-item-subtitle>
7
+        <v-select />
8
+        <div>OR</div>
9
+        <v-container class="justify-center">
10
+          <v-switch label="Random Sources" />
11
+        </v-container>
12
+      </v-list-item-content>
13
+    </v-list-item>
14
+
15
+    <v-card-actions class="justify-center">
16
+      <v-btn color="primary">Replenish</v-btn>
17
+      <v-btn color="primary" @click="Close">Close</v-btn>
18
+    </v-card-actions>
19
+  </v-card>
20
+</template>
21
+
22
+<script>
23
+export default {
24
+  methods: {
25
+    Close() {
26
+      this.$router.push("/telemaketer");
27
+    }
28
+  }
29
+};
30
+</script>

+ 3
- 0
src/components/telemarketer/telemarketer.vue ファイルの表示

1
+<template>
2
+  <div></div>
3
+</template>

+ 26
- 0
src/components/telemarketer/telemarketerBar.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <v-tabs>
4
+      <v-tab>Leads</v-tab>
5
+      <v-tab>Call</v-tab>
6
+      <v-tab-item>
7
+        <leads />
8
+      </v-tab-item>
9
+      <v-tab-item>
10
+        <calls />
11
+      </v-tab-item>
12
+    </v-tabs>
13
+  </v-container>
14
+</template>
15
+
16
+<script>
17
+import calls from "./calls.vue";
18
+import leads from "./leads.vue";
19
+
20
+export default {
21
+  components: {
22
+    calls,
23
+    leads
24
+  }
25
+};
26
+</script>

+ 50
- 0
src/components/user/login.vue ファイルの表示

1
+<template>
2
+  <v-container class="fill-height" fluid>
3
+    <v-row align="center" justify="center">
4
+      <v-col cols="12" sm="6">
5
+        <v-card class="elevation-24">
6
+          <v-toolbar color="primary" dark flat>
7
+            <v-toolbar-title>Login</v-toolbar-title>
8
+            <v-spacer />
9
+          </v-toolbar>
10
+          <v-card-text>
11
+            <v-form>
12
+              <v-text-field label="Username" name="login" type="text" />
13
+              <!--prepend-icon="person"-->
14
+              <v-text-field
15
+                id="password"
16
+                label="Password"
17
+                name="password"
18
+                :append-icon="show1 ? 'mdi-eye' : 'mdi-eye-off'"
19
+                :rules="rules.required"
20
+                :type="show1 ? 'text' : 'password'"
21
+                @click:append="show1 = !show1"
22
+              />
23
+              <!--prepend-icon="lock"-->
24
+            </v-form>
25
+          </v-card-text>
26
+          <v-card-actions>
27
+            <v-spacer />
28
+            <v-btn color="primary">Login</v-btn>
29
+          </v-card-actions>
30
+        </v-card>
31
+      </v-col>
32
+    </v-row>
33
+  </v-container>
34
+</template>
35
+
36
+<script>
37
+export default {
38
+  props: {
39
+    source: String
40
+  },
41
+  data() {
42
+    return {
43
+      show1: false,
44
+      rules: {
45
+        required: value => !!value || "Required."
46
+      }
47
+    };
48
+  }
49
+};
50
+</script>

+ 13
- 11
src/main.js ファイルの表示

1
-import Vue from "vue";
2
-import App from "./App.vue";
3
-import router from "./router";
4
-import store from "./store";
5
-import vuetify from "./plugins/vuetify";
1
+import Vue from 'vue'
2
+import App from './App.vue'
3
+import router from './router'
4
+import store from './store'
5
+import vuetify from './plugins/vuetify'
6
+import 'vuetify/dist/vuetify.min.css'
7
+import 'material-design-icons-iconfont/dist/material-design-icons.css'
6
 
8
 
7
-Vue.config.productionTip = false;
9
+Vue.config.productionTip = false
8
 
10
 
9
 new Vue({
11
 new Vue({
10
-  router,
11
-  store,
12
-  vuetify,
13
-  render: h => h(App)
14
-}).$mount("#app");
12
+	router,
13
+	store,
14
+	vuetify,
15
+	render: h => h(App),
16
+}).$mount('#app')

+ 66
- 24
src/router/index.js ファイルの表示

1
-import Vue from "vue";
2
-import VueRouter from "vue-router";
3
-import Home from "../views/Home.vue";
1
+import Vue from 'vue'
2
+import VueRouter from 'vue-router'
3
+import Home from '../views/Home.vue'
4
+import Telemarketer from '../components/telemarketer/telemarketer.vue'
5
+import lead from '../components/telemarketer/lead.vue'
6
+import replenishLead from '../components/telemarketer/replenishLeads.vue'
7
+import leadFind from '../components/telemarketer/leadFindByTel.vue'
8
+import Booking from '../components/booking/booking.vue'
9
+import Calls from '../components/calls/calls.vue'
10
+import Importer from '../components/importer/leadImporter.vue'
4
 
11
 
5
-Vue.use(VueRouter);
12
+Vue.use(VueRouter)
6
 
13
 
7
 const routes = [
14
 const routes = [
8
-  {
9
-    path: "/",
10
-    name: "home",
11
-    component: Home
12
-  },
13
-  {
14
-    path: "/about",
15
-    name: "about",
16
-    // route level code-splitting
17
-    // this generates a separate chunk (about.[hash].js) for this route
18
-    // which is lazy-loaded when the route is visited.
19
-    component: () =>
20
-      import(/* webpackChunkName: "about" */ "../views/About.vue")
21
-  }
22
-];
15
+	{
16
+		path: '/',
17
+		name: 'home',
18
+		component: Home,
19
+	},
20
+	{
21
+		path: '/about',
22
+		name: 'about',
23
+		// route level code-splitting
24
+		// this generates a separate chunk (about.[hash].js) for this route
25
+		// which is lazy-loaded when the route is visited.
26
+		component: () =>
27
+			import(/* webpackChunkName: "about" */ '../views/About.vue'),
28
+	},
29
+	{
30
+		path: '/telemaketer',
31
+		name: 'Telemarketing',
32
+		component: Telemarketer,
33
+	},
34
+	{
35
+		path: '/lead/:id',
36
+		name: 'Lead',
37
+		component: lead,
38
+	},
39
+	{
40
+		path: '/leadReplenish',
41
+		name: 'LeadReplenish',
42
+		component: replenishLead,
43
+	},
44
+	{
45
+		path: '/leadFind',
46
+		name: 'LeadFind',
47
+		component: leadFind,
48
+	},
49
+	{
50
+		path: '/booking',
51
+		name: 'Booking',
52
+		component: Booking,
53
+	},
54
+	{
55
+		path: '/calls',
56
+		name: 'Calls',
57
+		component: Calls,
58
+	},
59
+	{
60
+		path: '/importer',
61
+		name: 'Importer',
62
+		component: Importer,
63
+	},
64
+]
23
 
65
 
24
 const router = new VueRouter({
66
 const router = new VueRouter({
25
-  mode: "history",
26
-  base: process.env.BASE_URL,
27
-  routes
28
-});
67
+	mode: 'history',
68
+	base: process.env.BASE_URL,
69
+	routes,
70
+})
29
 
71
 
30
-export default router;
72
+export default router

+ 0
- 0
src/store/modules/telemarketer/telematketer.js ファイルの表示


+ 0
- 0
src/store/modules/user/authentication.js ファイルの表示


読み込み中…
キャンセル
保存