123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <script setup lang="tsx">
- import type { EnvGroup } from '@/api/env_group'
- import type { Site } from '@/api/site'
- import type { Column } from '@/components/StdDesign/types'
- import env_group from '@/api/env_group'
- import site from '@/api/site'
- import EnvGroupTabs from '@/components/EnvGroupTabs/EnvGroupTabs.vue'
- import StdBatchEdit from '@/components/StdDesign/StdDataDisplay/StdBatchEdit.vue'
- import StdTable from '@/components/StdDesign/StdDataDisplay/StdTable.vue'
- import { useIndexStatus } from '@/composables/useIndexStatus'
- import { ConfigStatus } from '@/constants'
- import InspectConfig from '@/views/config/InspectConfig.vue'
- import columns from '@/views/site/site_list/columns'
- import SiteDuplicate from '@/views/site/site_list/SiteDuplicate.vue'
- import { CheckCircleOutlined, LoadingOutlined } from '@ant-design/icons-vue'
- import { message } from 'ant-design-vue'
- const route = useRoute()
- const router = useRouter()
- const table = ref()
- const inspectConfig = ref()
- const envGroupId = ref(Number.parseInt(route.query.env_group_id as string) || 0)
- const envGroups = ref([]) as Ref<EnvGroup[]>
- const { isScanning } = useIndexStatus()
- watch(route, () => {
- inspectConfig.value?.test()
- })
- onMounted(async () => {
- while (true) {
- try {
- const { data, pagination } = await env_group.get_list()
- if (!data || !pagination)
- return
- envGroups.value.push(...data)
- if (data.length < pagination?.per_page) {
- return
- }
- }
- catch {
- return
- }
- }
- })
- function destroy(site_name: string) {
- site.destroy(site_name).then(() => {
- table.value.get_list()
- message.success($gettext('Delete site: %{site_name}', { site_name }))
- inspectConfig.value?.test()
- })
- }
- const show_duplicator = ref(false)
- const target = ref('')
- function handle_click_duplicate(name: string) {
- show_duplicator.value = true
- target.value = name
- }
- const stdBatchEditRef = useTemplateRef('stdBatchEditRef')
- async function handleClickBatchEdit(batchColumns: Column[], selectedRowKeys: string[], selectedRows: Site[]) {
- stdBatchEditRef.value?.showModal(batchColumns, selectedRowKeys, selectedRows)
- }
- function handleBatchUpdated() {
- table.value?.get_list()
- table.value?.resetSelection()
- }
- </script>
- <template>
- <ACard :title="$gettext('Manage Sites')">
- <template #extra>
- <div class="flex items-center cursor-default">
- <template v-if="isScanning">
- <LoadingOutlined class="mr-2" spin />{{ $gettext('Indexing...') }}
- </template>
- <template v-else>
- <CheckCircleOutlined class="mr-2" />{{ $gettext('Indexed') }}
- </template>
- </div>
- </template>
- <InspectConfig ref="inspectConfig" />
- <EnvGroupTabs v-model:active-key="envGroupId" :env-groups="envGroups" />
- <StdTable
- ref="table"
- :api="site"
- :columns="columns"
- row-key="name"
- disable-delete
- disable-view
- :get-params="{
- env_group_id: envGroupId,
- }"
- :scroll-x="1600"
- @click-edit="(r: string) => router.push({
- path: `/sites/${encodeURIComponent(r)}`,
- })"
- @click-batch-modify="handleClickBatchEdit"
- >
- <template #actions="{ record }">
- <AButton
- type="link"
- size="small"
- @click="handle_click_duplicate(record.name)"
- >
- {{ $gettext('Duplicate') }}
- </AButton>
- <APopconfirm
- :cancel-text="$gettext('No')"
- :ok-text="$gettext('OK')"
- :title="$gettext('Are you sure you want to delete?')"
- :disabled="record.status !== ConfigStatus.Disabled"
- @confirm="destroy(record.name)"
- >
- <AButton
- type="link"
- size="small"
- :disabled="record.status !== ConfigStatus.Disabled"
- >
- {{ $gettext('Delete') }}
- </AButton>
- </APopconfirm>
- </template>
- </StdTable>
- <StdBatchEdit
- ref="stdBatchEditRef"
- :api="site"
- :columns
- @save="handleBatchUpdated"
- />
- <SiteDuplicate
- v-model:visible="show_duplicator"
- :name="target"
- @duplicated="() => table.get_list()"
- />
- </ACard>
- </template>
- <style scoped>
- </style>
|