AdminUtilities.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template lang='pug'>
  2. q-page.admin-utilities
  3. .row.q-pa-md.items-center
  4. .col-auto
  5. img.admin-icon.animated.fadeInLeft(src='/_assets/icons/fluent-swiss-army-knife.svg')
  6. .col.q-pl-md
  7. .text-h5.text-primary.animated.fadeInLeft {{ t('admin.utilities.title') }}
  8. .text-subtitle1.text-grey.animated.fadeInLeft.wait-p2s {{ t('admin.utilities.subtitle') }}
  9. .col-auto
  10. q-btn.q-mr-sm.acrylic-btn(
  11. icon='las la-question-circle'
  12. flat
  13. color='grey'
  14. :href='siteStore.docsBase + `/admin/utilities`'
  15. target='_blank'
  16. type='a'
  17. )
  18. q-separator(inset)
  19. .q-pa-md.q-gutter-md
  20. q-card.shadow-1
  21. q-list(separator)
  22. q-item
  23. blueprint-icon(icon='disconnected', :hue-rotate='45')
  24. q-item-section
  25. q-item-label {{t(`admin.utilities.disconnectWS`)}}
  26. q-item-label(caption) {{t(`admin.utilities.disconnectWSHint`)}}
  27. q-item-section(side)
  28. q-btn.acrylic-btn(
  29. flat
  30. icon='las la-arrow-circle-right'
  31. color='primary'
  32. @click='disconnectWS'
  33. :label='t(`common.actions.proceed`)'
  34. )
  35. q-item
  36. blueprint-icon(icon='database-export', :hue-rotate='45')
  37. q-item-section
  38. q-item-label {{t(`admin.utilities.export`)}}
  39. q-item-label(caption) {{t(`admin.utilities.exportHint`)}}
  40. q-item-section(side)
  41. q-btn.acrylic-btn(
  42. flat
  43. icon='las la-arrow-circle-right'
  44. color='primary'
  45. @click=''
  46. :label='t(`common.actions.proceed`)'
  47. )
  48. q-item
  49. blueprint-icon(icon='datalake', :hue-rotate='45')
  50. q-item-section
  51. q-item-label {{t(`admin.utilities.flushCache`)}}
  52. q-item-label(caption) {{t(`admin.utilities.flushCacheHint`)}}
  53. q-item-section(side)
  54. q-btn.acrylic-btn(
  55. flat
  56. icon='las la-arrow-circle-right'
  57. color='primary'
  58. @click=''
  59. :label='t(`common.actions.proceed`)'
  60. )
  61. q-item
  62. blueprint-icon(icon='database-restore', :hue-rotate='45')
  63. q-item-section
  64. q-item-label {{t(`admin.utilities.import`)}}
  65. q-item-label(caption) {{t(`admin.utilities.importHint`)}}
  66. q-item-section(side)
  67. q-btn.acrylic-btn(
  68. flat
  69. icon='las la-arrow-circle-right'
  70. color='primary'
  71. @click=''
  72. :label='t(`common.actions.proceed`)'
  73. )
  74. q-item
  75. blueprint-icon(icon='matches', :hue-rotate='45')
  76. q-item-section
  77. q-item-label {{t(`admin.utilities.invalidAuthCertificates`)}}
  78. q-item-label(caption) {{t(`admin.utilities.invalidAuthCertificatesHint`)}}
  79. q-item-section(side)
  80. q-btn.acrylic-btn(
  81. flat
  82. icon='las la-arrow-circle-right'
  83. color='primary'
  84. @click=''
  85. :label='t(`common.actions.proceed`)'
  86. )
  87. q-item
  88. blueprint-icon(icon='historical', :hue-rotate='45')
  89. q-item-section
  90. q-item-label {{t(`admin.utilities.purgeHistory`)}}
  91. q-item-label(caption) {{t(`admin.utilities.purgeHistoryHint`)}}
  92. q-item-section(side)
  93. q-select(
  94. outlined
  95. :label='t(`admin.utilities.purgeHistoryTimeframe`)'
  96. v-model='state.purgeHistoryTimeframe'
  97. style='min-width: 175px;'
  98. emit-value
  99. map-options
  100. dense
  101. :options='purgeHistoryTimeframes'
  102. )
  103. q-separator.q-ml-sm(vertical)
  104. q-item-section(side)
  105. q-btn.acrylic-btn(
  106. flat
  107. icon='las la-arrow-circle-right'
  108. color='primary'
  109. @click=''
  110. :label='t(`common.actions.proceed`)'
  111. )
  112. q-item
  113. blueprint-icon(icon='rescan-document', :hue-rotate='45')
  114. q-item-section
  115. q-item-label {{t(`admin.utilities.scanPageProblems`)}}
  116. q-item-label(caption) {{t(`admin.utilities.scanPageProblemsHint`)}}
  117. q-item-section(side)
  118. q-btn.acrylic-btn(
  119. flat
  120. icon='las la-arrow-circle-right'
  121. color='primary'
  122. @click=''
  123. :label='t(`common.actions.proceed`)'
  124. )
  125. </template>
  126. <script setup>
  127. import { computed, reactive } from 'vue'
  128. import { useMeta, useQuasar } from 'quasar'
  129. import { useI18n } from 'vue-i18n'
  130. import gql from 'graphql-tag'
  131. import { useSiteStore } from 'src/stores/site'
  132. // QUASAR
  133. const $q = useQuasar()
  134. // STORES
  135. const siteStore = useSiteStore()
  136. // I18N
  137. const { t } = useI18n()
  138. // META
  139. useMeta({
  140. title: t('admin.utilities.title')
  141. })
  142. // DATA
  143. const state = reactive({
  144. purgeHistoryTimeframe: '1y'
  145. })
  146. // COMPUTED
  147. const purgeHistoryTimeframes = computed(() => ([
  148. { value: '24h', label: t('admin.utitilies.purgeHistoryToday') },
  149. { value: '1m', label: t('admin.utitilies.purgeHistoryMonth', 1, { count: 1 }) },
  150. { value: '3m', label: t('admin.utitilies.purgeHistoryMonth', 3, { count: 3 }) },
  151. { value: '6m', label: t('admin.utitilies.purgeHistoryMonth', 6, { count: 6 }) },
  152. { value: '1y', label: t('admin.utitilies.purgeHistoryYear', 1, { count: 1 }) },
  153. { value: '2y', label: t('admin.utitilies.purgeHistoryYear', 2, { count: 2 }) }
  154. ]))
  155. // METHODS
  156. async function disconnectWS () {
  157. $q.loading.show()
  158. try {
  159. const resp = await APOLLO_CLIENT.mutate({
  160. mutation: gql`
  161. mutation disconnectWS {
  162. disconnectWS {
  163. operation {
  164. succeeded
  165. message
  166. }
  167. }
  168. }
  169. `,
  170. fetchPolicy: 'network-only'
  171. })
  172. if (resp?.data?.disconnectWS?.operation?.succeeded) {
  173. $q.notify({
  174. type: 'positive',
  175. message: t('admin.utilities.disconnectWSSuccess')
  176. })
  177. } else {
  178. throw new Error(resp?.data?.disconnectWS?.operation?.succeeded)
  179. }
  180. } catch (err) {
  181. $q.notify({
  182. type: 'negative',
  183. message: 'Failed to disconnect WS connections.',
  184. caption: err.message
  185. })
  186. }
  187. $q.loading.hide()
  188. }
  189. </script>
  190. <style lang='scss'>
  191. </style>