Merge pull request #3230 from dataease/pr@dev_dataset_source

Pr@dev dataset source
This commit is contained in:
xuwei-fit2cloud 2022-09-28 13:34:00 +08:00 committed by GitHub
commit 75f0617402
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 192 additions and 259 deletions

View File

@ -1526,3 +1526,49 @@ div:focus {
background: rgba(51, 112, 255, 0.1) !important;
}
}
.de-status {
position: relative;
margin-left: 15px;
&::before {
content: '';
position: absolute;
top: 50%;
left: -13px;
transform: translateY(-50%);
width: 5px;
height: 5px;
border-radius: 50%;
}
}
.de-Pending-result,
.de-Underway-result {
&::before {
background: var(--deTextPlaceholder, #8f959e);
}
}
.de-Exec-result,
.de-Underway-pre {
&::before {
background: var(--primary, #3370ff);
}
}
.de-Stopped-result,
.de-Completed-pre {
&::before {
background: var(--deSuccess, #34C724);
}
}
.de-Error-pre {
&::before {
background: var(--deDanger, #F54A45);
}
.el-icon-s-order {
color: var(--primary, #3370ff);
cursor: pointer;
}
}

View File

@ -31,7 +31,12 @@
prefix-icon="el-icon-search"
clearable
/>
<div class="table-checkbox-list">
<div v-if="!tableData.length && searchTable !== ''" class="el-empty">
<div class="el-empty__description" style="margin-top: 80px;color: #5e6d82;">
没有找到相关内容
</div>
</div>
<div class="table-checkbox-list" v-else>
<el-checkbox-group v-model="checkTableList" size="small">
<el-tooltip
v-for="t in tableData"
@ -278,13 +283,13 @@ export default {
if (this.checkDatasetName.includes(ele.datasetName)) {
this.nameExsitValidator(index)
} else {
ele.nameExsit = false;
ele.nameExsit = false
}
})
},
calHeight() {
const that = this
setTimeout(function() {
setTimeout(function () {
const currentHeight = document.documentElement.clientHeight
that.height = currentHeight - 56 - 64 - 75 - 32 - 24 - 16 - 10
}, 10)
@ -381,6 +386,7 @@ export default {
.arrow-right {
position: absolute;
z-index: 2;
top: 15px;
cursor: pointer;
margin: 0;

View File

@ -32,7 +32,12 @@
prefix-icon="el-icon-search"
clearable
/>
<div class="table-checkbox-list">
<div v-if="!tableData.length && searchTable !== ''" class="el-empty">
<div class="el-empty__description" style="margin-top: 80px;color: #5e6d82;">
没有找到相关内容
</div>
</div>
<div v-else class="table-checkbox-list">
<el-checkbox-group v-model="checkTableList" size="small">
<el-tooltip
:disabled="t.enableCheck"
@ -396,6 +401,7 @@ export default {
.arrow-right {
position: absolute;
top: 15px;
z-index: 2;
cursor: pointer;
margin: 0;
display: flex;

View File

@ -575,6 +575,7 @@ export default {
.arrow-right {
position: absolute;
z-index: 2;
top: 15px;
cursor: pointer;
margin: 0;

View File

@ -622,7 +622,9 @@ export default {
this.fields = response.data.fields
this.data = response.data.data
const datas = this.data
this.$refs.plxTable.reloadData(datas)
this.$nextTick(() => {
this.$refs.plxTable?.reloadData(datas)
})
})
.catch((err) => {
this.errMsg = true
@ -747,7 +749,9 @@ export default {
.sql-dataset-drawer {
.el-drawer__body {
padding: 16px 24px;
position: relative;
position: unset;
overflow-y: auto;
padding-bottom: 80px;
}
.el-date-editor {

View File

@ -71,7 +71,7 @@
<template slot-scope="scope">
<span
v-if="scope.row.lastExecStatus"
:class="[`de-${scope.row.lastExecStatus}`, 'de-status']"
:class="[`de-${scope.row.lastExecStatus}-pre`, 'de-status']"
>{{
$t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
}}
@ -110,7 +110,7 @@
:label="$t('dataset.task.task_status')"
>
<template slot-scope="scope">
<span :class="[`de-${scope.row.status}`, 'de-status']"
<span :class="[`de-${scope.row.status}-result`, 'de-status']"
>{{ $t(`dataset.task.${scope.row.status.toLocaleLowerCase()}`) }}
</span>
</template>
@ -223,23 +223,16 @@
<el-table-column prop="status" :label="$t('dataset.status')">
<template slot-scope="scope">
<span
v-if="scope.row.status === 'Completed'"
style="color: green"
>{{ $t('dataset.completed') }}</span
>
<span v-if="scope.row.status === 'Underway'" class="blue-color">
<i class="el-icon-loading" />
{{ $t('dataset.underway') }}
</span>
<span v-if="scope.row.status === 'Error'" style="color: red">
<el-link
type="danger"
@click="showErrorMassage(scope.row.info)"
>{{ $t('dataset.error') }}</el-link
>
</span>
</template>
<span
v-if="scope.row.status"
:class="[`de-${scope.row.status}-pre`, 'de-status']"
>{{
$t(`dataset.${scope.row.status.toLocaleLowerCase()}`)
}}
<svg-icon style="cursor: pointer;" v-if="scope.row.status === 'Error'" @click="showErrorMassage(scope.row.info)" icon-class="icon-maybe" class="field-icon-location" />
</span>
<span v-else>-</span>
</template>
</el-table-column>
</el-table>
<el-row style="margin-top: 10px; text-align: right">
@ -1165,61 +1158,4 @@ export default {
}
}
}
</style>
<style lang="scss">
.de-status {
position: relative;
margin-left: 15px;
&::before {
content: '';
position: absolute;
top: 50%;
left: -13px;
transform: translateY(-50%);
width: 5px;
height: 5px;
border-radius: 50%;
}
}
.de-Completed {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Underway {
&::before {
background: #8f959e;
}
}
.de-Pending {
&::before {
background: #8f959e;
}
}
.de-Exec {
&::before {
background: var(--primary, #3370ff);
}
}
.de-Stopped {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Error {
&::before {
background: var(--deDanger, #3370ff);
}
.el-icon-s-order {
color: var(--primary, #3370ff);
cursor: pointer;
}
}
</style>

View File

@ -25,7 +25,7 @@
class="table-num"
v-if="['db', 'excel', 'api'].includes(datasetType)"
>{{ $t('deDataset.selected') }} {{ tableNum }}
{{ $t('deDataset.table') }}</span
{{ ['excel'].includes(datasetType) ? $t('deDataset.table') : '项' }}</span
>
<deBtn @click="datasetSave" type="primary">{{
$t('commons.save')

View File

@ -305,7 +305,7 @@
@keypress.enter.native="saveGroup(groupForm)"
>
<el-form-item :label="$t('deDataset.folder_name')" prop="name">
<el-input v-model="groupForm.name" />
<el-input placeholder="请输入文件夹名称" v-model="groupForm.name" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">

View File

@ -1,90 +1,111 @@
<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
<el-tabs v-model="activeName">
<!-- 认证-->
<el-tab-pane :label="$t('datasource.verified')" name="verified">
<el-form :model="authConfig" :rules="rule" ref="authConfig" label-position="right">
<el-form-item :label="$t('datasource.verification_method')" prop="verification">
<el-select v-model="authConfig.verification" @change="change"
:placeholder="$t('datasource.verification_method')" filterable size="small">
<el-option
v-for="item in options"
:key="item.name"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('datasource.username')" prop="username"
v-if="authConfig.verification!=undefined && authConfig.verification !='No Auth'">
<el-input :placeholder="$t('datasource.username')" v-model="authConfig.username"
class="ms-http-input" size="small">
<el-form
:model="authConfig"
:rules="rule"
ref="authConfig"
label-position="right"
>
<el-form-item
:label="$t('datasource.verification_method')"
prop="verification"
>
<el-select
v-model="authConfig.verification"
@change="change"
:placeholder="$t('datasource.verification_method')"
filterable
size="small"
>
<el-option
v-for="item in options"
:key="item.name"
:label="item.name"
:value="item.name"
>
</el-option>
</el-select>
</el-form-item>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item
:label="$t('datasource.username')"
prop="username"
v-if="
authConfig.verification != undefined &&
authConfig.verification != 'No Auth'
"
>
<el-input
:placeholder="$t('datasource.username')"
v-model="authConfig.username"
class="ms-http-input"
size="small"
>
</el-input>
</el-form-item>
<el-form-item :label="$t('datasource.password')" prop="password"
v-if=" authConfig.verification!=undefined && authConfig.verification !='No Auth'">
<el-input v-model="authConfig.password" :placeholder="$t('datasource.password')" show-password autocomplete="off"
maxlength="50" show-word-limit/>
</el-col>
<el-col :span="12">
<el-form-item
:label="$t('datasource.password')"
prop="password"
v-if="
authConfig.verification != undefined &&
authConfig.verification != 'No Auth'
"
>
<dePwd
v-model="authConfig.password"
:placeholder="$t('datasource.password')"
/>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</el-form>
</template>
<script>
import dePwd from '@/components/deCustomCm/dePwd.vue'
export default {
name: "ApiAuthConfig",
components: {},
name: 'ApiAuthConfig',
components: { dePwd },
props: {
request: {},
encryptShow: {
type: Boolean,
default: true,
default: true
}
},
watch: {
request() {
this.initData();
this.initData()
}
},
created() {
this.initData();
this.initData()
},
data() {
return {
options: [{name: "No Auth"}, {name: "Basic Auth"}],
activeName: "verified",
options: [{ name: 'No Auth' }, { name: 'Basic Auth' }],
activeName: 'verified',
rule: {},
authConfig: {}
}
},
methods: {
change() {
if (this.authConfig.verification === "Basic Auth") {
this.authConfig.verification = "Basic Auth";
this.request.authManager = this.authConfig;
if (this.authConfig.verification === 'Basic Auth') {
this.authConfig.verification = 'Basic Auth'
this.request.authManager = this.authConfig
} else {
this.authConfig.verification = "No Auth";
this.request.authManager = this.authConfig;
this.authConfig.verification = 'No Auth'
this.request.authManager = this.authConfig
}
},
initData() {
if (this.request.authManager) {
this.authConfig = this.request.authManager;
this.authConfig = this.request.authManager
}
}
}
}
</script>
<style scoped>
/deep/ .el-tabs__nav-wrap::after {
height: 0px;
}
</style>

View File

@ -32,7 +32,7 @@
@click="addApiItem(api)"
>
<el-row>
<el-col :span="12">
<el-col style="display: flex" :span="19">
<span class="name">{{ api.name }}</span>
<span
v-if="api.status === 'Error'"
@ -45,7 +45,7 @@
style="color: green; background: rgba(52, 199, 36, 0.2)"
>{{ $t('datasource.valid') }}</span>
</el-col>
<el-col style="text-align: right" :span="12">
<el-col style="text-align: right" :span="5">
<svg-icon
icon-class="de-copy"
class="de-copy-icon"
@ -441,7 +441,7 @@
<span>{{ $t('datasource.base_info') }}</span>
</div>
<el-form-item :label="$t('commons.name')" prop="name">
<el-input v-model="apiItem.name" autocomplete="off" />
<el-input :placeholder="$t('commons.input_name')" v-model="apiItem.name" autocomplete="off" />
</el-form-item>
<el-form-item :label="$t('datasource.request')" prop="url">
@ -575,8 +575,15 @@
<div class="row-rules">
<span>{{ $t('dataset.data_preview') }}</span>
</div>
<el-empty
size="125"
v-if="showEmpty"
:image="noneImg"
style="margin-top: 24px"
:description="$t('暂无数据,请在数据结构勾选字段')"
/>
<ux-grid
v-else
ref="plxTable"
size="mini"
style="width: 100%"
@ -839,6 +846,7 @@ export default {
},
api_table_title: '',
schemas: [],
showEmpty: false,
canEdit: false,
edit_api_item: false,
add_api_item: true,
@ -1132,6 +1140,7 @@ export default {
}
},
previewData() {
this.showEmpty = false
const datas = []
let maxPreviewNum = 0
for (let j = 0; j < this.apiItem.fields.length; j++) {
@ -1154,6 +1163,7 @@ export default {
)
}
this.$refs.plxTable.reloadData(datas)
this.showEmpty = !!datas.length
}
},
handleCheckChange(node) {
@ -1427,6 +1437,10 @@ export default {
font-size: 16px;
font-weight: 500;
margin-right: 8px;
max-width: 80%;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.req-title,
.req-value {

View File

@ -11,7 +11,7 @@
!canEdit
? $t('datasource.show_info')
: formType == 'add'
? $t('datasource.create')
? `${$t('commons.create') + typeMap }${ $t('commons.datasource')}`
: $t('datasource.modify')
}}
</span>
@ -71,6 +71,9 @@
label-width="180px"
label-position="right"
>
<div class="de-row-rules">
<span>基本信息</span>
</div>
<el-form-item :label="$t('datasource.display_name')" prop="name">
<el-input
v-model="form.name"
@ -318,6 +321,7 @@ export default {
]
},
schemas: [],
typeMap: '',
canEdit: false,
originConfiguration: {},
edit_api_item: false,
@ -387,7 +391,7 @@ export default {
async created() {
await this.datasourceTypes()
this.queryTreeDatas()
const { id, showModel, msgNodeId, type } = this.$route.query
const { id, showModel, msgNodeId, type, name } = this.$route.query
this.params = this.$route.query
if (id) {
await this.getDatasourceDetail(id, showModel)
@ -397,6 +401,7 @@ export default {
this.canEdit = true
this.disabled = false
if (type) {
this.typeMap = name
this.setType()
this.changeType()
}
@ -458,6 +463,10 @@ export default {
customDriver: 'default',
queryTimeout: 30
}
if (this.form.type == 'oracle') {
this.$set(this.form.configuration, 'charset', 'Default')
this.$set(this.form.configuration, 'targetCharset', 'Default')
}
},
changeEdit() {
this.canEdit = true

View File

@ -483,9 +483,10 @@ export default {
this.queryTreeDatas()
},
addDb({ type }) {
const name = (this.dsTypes.find(ele => type === ele.type ) || {}).name
this.$router.push({
path: '/ds-form',
query: { type }
query: { type, name }
})
},
addFolderWithType(data) {
@ -494,9 +495,10 @@ export default {
this.dialogTitle = this.$t('datasource.add_driver')
this.editDriver = true
} else {
const name = (this.dsTypes.find(ele => data.id === ele.type ) || {}).name
this.$router.push({
path: '/ds-form',
query: { type: data.id }
query: { type: data.id, name }
})
}
},

View File

@ -169,7 +169,7 @@
<template slot-scope="scope">
<span
v-if="scope.row.lastExecStatus"
:class="[`de-${scope.row.lastExecStatus}`, 'de-status']"
:class="[`de-${scope.row.lastExecStatus}-pre`, 'de-status']"
>{{
$t(`dataset.${scope.row.lastExecStatus.toLocaleLowerCase()}`)
}}
@ -209,7 +209,7 @@
:label="$t('dataset.task.task_status')"
>
<template slot-scope="scope">
<span :class="[`de-${scope.row.status}`, 'de-status']"
<span :class="[`de-${scope.row.status}-result`, 'de-status']"
>{{ $t(`dataset.task.${scope.row.status.toLocaleLowerCase()}`) }}
</span>
</template>
@ -865,59 +865,4 @@ export default {
display: none !important;
}
}
.de-status {
position: relative;
margin-left: 15px;
&::before {
content: "";
position: absolute;
top: 50%;
left: -13px;
transform: translateY(-50%);
width: 5px;
height: 5px;
border-radius: 50%;
}
}
.de-Completed {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Underway {
&::before {
background: #8f959e;
}
}
.de-Pending {
&::before {
background: #8f959e;
}
}
.de-Exec {
&::before {
background: var(--primary, #3370ff);
}
}
.de-Stopped {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Error {
&::before {
background: var(--deDanger, #3370ff);
}
.el-icon-s-order {
color: var(--primary, #3370ff);
cursor: pointer;
}
}
</style>

View File

@ -98,7 +98,7 @@
<template slot-scope="scope">
<span
v-if="scope.row.status"
:class="[`de-${scope.row.status}`, 'de-status']"
:class="[`de-${scope.row.status}-pre`, 'de-status']"
>{{ $t(`dataset.${scope.row.status.toLocaleLowerCase()}`) }}
<svg-icon style="cursor: pointer;" v-if="scope.row.status === 'Error'" @click="showErrorMassage(scope.row.info)" icon-class="icon-maybe" class="field-icon-location" />
</span>
@ -593,60 +593,3 @@ span {
}
}
</style>
<style lang="scss">
.de-status {
position: relative;
margin-left: 15px;
&::before {
content: "";
position: absolute;
top: 50%;
left: -13px;
transform: translateY(-50%);
width: 5px;
height: 5px;
border-radius: 50%;
}
}
.de-Completed {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Underway {
&::before {
background: #8f959e;
}
}
.de-Pending {
&::before {
background: #8f959e;
}
}
.de-Exec {
&::before {
background: var(--primary, #3370ff);
}
}
.de-Stopped {
&::before {
background: var(--deSuccess, #3370ff);
}
}
.de-Error {
&::before {
background: var(--deDanger, #3370ff);
}
.el-icon-question {
color: #646a73;
cursor: pointer;
}
}
</style>