DomainList.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <script setup lang="tsx">
  2. import StdTable from '@/components/StdDataDisplay/StdTable.vue'
  3. import {customRender, datetime} from '@/components/StdDataDisplay/StdTableTransformer'
  4. import {useGettext} from 'vue3-gettext'
  5. const {$gettext, interpolate} = useGettext()
  6. import domain from '@/api/domain'
  7. import {Badge, message} from 'ant-design-vue'
  8. import {h, ref} from 'vue'
  9. const columns = [{
  10. title: () => $gettext('Name'),
  11. dataIndex: 'name',
  12. sorter: true,
  13. pithy: true
  14. }, {
  15. title: () => $gettext('Status'),
  16. dataIndex: 'enabled',
  17. customRender: (args: customRender) => {
  18. const template: any = []
  19. const {text, column} = args
  20. if (text === true || text > 0) {
  21. template.push(<Badge status="success"/>)
  22. template.push($gettext('Enabled'))
  23. } else {
  24. template.push(<Badge status="error"/>)
  25. template.push($gettext('Disabled'))
  26. }
  27. return h('div', template)
  28. },
  29. sorter: true,
  30. pithy: true
  31. }, {
  32. title: () => $gettext('Updated at'),
  33. dataIndex: 'modify',
  34. customRender: datetime,
  35. sorter: true,
  36. pithy: true
  37. }, {
  38. title: () => $gettext('Action'),
  39. dataIndex: 'action',
  40. }]
  41. const table = ref(null)
  42. interface Table {
  43. get_list(): void
  44. }
  45. function enable(name: any) {
  46. domain.enable(name).then(() => {
  47. message.success($gettext('Enabled successfully'))
  48. const t: Table | null = table.value
  49. t!.get_list()
  50. }).catch(r => {
  51. message.error(interpolate($gettext('Failed to enable %{msg}'), {msg: r.message ?? ''}), 10)
  52. })
  53. }
  54. function disable(name: any) {
  55. domain.disable(name).then(() => {
  56. message.success($gettext('Disabled successfully'))
  57. const t: Table | null = table.value
  58. t!.get_list()
  59. }).catch(r => {
  60. message.error(interpolate($gettext('Failed to disable %{msg}'), {msg: r.message ?? ''}))
  61. })
  62. }
  63. function destroy(site_name: any) {
  64. domain.destroy(site_name).then(() => {
  65. const t: Table | null = table.value
  66. t!.get_list()
  67. message.success(interpolate($gettext('Delete site: %{site_name}'), {site_name: site_name}))
  68. }).catch((e: any) => {
  69. message.error(e?.message ?? $gettext('Server error'))
  70. })
  71. }
  72. </script>
  73. <template>
  74. <a-card :title="$gettext('Manage Sites')">
  75. <std-table
  76. :api="domain"
  77. :columns="columns"
  78. :disable_search="true"
  79. row-key="name"
  80. ref="table"
  81. @clickEdit="r => $router.push({
  82. path: '/domain/' + r
  83. })"
  84. :deletable="false"
  85. >
  86. <template #actions="{record}">
  87. <template v-if="!record.enabled">
  88. <a-divider type="vertical"/>
  89. <a-popconfirm
  90. :cancelText="$gettext('No')"
  91. :okText="$gettext('OK')"
  92. :title="$gettext('Are you sure you want to delete ?')"
  93. @confirm="destroy(record['name'])">
  94. <a v-translate>Delete</a>
  95. </a-popconfirm>
  96. </template>
  97. <a-divider type="vertical"/>
  98. <a v-if="record.enabled" @click="disable(record.name)">
  99. {{ $gettext('Disabled') }}
  100. </a>
  101. <a v-else @click="enable(record.name)">
  102. {{ $gettext('Enabled') }}
  103. </a>
  104. </template>
  105. </std-table>
  106. </a-card>
  107. </template>
  108. <style scoped>
  109. </style>