diff --git a/package.json b/package.json index 7711d74a..637b1d30 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@coreui/vue": "^5.8.0", "@coreui/vue-chartjs": "^3.0.0", "@popperjs/core": "^2.11.8", + "axios": "^1.18.1", "chart.js": "^4.5.1", "pinia": "^3.0.4", "simplebar-vue": "^2.4.2", diff --git a/src/services/api.js b/src/services/api.js new file mode 100644 index 00000000..8f28047c --- /dev/null +++ b/src/services/api.js @@ -0,0 +1,19 @@ +import axios from 'axios' + +const api = axios.create({ + baseURL: 'https://api.radiq.my.id/api', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + Authorization: 'Bearer uZ1vM4UON3CsDV9niGD1gLS4sHpCxT9nzadkITmc6caf2ea2', + }, +}) + +api.interceptors.response.use( + (response) => response, + (error) => { + return Promise.reject(error) + }, +) + +export default api diff --git a/src/stores/ticketType.js b/src/stores/ticketType.js new file mode 100644 index 00000000..119b6d6b --- /dev/null +++ b/src/stores/ticketType.js @@ -0,0 +1,94 @@ +import { ref } from 'vue' +import { defineStore } from 'pinia' +import api from '@/services/api.js' + +export const useTicketTypeStore = defineStore('ticketType', () => { + const ticketTypes = ref([]) + const loading = ref(false) + const error = ref(null) + + async function fetchTicketTypes(page = 1) { + loading.value = true + error.value = null + try { + const response = await api.get(`/ticket-types?page=${page}`) + ticketTypes.value = response.data.data.data + return response.data.data + } catch (err) { + error.value = err.response?.data?.message || err.message || 'Gagal memuat data' + throw err + } finally { + loading.value = false + } + } + + async function fetchTicketType(id) { + loading.value = true + error.value = null + try { + const response = await api.get(`/ticket-types/${id}`) + return response.data.data + } catch (err) { + error.value = err.response?.data?.message || err.message || 'Gagal memuat data' + throw err + } finally { + loading.value = false + } + } + + async function addTicketType(ticketType) { + loading.value = true + error.value = null + try { + const response = await api.post('/ticket-types', ticketType) + return response.data + } catch (err) { + error.value = err.response?.data?.message || err.message || 'Gagal menambah data' + throw err + } finally { + loading.value = false + } + } + + async function updateTicketType(id, ticketType) { + loading.value = true + error.value = null + try { + const response = await api.post(`/ticket-types/${id}`, { + ...ticketType, + _method: 'PUT', + }) + return response.data + } catch (err) { + error.value = err.response?.data?.message || err.message || 'Gagal mengupdate data' + throw err + } finally { + loading.value = false + } + } + + async function deleteTicketType(id) { + loading.value = true + error.value = null + try { + const response = await api.delete(`/ticket-types/${id}`) + return response.data + } catch (err) { + error.value = err.response?.data?.message || err.message || 'Gagal menghapus data' + throw err + } finally { + loading.value = false + } + } + + return { + ticketTypes, + loading, + error, + fetchTicketTypes, + fetchTicketType, + addTicketType, + updateTicketType, + deleteTicketType, + } +}) diff --git a/src/views/tickets/TicketType.vue b/src/views/tickets/TicketType.vue index b333016f..18512353 100644 --- a/src/views/tickets/TicketType.vue +++ b/src/views/tickets/TicketType.vue @@ -1,54 +1,346 @@ + +