adding 7 table for menu Gangguan
This commit is contained in:
		| @@ -1,299 +0,0 @@ | |||||||
| <template> |  | ||||||
|     <div class="mx-auto max-w-7xl dx-viewport"> |  | ||||||
|         <div class="flex flex-col p-4 bg-white rounded-lg drop-shadow-sm min-h-96"> |  | ||||||
|             <nav class="flex flex-wrap gap-4 mb-4" aria-label="Tabs"> |  | ||||||
|                 <a v-for="(tab, index) in tabs" :key="tab.name" @click="changeTab(index)" |  | ||||||
|                     :class="[tabChecked === index ? 'bg-primary-100 text-primary-900' : 'text-gray-500 hover:text-gray-700', 'cursor-pointer px-3 py-2 font-medium text-sm rounded-md']" |  | ||||||
|                     :aria-current="tabChecked === index ? 'page' : undefined">{{ tab.name }}</a> |  | ||||||
|             </nav> |  | ||||||
|  |  | ||||||
|             <!-- Filters --> |  | ||||||
|             <section aria-labelledby="filter-heading"> |  | ||||||
|                 <h2 id="filter-heading" class="sr-only">Filters</h2> |  | ||||||
|  |  | ||||||
|                 <div class="pb-4 bg-white"> |  | ||||||
|                     <div class="flex flex-wrap items-center px-0 mx-auto lg:justify-between max-w-7xl"> |  | ||||||
|                         <Menu as="div" |  | ||||||
|                             class="relative flex-1 inline-block w-full mb-2 mr-2 text-left lg-2 lg:mb-0 md:flex-none lg:w-fit"> |  | ||||||
|                             <MenuButton |  | ||||||
|                                 class="flex inline-flex items-center justify-between w-full px-2 py-2 text-xs font-medium text-gray-700 border border-gray-100 rounded-md whitespace-nowrap group hover:text-gray-900"> |  | ||||||
|                                 Cari dengan : <b>{{ searchOptions.find(option => option.current === true)?.name }}</b> |  | ||||||
|                                 <ChevronDownIcon |  | ||||||
|                                     class="flex-shrink-0 w-3 h-3 ml-1 -mr-1 text-gray-400 group-hover:text-gray-500" |  | ||||||
|                                     aria-hidden="true" /> |  | ||||||
|                             </MenuButton> |  | ||||||
|  |  | ||||||
|                             <transition enter-active-class="transition duration-100 ease-out" |  | ||||||
|                                 enter-from-class="transform scale-95 opacity-0" |  | ||||||
|                                 enter-to-class="transform scale-100 opacity-100" |  | ||||||
|                                 leave-active-class="transition duration-75 ease-in" |  | ||||||
|                                 leave-from-class="transform scale-100 opacity-100" |  | ||||||
|                                 leave-to-class="transform scale-95 opacity-0"> |  | ||||||
|                                 <MenuItems |  | ||||||
|                                     class="absolute left-0 z-10 w-40 mt-2 origin-top-left bg-white rounded-md shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none"> |  | ||||||
|                                     <div class="py-1"> |  | ||||||
|                                         <MenuItem v-for="(option, index) in searchOptions" :key="option.name" |  | ||||||
|                                             v-slot="{ active }"> |  | ||||||
|                                         <a @click="handleChangeSearchOption(index)" |  | ||||||
|                                             :class="[option.current ? 'font-medium text-gray-900' : 'text-gray-500', active ? 'bg-gray-100' : '', 'block px-4 py-2 text-xs']">{{ |  | ||||||
|                                                 option.name }}</a> |  | ||||||
|                                         </MenuItem> |  | ||||||
|                                     </div> |  | ||||||
|                                 </MenuItems> |  | ||||||
|                             </transition> |  | ||||||
|                         </Menu> |  | ||||||
|  |  | ||||||
|                         <PopoverGroup class="items-center flex-1 mb-2 sm:mr-2 lg:mb-0 md:flex-none lg:w-fit"> |  | ||||||
|                             <Popover class="relative inline-block w-full px-2 text-left"> |  | ||||||
|                                 <PopoverButton |  | ||||||
|                                     class="flex inline-flex items-center justify-between w-full px-2 py-2 text-xs text-gray-700 border border-gray-100 rounded-md whitespace-nowrap group"> |  | ||||||
|                                     <span class="flex-1 text-left">Order by</span> |  | ||||||
|                                     <span v-if="orderByOptions.filter(option => option.checked).length > 0" |  | ||||||
|                                         class="ml-1.5 rounded bg-gray-100 py-0.2 px-1.5 text-[10px] flex-none font-bold tabular-nums text-gray-500"> |  | ||||||
|                                         {{ orderByOptions.filter(option => option.checked).length }} |  | ||||||
|                                     </span> |  | ||||||
|                                     <ChevronDownIcon |  | ||||||
|                                         class="flex-none flex-shrink-0 w-3 h-3 ml-1 -mr-1 text-gray-400 group-hover:text-gray-500" |  | ||||||
|                                         aria-hidden="true" /> |  | ||||||
|                                 </PopoverButton> |  | ||||||
|  |  | ||||||
|                                 <transition enter-active-class="transition duration-100 ease-out" |  | ||||||
|                                     enter-from-class="transform scale-95 opacity-0" |  | ||||||
|                                     enter-to-class="transform scale-100 opacity-100" |  | ||||||
|                                     leave-active-class="transition duration-75 ease-in" |  | ||||||
|                                     leave-from-class="transform scale-100 opacity-100" |  | ||||||
|                                     leave-to-class="transform scale-95 opacity-0"> |  | ||||||
|                                     <PopoverPanel |  | ||||||
|                                         class="absolute right-0 z-10 p-4 mt-2 origin-top-right bg-white rounded-md shadow-2xl ring-1 ring-black ring-opacity-5 focus:outline-none"> |  | ||||||
|                                         <form class="space-y-4"> |  | ||||||
|                                             <div v-for="(option, optionIdx) in orderByOptions" :key="option.value" |  | ||||||
|                                                 class="flex items-center"> |  | ||||||
|                                                 <input :value="option.value" type="checkbox" :checked="option.checked" |  | ||||||
|                                                     @change="handleChangeOrderBy(optionIdx, !option.checked)" |  | ||||||
|                                                     class="w-4 h-4 text-indigo-600 border-gray-300 rounded focus:ring-indigo-500" /> |  | ||||||
|                                                 <label |  | ||||||
|                                                     class="pr-6 ml-3 text-sm font-medium text-gray-900 whitespace-nowrap"> |  | ||||||
|                                                     {{ option.label }} |  | ||||||
|                                                 </label> |  | ||||||
|                                             </div> |  | ||||||
|                                         </form> |  | ||||||
|                                     </PopoverPanel> |  | ||||||
|                                 </transition> |  | ||||||
|                             </Popover> |  | ||||||
|                         </PopoverGroup> |  | ||||||
|  |  | ||||||
|                         <div class="relative inline-block mb-2 mr-2 text-left lg:mb-0 grow xs:mt-0 md:flex-1"> |  | ||||||
|                             <div class="w-full md:max-w-[220px]"> |  | ||||||
|                                 <vue-tailwind-datepicker v-model="dateValue" i18n="id" :options="datePickerOptions" |  | ||||||
|                                     :formatter="formatter" placeholder="Filter Tanggal" :auto-apply="false" |  | ||||||
|                                     input-classes="bg-white text-gray-900 border rounded-md border-gray-100 text-xs px-2 py-2 focus:ring-0 focus:border-gray-100" |  | ||||||
|                                     :disabled="false" as-single use-range separator=" s/d " /> |  | ||||||
|                             </div> |  | ||||||
|                         </div> |  | ||||||
|  |  | ||||||
|                         <form @submit.prevent="handleSubmitSearch" |  | ||||||
|                             class="flex lg:mt-0 items-center w-full !py-1 border-0 border-gray-100 rounded-lg bg-gray-50 flex-between lg:w-fit"> |  | ||||||
|                             <!-- <ButtonDropdown button-style="bg-primary-50" text-style="text-xs" :data="searchBy" |  | ||||||
|                                 :checked="searchByChecked" @update:checked="handleSearchByChange" /> |  | ||||||
|  |  | ||||||
|                             <div class="h-5 mx-2 border-r-2 border-gray-100"></div> |  | ||||||
|  |  | ||||||
|                             <ButtonPrimary label="Order By" |  | ||||||
|                                 class-name="bg-primary-50 mt-0 py-2 text-xs !px-2 !text-dark font-normal rounded-md mr-4" /> --> |  | ||||||
|  |  | ||||||
|                             <InputText class-name="flex-1 bg-transparent text-xs !py-0 px-2 placeholder:text-gray-600" |  | ||||||
|                                 placeholder="Masukan Pencarian" /> |  | ||||||
|  |  | ||||||
|                             <ButtonPrimary type="submit" |  | ||||||
|                                 class-name="mr-1 flex flex-row bg-primary-500 !mt-0 text-xs !px-2 !text-white font-normal rounded-md"> |  | ||||||
|                                 <MagnifyingGlassIcon class="w-4 h-4 lg:mr-2" aria-hidden="true" /> |  | ||||||
|                                 <span class="hidden lg:block">Cari</span> |  | ||||||
|                             </ButtonPrimary> |  | ||||||
|                         </form> |  | ||||||
|                     </div> |  | ||||||
|                 </div> |  | ||||||
|  |  | ||||||
|                 <!-- Active filters --> |  | ||||||
|                 <div class="border-gray-100 bg-gray-50 border-x border-y" |  | ||||||
|                     v-if="orderByOptions.filter((e) => e.checked).length > 0"> |  | ||||||
|                     <div class="px-2 py-3 mx-auto max-w-7xl sm:flex sm:items-center sm:px-2 lg:px-4"> |  | ||||||
|                         <h3 class="text-xs font-medium text-gray-700"> |  | ||||||
|                             Order by |  | ||||||
|                             <span class="sr-only">, active</span> |  | ||||||
|                         </h3> |  | ||||||
|  |  | ||||||
|                         <div aria-hidden="true" class="hidden w-px h-5 bg-gray-300 sm:ml-4 sm:block" /> |  | ||||||
|  |  | ||||||
|                         <div class="mt-2 sm:mt-0 sm:ml-4"> |  | ||||||
|                             <div class="flex flex-wrap items-center -m-1"> |  | ||||||
|                                 <span v-for="(order, index) in orderByOptions.filter((e) => e.checked)" :key="order.value" |  | ||||||
|                                     class="m-1 inline-flex items-center rounded-full border border-gray-100 bg-white py-1.5 pl-3 pr-2 text-xs font-medium text-gray-900"> |  | ||||||
|                                     <span>{{ order.label }}</span> |  | ||||||
|                                     <button @click="handleChangeOrderBy(index, !order.checked)" type="button" |  | ||||||
|                                         class="inline-flex flex-shrink-0 w-4 h-4 p-1 ml-1 text-gray-400 rounded-full hover:bg-gray-200 hover:text-gray-500"> |  | ||||||
|                                         <span class="sr-only">Remove filter for {{ order.label }}</span> |  | ||||||
|                                         <svg class="w-2 h-2" stroke="currentColor" fill="none" viewBox="0 0 8 8"> |  | ||||||
|                                             <path stroke-linecap="round" stroke-width="1.5" d="M1 1l6 6m0-6L1 7" /> |  | ||||||
|                                         </svg> |  | ||||||
|                                     </button> |  | ||||||
|                                 </span> |  | ||||||
|                             </div> |  | ||||||
|                         </div> |  | ||||||
|                     </div> |  | ||||||
|                 </div> |  | ||||||
|             </section> |  | ||||||
|  |  | ||||||
|             <DxDataGrid :data-source="dataSource" :remote-operations="false" :allow-column-reordering="true" |  | ||||||
|                 :row-alternation-enabled="true" :show-borders="true" @content-ready="onContentReady"> |  | ||||||
|                 <!-- <DxColumn :group-index="0" data-field="Product" /> --> |  | ||||||
|                 <DxColumn data-field="Amount" caption="Sale Amount" data-type="number" format="currency" |  | ||||||
|                     alignment="right" /> |  | ||||||
|                 <DxColumn :allow-grouping="false" data-field="Discount" caption="Discount %" data-type="number" |  | ||||||
|                     format="percent" alignment="right" cell-template="discountCellTemplate" css-class="bullet" /> |  | ||||||
|                 <DxColumn data-field="SaleDate" data-type="date" /> |  | ||||||
|                 <DxColumn data-field="Region" data-type="string" /> |  | ||||||
|                 <DxColumn data-field="Sector" data-type="string" /> |  | ||||||
|                 <DxColumn data-field="Channel" data-type="string" /> |  | ||||||
|                 <DxColumn :width="150" data-field="Customer" data-type="string" /> |  | ||||||
|  |  | ||||||
|                 <!-- <DxGroupPanel :visible="true" /> --> |  | ||||||
|                 <!-- <DxFilterRow :visible="true" /> --> |  | ||||||
|                 <!-- <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> --> |  | ||||||
|                 <DxGrouping :auto-expand-all="false" /> |  | ||||||
|                 <DxPager :allowed-page-sizes="pageSizes" :show-page-size-selector="true" /> |  | ||||||
|                 <DxPaging :page-size="10" /> |  | ||||||
|                 <DxSelection mode="single" /> |  | ||||||
|             </DxDataGrid> |  | ||||||
|         </div> |  | ||||||
|     </div> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script setup lang="ts"> |  | ||||||
| import { ref, type PropType } from 'vue'; |  | ||||||
| import VueTailwindDatepicker from 'vue-tailwind-datepicker' |  | ||||||
| import { |  | ||||||
|     Dialog, |  | ||||||
|     DialogPanel, |  | ||||||
|     Disclosure, |  | ||||||
|     DisclosureButton, |  | ||||||
|     DisclosurePanel, |  | ||||||
|     Menu, |  | ||||||
|     MenuButton, |  | ||||||
|     MenuItem, |  | ||||||
|     MenuItems, |  | ||||||
|     Popover, |  | ||||||
|     PopoverButton, |  | ||||||
|     PopoverGroup, |  | ||||||
|     PopoverPanel, |  | ||||||
|     TransitionChild, |  | ||||||
|     TransitionRoot, |  | ||||||
| } from '@headlessui/vue' |  | ||||||
|  |  | ||||||
| import { |  | ||||||
|     DxDataGrid, |  | ||||||
|     DxColumn, |  | ||||||
|     DxGrouping, |  | ||||||
|     DxGroupPanel, |  | ||||||
|     DxPager, |  | ||||||
|     DxPaging, |  | ||||||
|     DxSearchPanel, |  | ||||||
|     DxFilterRow, |  | ||||||
|     DxSelection, |  | ||||||
| } from 'devextreme-vue/data-grid'; |  | ||||||
| import DataSource from 'devextreme/data/data_source'; |  | ||||||
| import 'devextreme/data/odata/store'; |  | ||||||
| import ButtonDropdown from '@/components/Buttons/ButtonDropdown.vue'; |  | ||||||
| import ButtonPrimary from '@/components/Buttons/ButtonPrimary.vue'; |  | ||||||
| import InputText from '@/components/InputText.vue'; |  | ||||||
| import { MagnifyingGlassIcon, ChevronDownIcon } from '@heroicons/vue/24/solid'; |  | ||||||
| import { XMarkIcon } from '@heroicons/vue/24/outline' |  | ||||||
|  |  | ||||||
| const tabs = [ |  | ||||||
|     { name: 'Gangguan' }, |  | ||||||
|     { name: 'Keluhan' }, |  | ||||||
|     { name: 'Gangguan Diperhatikan' }, |  | ||||||
| ] |  | ||||||
| const tabChecked = ref(0) |  | ||||||
|  |  | ||||||
| function changeTab(index: number) { |  | ||||||
|     tabChecked.value = index |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const handleSubmitSearch = (e: any) => { |  | ||||||
|     e.preventDefault() |  | ||||||
| } |  | ||||||
|  |  | ||||||
| let collapsed = false; |  | ||||||
| const dataSource = new DataSource({ |  | ||||||
|     store: { |  | ||||||
|         type: 'odata', |  | ||||||
|         url: 'https://js.devexpress.com/Demos/SalesViewer/odata/DaySaleDtoes', |  | ||||||
|         key: 'Id', |  | ||||||
|         beforeSend(request) { |  | ||||||
|             const year = new Date().getFullYear() - 1; |  | ||||||
|             request.params.startDate = `${year}-05-10`; |  | ||||||
|             request.params.endDate = `${year}-5-15`; |  | ||||||
|         }, |  | ||||||
|     }, |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| const pageSizes = [10, 25, 50, 100]; |  | ||||||
| const onContentReady = (e: any) => { |  | ||||||
|     if (!collapsed) { |  | ||||||
|         e.component.expandRow(['EnviroCare']); |  | ||||||
|         collapsed = true; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| const searchOptions = ref([ |  | ||||||
|     { name: 'Nama Lapor', current: true }, |  | ||||||
|     { name: 'Nama', current: false }, |  | ||||||
|     { name: 'Alamat', current: false }, |  | ||||||
| ]) |  | ||||||
| function handleChangeSearchOption(index: number) { |  | ||||||
|     searchOptions.value.forEach((option, i) => { |  | ||||||
|         if (i === index) { |  | ||||||
|             option.current = true |  | ||||||
|         } else { |  | ||||||
|             option.current = false |  | ||||||
|         } |  | ||||||
|     }) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const orderByOptions = ref([ |  | ||||||
|     { value: 'status', label: 'Status', checked: false }, |  | ||||||
|     { value: 'tanggal', label: 'Tanggal Lapor', checked: false }, |  | ||||||
| ]) |  | ||||||
| function handleChangeOrderBy(index: number, data: boolean) { |  | ||||||
|     orderByOptions.value.forEach((option, i) => { |  | ||||||
|         if (i === index) { |  | ||||||
|             option.checked = data |  | ||||||
|         } |  | ||||||
|     }) |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| type ModelType = string | [Date, Date] | { start: string | Date; end: string | Date; } | { startDate: string | Date; endDate: string | Date; }; |  | ||||||
| const emptyDate: ModelType = ''; |  | ||||||
| const dateValue = ref(emptyDate) |  | ||||||
|  |  | ||||||
| const formatter = ref({ |  | ||||||
|     date: 'DD MMMM YYYY', |  | ||||||
|     month: 'MMMM' |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| const datePickerOptions = ref({ |  | ||||||
|     shortcuts: { |  | ||||||
|         today: 'Hari ini', |  | ||||||
|         yesterday: 'Kemarin', |  | ||||||
|         past: (period: any) => period + ' hari terakhir', |  | ||||||
|         currentMonth: 'Bulan ini', |  | ||||||
|         pastMonth: 'Bulan lalu' |  | ||||||
|     }, |  | ||||||
|     footer: { |  | ||||||
|         apply: 'Terapkan', |  | ||||||
|         cancel: 'Batal' |  | ||||||
|     }, |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| </script> |  | ||||||
| @@ -1,111 +0,0 @@ | |||||||
| <template> |  | ||||||
|     <EmptyPage /> |  | ||||||
|     <!-- <div> |  | ||||||
|         <DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" key-expr="no_laporan" :show-column-lines="true" |  | ||||||
|             :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true" |  | ||||||
|             @selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting" |  | ||||||
|             :allow-column-resizing="true" column-resizing-mode="widget"> |  | ||||||
|             <DxSelection mode="single" /> |  | ||||||
|             <DxPaging :enabled="false" /> |  | ||||||
|             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> |  | ||||||
|             <DxLoadPanel :enabled="true" /> |  | ||||||
|             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> |  | ||||||
|             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> |  | ||||||
|  |  | ||||||
|             <DxColumn :width="40" alignment="center" data-field="number" data-type="number" caption="No" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_laporan" caption="Tgl Lapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_respon" caption="Tgl Response" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_recovery" caption="Tgl Recovery" /> |  | ||||||
|             <DxColumn alignment="center" data-field="jumlah_lapor" caption="Jml Lapor" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="durasi_respon" caption="Durasi Response Time" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="durasi_recovery" caption="Durasi Recovery Time" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="status" caption="Status" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="id_pelanggan" caption="IDPEL/NO METER" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="nama_pelapor" caption="Nama Pelapor" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="alamat_pelapor" caption="Alamat Pelapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="no_telp_pelapor" caption="No Telp Pelapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="keterangan_pelapor" caption="Keterangan Pelapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="sumber_laporan" caption="Sumber Lapor" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" /> |  | ||||||
|  |  | ||||||
|         </DxDataGrid> |  | ||||||
|     </div> --> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script setup lang="ts"> |  | ||||||
| import { DxDataGrid } from 'devextreme-vue' |  | ||||||
| import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' |  | ||||||
| import { onMounted, ref } from 'vue' |  | ||||||
| import { jsPDF } from 'jspdf' |  | ||||||
| import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter' |  | ||||||
| import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' |  | ||||||
| import type { Data2 } from '@/types/gangguan' |  | ||||||
| import { saveAs } from 'file-saver' |  | ||||||
| import { Workbook } from 'exceljs' |  | ||||||
| import EmptyPage from '@/components/Pages/EmptyPage.vue' |  | ||||||
|  |  | ||||||
| const data = ref<Data2[]>([]) |  | ||||||
|  |  | ||||||
| const onExporting = (e: any) => { |  | ||||||
|     if (e.format === 'pdf') { |  | ||||||
|         const doc = new jsPDF() |  | ||||||
|  |  | ||||||
|         exportToPdf({ |  | ||||||
|             jsPDFDocument: doc, |  | ||||||
|             component: e.component, |  | ||||||
|             indent: 5, |  | ||||||
|         }).then(() => { |  | ||||||
|             doc.save(`.pdf`) |  | ||||||
|         }) |  | ||||||
|     } else { |  | ||||||
|         const workbook = new Workbook() |  | ||||||
|         const worksheet = workbook.addWorksheet('Employees') |  | ||||||
|  |  | ||||||
|         exportToExcel({ |  | ||||||
|             component: e.component, |  | ||||||
|             worksheet, |  | ||||||
|             autoFilterEnabled: true, |  | ||||||
|         }).then(() => { |  | ||||||
|             workbook.xlsx.writeBuffer().then((buffer: any) => { |  | ||||||
|                 saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx') |  | ||||||
|             }) |  | ||||||
|         }) |  | ||||||
|  |  | ||||||
|         e.cancel = true |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const createDummy = () => { |  | ||||||
|     for (let i = 0; i < 10; i++) { |  | ||||||
|         data.value.push({ |  | ||||||
|             number: i + 1, |  | ||||||
|             no_laporan: 'G5223091' + (900002 + i), |  | ||||||
|             tanggal_laporan: '19/09/2023 12:26:42', |  | ||||||
|             tanggal_respon: '19/09/2023 13:14:15', |  | ||||||
|             tanggal_recovery: '19/09/2023 13:14:15', |  | ||||||
|             durasi_respon: '0-0:47:32', |  | ||||||
|             durasi_recovery: '0-0:49:35', |  | ||||||
|             jumlah_lapor: 1, |  | ||||||
|             status: 'Selesai', |  | ||||||
|             id_pelanggan: '523013252126 / 1731807', |  | ||||||
|             nama_pelapor: 'IBU FELISIA', |  | ||||||
|             alamat_pelapor: 'JL KWS INDUSTRI CIPT GINA KAV 5 BLOK B1', |  | ||||||
|             no_telp_pelapor: '082229870235', |  | ||||||
|             keterangan_pelapor: '-', |  | ||||||
|             sumber_laporan: 'Contact Center', |  | ||||||
|             posko: 'POSKO ULP SEMARANG' |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const onSelectionChanged = ({ selectedRowsData }: any) => { |  | ||||||
|     const data = selectedRowsData[0] |  | ||||||
|     console.log(data) |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| onMounted(() => { |  | ||||||
|     createDummy() |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| </script> |  | ||||||
| @@ -1,109 +0,0 @@ | |||||||
| <template> |  | ||||||
|     <!-- <div> |  | ||||||
|         <DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" key-expr="no_laporan" :show-column-lines="true" |  | ||||||
|             :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true" |  | ||||||
|             @selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting" |  | ||||||
|             :allow-column-resizing="true" column-resizing-mode="widget"> |  | ||||||
|             <DxSelection mode="single" /> |  | ||||||
|             <DxPaging :enabled="false" /> |  | ||||||
|             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> |  | ||||||
|             <DxLoadPanel :enabled="true" /> |  | ||||||
|             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> |  | ||||||
|             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> |  | ||||||
|  |  | ||||||
|             <DxColumn :width="40" alignment="center" data-field="number" data-type="number" caption="No" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="no_laporan" caption="No Laporan" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_laporan" caption="Tgl Lapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_respon" caption="Tgl Response" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="tanggal_recovery" caption="Tgl Recovery" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="durasi_respon" caption="Durasi Response Time" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="durasi_recovery" caption="Durasi Recovery Time" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="status" caption="Status" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="referensi_marking" caption="Referensi Marking" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="id_pelanggan" caption="IDPEL/NO METER" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="nama_pelapor" caption="Nama Pelapor" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="alamat_pelapor" caption="Alamat Pelapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="no_telp_pelapor" caption="No Telp Pelapor" /> |  | ||||||
|             <DxColumn :width="150" alignment="center" data-field="keterangan_pelapor" caption="Keterangan Pelapor" /> |  | ||||||
|             <DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" /> |  | ||||||
|  |  | ||||||
|         </DxDataGrid> |  | ||||||
|     </div> --> |  | ||||||
|     <EmptyPage /> |  | ||||||
| </template> |  | ||||||
|  |  | ||||||
| <script setup lang="ts"> |  | ||||||
| import { DxDataGrid } from 'devextreme-vue' |  | ||||||
| import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' |  | ||||||
| import { onMounted, ref } from 'vue' |  | ||||||
| import { jsPDF } from 'jspdf' |  | ||||||
| import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter' |  | ||||||
| import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' |  | ||||||
| import type { Data3 } from '@/types/gangguan' |  | ||||||
| import { saveAs } from 'file-saver' |  | ||||||
| import { Workbook } from 'exceljs' |  | ||||||
| import EmptyPage from '@/components/Pages/EmptyPage.vue' |  | ||||||
|  |  | ||||||
| const data = ref<Data3[]>([]) |  | ||||||
|  |  | ||||||
| const onExporting = (e: any) => { |  | ||||||
|     if (e.format === 'pdf') { |  | ||||||
|         const doc = new jsPDF() |  | ||||||
|  |  | ||||||
|         exportToPdf({ |  | ||||||
|             jsPDFDocument: doc, |  | ||||||
|             component: e.component, |  | ||||||
|             indent: 5, |  | ||||||
|         }).then(() => { |  | ||||||
|             doc.save(`.pdf`) |  | ||||||
|         }) |  | ||||||
|     } else { |  | ||||||
|         const workbook = new Workbook() |  | ||||||
|         const worksheet = workbook.addWorksheet('Employees') |  | ||||||
|  |  | ||||||
|         exportToExcel({ |  | ||||||
|             component: e.component, |  | ||||||
|             worksheet, |  | ||||||
|             autoFilterEnabled: true, |  | ||||||
|         }).then(() => { |  | ||||||
|             workbook.xlsx.writeBuffer().then((buffer: any) => { |  | ||||||
|                 saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx') |  | ||||||
|             }) |  | ||||||
|         }) |  | ||||||
|  |  | ||||||
|         e.cancel = true |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const createDummy = () => { |  | ||||||
|     for (let i = 0; i < 10; i++) { |  | ||||||
|         data.value.push({ |  | ||||||
|             number: i + 1, |  | ||||||
|             no_laporan: 'G5223091' + (900002 + i), |  | ||||||
|             tanggal_laporan: '19/09/2023 12:26:42', |  | ||||||
|             tanggal_respon: '19/09/2023 13:14:15', |  | ||||||
|             tanggal_recovery: '19/09/2023 13:14:15', |  | ||||||
|             durasi_respon: '0-0:47:32', |  | ||||||
|             durasi_recovery: '0-0:49:35', |  | ||||||
|             referensi_marking: '-', |  | ||||||
|             status: 'Selesai', |  | ||||||
|             id_pelanggan: '-', |  | ||||||
|             nama_pelapor: 'Moegy', |  | ||||||
|             alamat_pelapor: '-', |  | ||||||
|             no_telp_pelapor: '085136661313', |  | ||||||
|             keterangan_pelapor: '-', |  | ||||||
|             posko: 'POSKO ULP UNGGARAN' |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const onSelectionChanged = ({ selectedRowsData }: any) => { |  | ||||||
|     const data = selectedRowsData[0] |  | ||||||
|     console.log(data) |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| onMounted(() => { |  | ||||||
|     createDummy() |  | ||||||
| }) |  | ||||||
|  |  | ||||||
| </script> |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| export { default as GangguanDaftar1 } from './Daftar_1.vue' |  | ||||||
| export { default as GangguanDaftar2 } from './Daftar_2.vue' |  | ||||||
| export { default as GangguanDaftar3 } from './Daftar_3.vue' |  | ||||||
							
								
								
									
										38
									
								
								src/components/Pages/Gangguan/Table_2.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/components/Pages/Gangguan/Table_2.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn alignment="center" data-field="" caption="Jml Lapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="IDPEL/NO METER" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Sumber Lapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Posko" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										37
									
								
								src/components/Pages/Gangguan/Table_3.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/components/Pages/Gangguan/Table_3.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Referensi Marking" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="IDPEL/NO METER" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Posko" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										38
									
								
								src/components/Pages/Gangguan/Table_4.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/components/Pages/Gangguan/Table_4.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Referensi Marking" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="IDPEL/NO METER" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Sumber Lapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Posko" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										37
									
								
								src/components/Pages/Gangguan/Table_5.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/components/Pages/Gangguan/Table_5.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="IDPEL/NO METER" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Sumber Lapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Posko" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										36
									
								
								src/components/Pages/Gangguan/Table_6.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/components/Pages/Gangguan/Table_6.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Media" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Keterangan Media" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										37
									
								
								src/components/Pages/Gangguan/Table_7.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/components/Pages/Gangguan/Table_7.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | <template> | ||||||
|  |     <div> | ||||||
|  |         <DxDataGrid class="max-h-[calc(100vh-140px)]" :show-column-lines="true" :show-row-lines="false" :show-borders="true" | ||||||
|  |             :row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="" :column-width="100" | ||||||
|  |             @exporting="" :allow-column-resizing="true" column-resizing-mode="widget"> | ||||||
|  |             <DxSelection mode="single" /> | ||||||
|  |             <DxPaging :enabled="false" /> | ||||||
|  |             <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||||
|  |             <DxLoadPanel :enabled="true" /> | ||||||
|  |             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||||
|  |             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||||
|  |  | ||||||
|  |             <DxColumn :width="40" alignment="center" data-field="" data-type="number" caption="No" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Laporan" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Lapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Response" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Tgl Recovery" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Response Time" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Durasi Recovery Time" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Status" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="IDPEL/NO METER" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Nama Pelapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Alamat Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="No Telp Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Keterangan Pelapor" /> | ||||||
|  |             <DxColumn :width="150" alignment="center" data-field="" caption="Sumber Lapor" /> | ||||||
|  |             <DxColumn :width="170" alignment="center" data-field="" caption="Posko" /> | ||||||
|  |  | ||||||
|  |         </DxDataGrid> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup lang="ts"> | ||||||
|  | import { DxDataGrid } from 'devextreme-vue' | ||||||
|  | import { DxColumn, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||||
|  |  | ||||||
|  | </script> | ||||||
							
								
								
									
										7
									
								
								src/components/Pages/Gangguan/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/components/Pages/Gangguan/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | export { default as GangguanTable1 } from './Table_1.vue' | ||||||
|  | export { default as GangguanTable2 } from './Table_2.vue' | ||||||
|  | export { default as GangguanTable3 } from './Table_3.vue' | ||||||
|  | export { default as GangguanTable4 } from './Table_4.vue' | ||||||
|  | export { default as GangguanTable5 } from './Table_5.vue' | ||||||
|  | export { default as GangguanTable6 } from './Table_6.vue' | ||||||
|  | export { default as GangguanTable7 } from './Table_7.vue' | ||||||
| @@ -9,15 +9,17 @@ import WelcomePage from '@/components/Pages/Welcome.vue' | |||||||
| import EmptyPage from '@/components/Pages/EmptyPage.vue' | import EmptyPage from '@/components/Pages/EmptyPage.vue' | ||||||
| import qs from 'qs' | import qs from 'qs' | ||||||
| import { | import { | ||||||
|   GangguanDaftar1, |   GangguanTable1, | ||||||
|   GangguanDaftar2, |   GangguanTable2, | ||||||
|   GangguanDaftar3 |   GangguanTable3, | ||||||
| } from '@/components/Pages/Gangguan/Daftar' |   GangguanTable4, | ||||||
|  |   GangguanTable5, | ||||||
|  |   GangguanTable6, | ||||||
|  |   GangguanTable7, | ||||||
|  | } from '@/components/Pages/Gangguan' | ||||||
| import { | import { | ||||||
|   GangguanRekap1, |   GangguanRekap1, | ||||||
| } from '@/components/Pages/Gangguan/Rekapitulasi' | } from '@/components/Pages/Gangguan/Rekapitulasi' | ||||||
| import Type1 from '@/components/Form/FiltersType/Type1.vue' |  | ||||||
| import Button from '@/components/Button.vue' |  | ||||||
|  |  | ||||||
| export const routes: RouteRecordRaw[] = [ | export const routes: RouteRecordRaw[] = [ | ||||||
|   { |   { | ||||||
| @@ -41,38 +43,38 @@ export const routes: RouteRecordRaw[] = [ | |||||||
|               { |               { | ||||||
|                 path: '1', |                 path: '1', | ||||||
|                 name: 'Daftar Keluhan Dialihkan Ke Posko Lain | type-1', |                 name: 'Daftar Keluhan Dialihkan Ke Posko Lain | type-1', | ||||||
|                 component: GangguanDaftar1, |                 component: GangguanTable1, | ||||||
|                 props: true |                 props: true | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '2', |                 path: '2', | ||||||
|                 name: 'Daftar Gangguan Melapor Lebih Dari 1 Kali', |                 name: 'Daftar Gangguan Melapor Lebih Dari 1 Kali', | ||||||
|                 component: GangguanDaftar2, |                 component: GangguanTable2, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '3', |                 path: '3', | ||||||
|                 name: 'Daftar Gangguan Response Time', |                 name: 'Daftar Gangguan Response Time', | ||||||
|                 component: GangguanDaftar3, |                 component: GangguanTable3, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '4', |                 path: '4', | ||||||
|                 name: 'Daftar Gangguan Recovery Time', |                 name: 'Daftar Gangguan Recovery Time', | ||||||
|                 component: GangguanDaftar3, |                 component: GangguanTable4, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '5', |                 path: '5', | ||||||
|                 name: 'Daftar Gangguan Selesai Tanpa ID Pelanggan', |                 name: 'Daftar Gangguan Selesai Tanpa ID Pelanggan', | ||||||
|                 component: GangguanDaftar3, |                 component: GangguanTable5, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '6', |                 path: '6', | ||||||
|                 name: 'Daftar Gangguan Berdasarkan Media', |                 name: 'Daftar Gangguan Berdasarkan Media', | ||||||
|                 component: GangguanDaftar3, |                 component: GangguanTable6, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '7', |                 path: '7', | ||||||
|                 name: 'Daftar Gangguan Diselesaikan Mobile APKT', |                 name: 'Daftar Gangguan Diselesaikan Mobile APKT', | ||||||
|                 component: GangguanDaftar3, |                 component: GangguanTable7, | ||||||
|               }, |               }, | ||||||
|             ], |             ], | ||||||
|           }, |           }, | ||||||
| @@ -122,31 +124,26 @@ export const routes: RouteRecordRaw[] = [ | |||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '9', |                 path: '9', | ||||||
|                 name: 'Rekapitulasi Gangguan Per Status', |  | ||||||
|                 component: EmptyPage, |  | ||||||
|               }, |  | ||||||
|               { |  | ||||||
|                 path: '10', |  | ||||||
|                 name: 'Rekapitulasi Gangguan Diselesaikan Mobile APKT', |                 name: 'Rekapitulasi Gangguan Diselesaikan Mobile APKT', | ||||||
|                 component: EmptyPage, |                 component: EmptyPage, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '11', |                 path: '10', | ||||||
|                 name: 'Rekapitulasi Rating Per Posko', |                 name: 'Rekapitulasi Rating Per Posko', | ||||||
|                 component: EmptyPage, |                 component: EmptyPage, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '12', |                 path: '11', | ||||||
|                 name: 'Rekapitulasi Rating Per Regu', |                 name: 'Rekapitulasi Rating Per Regu', | ||||||
|                 component: EmptyPage, |                 component: EmptyPage, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '13', |                 path: '12', | ||||||
|                 name: 'Rekapitulasi Koreksi Transaksi Individual', |                 name: 'Rekapitulasi Koreksi Transaksi Individual', | ||||||
|                 component: EmptyPage, |                 component: EmptyPage, | ||||||
|               }, |               }, | ||||||
|               { |               { | ||||||
|                 path: '14', |                 path: '13', | ||||||
|                 name: 'Rekapitulasi Cleansing Transaksi TM', |                 name: 'Rekapitulasi Cleansing Transaksi TM', | ||||||
|                 component: EmptyPage, |                 component: EmptyPage, | ||||||
|               }, |               }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user