|
|
@ -1,8 +1,17 @@ |
|
|
|
<script lang="ts" setup> |
|
|
|
<script lang="ts" setup> |
|
|
|
import { Modal, message } from 'ant-design-vue' |
|
|
|
import { Modal, message } from 'ant-design-vue' |
|
|
|
import type { ProjectType } from 'nocodb-sdk' |
|
|
|
import type { ProjectType } from 'nocodb-sdk' |
|
|
|
import { computed, navigateTo, onMounted, ref, useApi, useNuxtApp, useSidebar } from '#imports' |
|
|
|
import { |
|
|
|
import { extractSdkResponseErrorMsg } from '~/utils' |
|
|
|
computed, |
|
|
|
|
|
|
|
extractSdkResponseErrorMsg, |
|
|
|
|
|
|
|
navigateTo, |
|
|
|
|
|
|
|
onMounted, |
|
|
|
|
|
|
|
ref, |
|
|
|
|
|
|
|
useApi, |
|
|
|
|
|
|
|
useNuxtApp, |
|
|
|
|
|
|
|
useSidebar, |
|
|
|
|
|
|
|
useUIPermission, |
|
|
|
|
|
|
|
} from '#imports' |
|
|
|
|
|
|
|
|
|
|
|
const { $e } = useNuxtApp() |
|
|
|
const { $e } = useNuxtApp() |
|
|
|
|
|
|
|
|
|
|
@ -54,8 +63,8 @@ onMounted(() => { |
|
|
|
|
|
|
|
|
|
|
|
<template> |
|
|
|
<template> |
|
|
|
<NuxtLayout> |
|
|
|
<NuxtLayout> |
|
|
|
<div class="flex gap-6 py-6 px-12"> |
|
|
|
<div class="flex flex-col md:flex-row flex-wrap gap-6 py-6 px-12"> |
|
|
|
<div> |
|
|
|
<div class="hidden xl:(block)"> |
|
|
|
<GeneralSponsors /> |
|
|
|
<GeneralSponsors /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
@ -69,16 +78,17 @@ onMounted(() => { |
|
|
|
v-t="['a:project:refresh']" |
|
|
|
v-t="['a:project:refresh']" |
|
|
|
class="text-sm text-gray-500 hover:text-primary mt-1 cursor-pointer" |
|
|
|
class="text-sm text-gray-500 hover:text-primary mt-1 cursor-pointer" |
|
|
|
@click="loadProjects" |
|
|
|
@click="loadProjects" |
|
|
|
></MdiRefresh> |
|
|
|
/> |
|
|
|
</h1> |
|
|
|
</h1> |
|
|
|
|
|
|
|
|
|
|
|
<div class="flex mb-6"> |
|
|
|
<div class="order-1 flex mb-6"> |
|
|
|
<a-input-search |
|
|
|
<a-input-search |
|
|
|
v-model:value="filterQuery" |
|
|
|
v-model:value="filterQuery" |
|
|
|
class="max-w-[200px] nc-project-page-search" |
|
|
|
class="max-w-[200px] nc-project-page-search" |
|
|
|
:placeholder="$t('activity.searchProject')" |
|
|
|
:placeholder="$t('activity.searchProject')" |
|
|
|
></a-input-search> |
|
|
|
/> |
|
|
|
<div class="flex-grow"></div> |
|
|
|
|
|
|
|
|
|
|
|
<div class="flex-grow" /> |
|
|
|
|
|
|
|
|
|
|
|
<a-dropdown v-if="isUIAllowed('projectCreate', true)" @click.stop> |
|
|
|
<a-dropdown v-if="isUIAllowed('projectCreate', true)" @click.stop> |
|
|
|
<a-button class="nc-new-project-menu !shadow"> |
|
|
|
<a-button class="nc-new-project-menu !shadow"> |
|
|
@ -96,14 +106,17 @@ onMounted(() => { |
|
|
|
@click="navigateTo('/project/create')" |
|
|
|
@click="navigateTo('/project/create')" |
|
|
|
> |
|
|
|
> |
|
|
|
<MdiPlus class="col-span-2 mr-1 mt-[1px] text-primary text-lg" /> |
|
|
|
<MdiPlus class="col-span-2 mr-1 mt-[1px] text-primary text-lg" /> |
|
|
|
|
|
|
|
|
|
|
|
<div class="col-span-10 text-sm xl:text-md">{{ $t('activity.createProject') }}</div> |
|
|
|
<div class="col-span-10 text-sm xl:text-md">{{ $t('activity.createProject') }}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div |
|
|
|
<div |
|
|
|
v-t="['c:project:create:extdb']" |
|
|
|
v-t="['c:project:create:extdb']" |
|
|
|
class="grid grid-cols-12 cursor-pointer hover:bg-gray-200 flex items-center p-2 nc-create-external-db-project" |
|
|
|
class="grid grid-cols-12 cursor-pointer hover:bg-gray-200 flex items-center p-2 nc-create-external-db-project" |
|
|
|
@click="navigateTo('/project/create-external')" |
|
|
|
@click="navigateTo('/project/create-external')" |
|
|
|
> |
|
|
|
> |
|
|
|
<MdiDatabaseOutline class="col-span-2 mr-1 mt-[1px] text-green-500 text-lg" /> |
|
|
|
<MdiDatabaseOutline class="col-span-2 mr-1 mt-[1px] text-green-500 text-lg" /> |
|
|
|
|
|
|
|
|
|
|
|
<div class="col-span-10 text-sm xl:text-md" v-html="$t('activity.createProjectExtended.extDB')" /> |
|
|
|
<div class="col-span-10 text-sm xl:text-md" v-html="$t('activity.createProjectExtended.extDB')" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</a-menu> |
|
|
|
</a-menu> |
|
|
@ -156,8 +169,12 @@ onMounted(() => { |
|
|
|
</a-card> |
|
|
|
</a-card> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<div> |
|
|
|
<div class="flex gap-6 md:block"> |
|
|
|
<GeneralSocialCard /> |
|
|
|
<GeneralSocialCard /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="block mt-0 md:(!mt-6) xl:hidden"> |
|
|
|
|
|
|
|
<GeneralSponsors /> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</NuxtLayout> |
|
|
|
</NuxtLayout> |
|
|
|