多维表格
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
5.8 KiB

<script lang="ts" setup>
const { activeIntegration, categories, activeCategory } = useIntegrationStore()
const { copy } = useCopy()
const copyIp = async () => {
await copy('52.15.226.51')
message.success('Copied to clipboard')
}
const panelsRef = ref<HTMLElement | null>(null)
onMounted(() => {
if (!panelsRef.value) return
const panels = panelsRef.value.querySelectorAll('.panel')
panels.forEach((panel) => {
categories.value.push({
label: panel.getAttribute('data-label') as string,
icon: panel.getAttribute('data-icon'),
})
})
// focus first input
nextTick(() => {
const firstInput = panels[0].querySelector('input')
if (firstInput) firstInput.focus()
})
})
const onInputFocus = () => {
const target = document.activeElement
const panel = target?.closest('.panel')
if (panel) {
activeCategory.value = {
label: panel.getAttribute('data-label') as string,
icon: panel.getAttribute('data-icon'),
}
}
}
</script>
<template>
<div ref="panelsRef" class="panels">
<WorkspaceIntegrationsPanel title="Integration Details" icon="info">
<template #header-info>
<div
class="text-gray-500 !text-xs font-weight-normal flex items-center gap-2 cursor-pointer flex items-center"
@click="copyIp"
>
<GeneralIcon icon="info" class="text-primary" />
Whitelist our ip: 52.15.226.51 to allow database access
<GeneralIcon icon="duplicate" class="text-gray-800 w-5 h-5 p-1 border-1 rounded-md border-gray-200" />
</div>
</template>
<div>
<div class="flex flex-col w-1/2 pr-3">
<label class="!text-xs font-weight-normal pb-1">Title</label>
<a-input v-model:value="activeIntegration.payload.title" class="input-text" :maxlength="255" @focus="onInputFocus" />
</div>
</div>
</WorkspaceIntegrationsPanel>
<WorkspaceIntegrationsPanel title="Connection Details" icon="link">
<div class="input-group">
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Host</label>
<a-input v-model:value="activeIntegration.payload.host" class="input-text" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Port</label>
<a-input v-model:value="activeIntegration.payload.port" class="input-text" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">User</label>
<a-input v-model:value="activeIntegration.payload.user" class="input-text" autocomplete="off" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Password</label>
<a-input
v-model:value="activeIntegration.payload.password"
class="input-text"
type="password"
autocomplete="off"
@focus="onInputFocus"
/>
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Schema</label>
<a-input v-model:value="activeIntegration.payload.schema" class="input-text" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Database</label>
<a-input v-model:value="activeIntegration.payload.database" class="input-text" @focus="onInputFocus" />
</div>
</div>
</WorkspaceIntegrationsPanel>
<WorkspaceIntegrationsPanel title="SSL & Advanced Parameters" icon="lock" :collapsible="true">
<div class="input-group">
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">SSL Mode</label>
<a-select v-model:value="activeIntegration.payload.sslMode" class="input-text" @focus="onInputFocus">
<a-select-option value="disable">Disable</a-select-option>
<a-select-option value="require">Require</a-select-option>
<a-select-option value="verify-ca">Verify CA</a-select-option>
<a-select-option value="verify-full">Verify Full</a-select-option>
</a-select>
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">SSL Root Certificate</label>
<a-input v-model:value="activeIntegration.payload.sslRootCert" class="input-text" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">SSL Certificate</label>
<a-input v-model:value="activeIntegration.payload.sslCert" class="input-text" @focus="onInputFocus" />
</div>
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">SSL Key</label>
<a-input v-model:value="activeIntegration.payload.sslKey" class="input-text" @focus="onInputFocus" />
</div>
</div>
<div class="w-full border-t-1 mt-2 mb-4"></div>
<div class="input-group">
<div class="input-item">
<label class="!text-xs font-weight-normal pb-1">Extra Connection Parameters</label>
<a-input v-model:value="activeIntegration.payload.sslCert" class="input-text" @focus="onInputFocus" />
</div>
</div>
</WorkspaceIntegrationsPanel>
<WorkspaceIntegrationsPanel title="Connection JSON" icon="code">DUMMY</WorkspaceIntegrationsPanel>
</div>
</template>
<style lang="scss" scoped>
.panels {
@apply w-3/4 flex flex-col;
.panel {
@apply border-1 border-gray-200 px-4 py-4 rounded-lg mb-4;
.panel-label {
@apply text-md font-weight-bold;
}
.input-text {
@apply w-full rounded-md;
}
.input-group {
@apply flex flex-wrap w-full;
.input-item {
@apply flex flex-col w-1/2 pr-3 mb-3;
}
}
}
}
</style>