kystudio/src/components/setting/SettingModel/SettingModel.vue (619 lines of code) (raw):
<template>
<div class="setting-model">
<div class="ksd-mb-10 ksd-fright">
<el-input :placeholder="$t('kylinLang.common.pleaseFilterByModelName')" style="width:200px" size="medium" prefix-icon="el-ksd-icon-search_22" v-model="filter.model_name" v-global-key-event.enter.debounce="searchModels" @clear="searchModels()">
</el-input>
</div>
<el-table
:data="modelList"
class="model-setting-table"
v-scroll-shadow
:empty-text="emptyText"
style="width: 100%">
<el-table-column width="230px" show-overflow-tooltip prop="alias" :label="modelTableTitle"></el-table-column>
<el-table-column prop="last_modified" show-overflow-tooltip width="218px" :label="$t('modifyTime')">
<template slot-scope="scope">
<span v-if="scope.row.config_last_modified>0">{{transToGmtTime(scope.row.config_last_modified)}}</span>
</template>
</el-table-column>
<el-table-column prop="config_last_modifier" show-overflow-tooltip width="150" :label="$t('modifiedUser')"></el-table-column>
<el-table-column min-width="400px" :label="$t('modelSetting')">
<template slot-scope="scope">
<div v-if="scope.row.auto_merge_time_ranges">
<span class="model-setting-item">
{{$t('segmentMerge')}}<span v-for="item in scope.row.auto_merge_time_ranges" :key="item">{{$t(item)}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editMergeItem(scope.row)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeAutoMerge(scope.row, 'auto_merge_time_ranges')"></i>
</common-tip>
</div>
<div v-if="scope.row.volatile_range">
<span class="model-setting-item" @click="editVolatileItem(scope.row)">
{{$t('volatileRange')}}<span>{{scope.row.volatile_range.volatile_range_number}} {{$t(scope.row.volatile_range.volatile_range_type.toLowerCase())}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editVolatileItem(scope.row)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeAutoMerge(scope.row, 'volatile_range')"></i>
</common-tip>
</div>
<div v-if="scope.row.retention_range">
<span class="model-setting-item" @click="editRetentionItem(scope.row)">
{{$t('retention')}}<span>{{scope.row.retention_range.retention_range_number}} {{$t(scope.row.retention_range.retention_range_type.toLowerCase())}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editRetentionItem(scope.row)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeAutoMerge(scope.row, 'retention_range')"></i>
</common-tip>
</div>
<div v-if="Object.keys(scope.row.override_props).length">
<div v-for="(propValue, key) in scope.row.override_props" :key="key">
<template v-if="key.includes('kylin.engine.spark-conf') && defaultConfigs.includes(key.replace(/^kylin.engine.spark-conf./, ''))">
<span class="model-setting-item" @click="editSparkItem(scope.row, key)">
<!-- 去掉前缀kylin.engine.spark-conf. -->
{{key}}:<span>{{propValue}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editSparkItem(scope.row, key)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeAutoMerge(scope.row, key)"></i>
</common-tip>
</template>
<template v-else-if="key.split('.').includes('cube')">
<span class="model-setting-item" @click="editCubeItem(scope.row, key)">
{{key.split('.').slice(-1).toString()}}:<span>{{propValue}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editCubeItem(scope.row, key)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeAutoMerge(scope.row, key)"></i>
</common-tip>
</template>
<template v-else>
<span class="model-setting-item" @click="editCustomSettingItem(scope.row, key)">
{{key}}:<span>{{propValue}}</span>
</span><common-tip :content="$t('kylinLang.common.edit')">
<i class="el-icon-ksd-table_edit ksd-mr-5 ksd-ml-10" @click="editCustomSettingItem(scope.row, key)"></i>
</common-tip><common-tip :content="$t('kylinLang.common.delete')">
<i class="el-icon-ksd-symbol_type" @click="removeCustomSettingItem(scope.row, key)"></i>
</common-tip>
</template>
</div>
</div>
</template>
</el-table-column>
<el-table-column
width="83px"
:label="$t('kylinLang.common.action')">
<template slot-scope="scope">
<common-tip>
<div slot="content">{{$t('addSettingItem')}}</div>
<i class="el-ksd-icon-table_add_old" @click="addSettingItem(scope.row)"></i>
</common-tip>
</template>
</el-table-column>
</el-table>
<kylin-pager :totalSize="modelListSize" :perPageSize="filter.page_size" :curPage="filter.page_offset+1" v-on:handleCurrentChange='currentChange' ref="modleConfigPager" :refTag="pageRefTags.modleConfigPager" class="ksd-mtb-10 ksd-center" ></kylin-pager>
<el-dialog :title="modelSettingTitle" :visible.sync="editModelSetting" width="480px" class="model-setting-dialog" @closed="handleClosed" :close-on-press-escape="false" :close-on-click-modal="false">
<el-form ref="form" label-position="top" size="medium" label-width="80px" :model="modelSettingForm" :rules="rules">
<el-form-item :label="modelTableTitle">
<el-input v-model.trim="modelSettingForm.name" disabled></el-input>
</el-form-item>
<el-form-item :label="$t('settingItem')" v-if="step=='stepOne'" prop="settingItem">
<el-select v-model="modelSettingForm.settingItem" size="medium" :placeholder="$t('kylinLang.common.pleaseSelect')" style="width:100%">
<el-option
v-for="item in settingOption"
:key="item"
:label="$t(settingMap[item])"
:value="item">
</el-option>
</el-select>
<p v-html="optionDesc[modelSettingForm.settingItem]"></p>
</el-form-item>
<el-form-item :label="$t('autoMerge')" class="ksd-mb-10" v-if="step=='stepTwo'&&modelSettingForm.settingItem==='Auto-merge'">
<el-checkbox-group v-model="modelSettingForm.autoMerge" class="merge-groups">
<div v-for="(item, index) in mergeGroups" :key="item"> <el-checkbox :label="item" v-if="index<3">{{$t(item)}}</el-checkbox></div>
<div v-for="(item, index) in mergeGroups" :key="item"><el-checkbox :label="item" v-if="index>2">{{$t(item)}}</el-checkbox></div>
</el-checkbox-group>
</el-form-item>
<el-form-item :label="$t('volatileRangeItem')" v-if="step=='stepTwo'&&modelSettingForm.settingItem==='Volatile Range'">
<el-input v-model="modelSettingForm.volatileRange.volatile_range_number" v-number="modelSettingForm.volatileRange.volatile_range_number" :placeholder="$t('kylinLang.common.pleaseInput')" class="retention-input"></el-input>
<el-select v-model="modelSettingForm.volatileRange.volatile_range_type" class="ksd-ml-8" size="medium" :placeholder="$t('kylinLang.common.pleaseSelect')">
<el-option
v-for="item in units"
:key="item.label"
:label="$t(item.label)"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('retentionThreshold')" v-if="step=='stepTwo'&&modelSettingForm.settingItem==='Retention Threshold'">
<el-input v-model="modelSettingForm.retentionThreshold.retention_range_number" v-number="modelSettingForm.retentionThreshold.retention_range_number" :placeholder="$t('kylinLang.common.pleaseInput')" class="retention-input"></el-input>
<!-- <span class="ksd-ml-10">{{$t(modelSettingForm.retentionThreshold.retention_range_type.toLowerCase())}}</span> -->
<el-select
class="ksd-ml-10"
style="width: 100px;"
v-model="modelSettingForm.retentionThreshold.retention_range_type"
:placeholder="$t('kylinLang.common.pleaseChoose')">
<el-option
v-for="type in retentionTypes.filter(it => it !== 'WEEK')"
:key="type"
:label="$t(type.toLowerCase())"
:value="type">
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="settingMap[modelSettingForm.settingItem]" v-if="step=='stepTwo'&&modelSettingForm.settingItem.indexOf('spark.')!==-1">
<el-input v-model="modelSettingForm[modelSettingForm.settingItem]" v-number="modelSettingForm[modelSettingForm.settingItem]" :placeholder="$t('kylinLang.common.pleaseInput')" class="retention-input"></el-input><span
class="ksd-ml-5" v-if="modelSettingForm.settingItem==='spark.executor.memory'">G</span>
</el-form-item>
<el-form-item :label="settingMap[modelSettingForm.settingItem]" v-if="step=='stepTwo'&&modelSettingForm.settingItem === 'is-base-cuboid-always-valid'">
<el-select v-model="modelSettingForm['is-base-cuboid-always-valid']">
<el-option
v-for="item in baseCuboidValid"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t(settingMap[modelSettingForm.settingItem])" v-if="step=='stepTwo'&&modelSettingForm.settingItem === 'customSettings'">
<div class="custom-settings" v-for="(item, index) in modelSettingForm[modelSettingForm.settingItem]" :key="index">
<el-input :class="['custom-param-key', {'is-editting': isEdit}]" v-model.trim="modelSettingForm[modelSettingForm.settingItem][index][0]" :placeholder="$t('customSettingKeyPlaceholder')" />
<el-input :class="['custom-param-value', {'is-editting': isEdit}]" v-model.trim="modelSettingForm[modelSettingForm.settingItem][index][1]" :placeholder="$t('customSettingValuePlaceholder')" />
<span class="ky-no-br-space ksd-ml-2" v-if="!isEdit">
<el-button type="primary" icon="el-ksd-icon-add_16" plain circle size="mini" @click="addCustomSetting"></el-button>
<el-button icon="el-ksd-icon-minus_16" class="ksd-ml-2" plain circle size="mini" :disabled="modelSettingForm[modelSettingForm.settingItem].length === 1 && index === 0" @click="removeCustomSetting(index)"></el-button>
</span>
</div>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editModelSetting = false" v-if="step=='stepOne' || (step=='stepTwo' && isEdit)" size="medium">{{$t('kylinLang.common.cancel')}}</el-button>
<el-button @click="preStep" icon="el-ksd-icon-arrow_left_22" size="medium" v-if="step=='stepTwo' && !isEdit">{{$t('kylinLang.common.prev')}}</el-button>
<el-button type="primary" @click="nextStep" size="medium" iconr="el-ksd-icon-arrow_right_22" v-if="step=='stepOne'" :disabled="modelSettingForm.settingItem==''">{{$t('kylinLang.common.next')}}</el-button>
<el-button
type="primary"
@click="submit"
size="medium"
v-if="step=='stepTwo'"
:loading="isLoading"
:disabled="isSubmit">
{{$t('kylinLang.common.submit')}}
</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import Vue from 'vue'
import { Component } from 'vue-property-decorator'
import { mapActions, mapGetters } from 'vuex'
import locales from './locales'
import { pageCount, pageRefTags } from '../../../config'
import { handleSuccess, transToGmtTime, kylinConfirm } from '../../../util/business'
import { handleSuccessAsync, handleError, objectClone, ArrayFlat } from '../../../util/index'
import { retentionTypes } from '../handler'
const initialSettingForm = JSON.stringify({
name: '',
settingItem: '',
autoMerge: [],
volatileRange: {volatile_range_number: 0, volatile_range_type: '', volatile_range_enabled: true},
retentionThreshold: {retention_range_number: 0, retention_range_type: '', retention_range_enabled: true},
'spark.executor.cores': null,
'spark.executor.instances': null,
'spark.executor.memory': null,
'spark.sql.shuffle.partitions': null,
'is-base-cuboid-always-valid': 0,
customSettings: [[]]
})
@Component({
props: {
project: {
type: Object,
default: () => ({})
}
},
methods: {
transToGmtTime: transToGmtTime,
...mapActions({
loadModelConfigList: 'LOAD_MODEL_CONFIG_LIST',
updateModelConfig: 'UPDATE_MODEL_CONFIG'
})
},
computed: {
...mapGetters([
'currentSelectedProject'
])
},
locales
})
export default class SettingStorage extends Vue {
pageRefTags = pageRefTags
retentionTypes = retentionTypes
modelList = []
modelListSize = 0
filter = {
page_offset: 0,
page_size: +localStorage.getItem(this.pageRefTags.modleConfigPager) || pageCount,
model_name: ''
}
editModelSetting = false
isLoading = false
isEdit = false
step = 'stepOne'
// settingOption = ['Auto-merge', 'Volatile Range', 'Retention Threshold', 'spark.executor.cores', 'spark.executor.instances', 'spark.executor.memory', 'spark.sql.shuffle.partitions']
mergeGroups = ['HOUR', 'DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR']
units = [{label: 'hour', value: 'HOUR'}, {label: 'day', value: 'DAY'}, {label: 'week', value: 'WEEK'}, {label: 'month', value: 'MONTH'}, {label: 'quarter', value: 'QUARTER'}, {label: 'year', value: 'YEAR'}]
baseCuboidValid = [{label: 'true', value: 0}, {label: 'false', value: 1}]
modelSettingForm = JSON.parse(initialSettingForm)
activeRow = null
settingMap = {
'Auto-merge': 'Auto-merge',
'Volatile Range': 'Volatile Range',
'Retention Threshold': 'Retention Threshold',
'spark.executor.cores': 'kylin.engine.spark-conf.spark.executor.cores',
'spark.executor.instances': 'kylin.engine.spark-conf.spark.executor.instances',
'spark.executor.memory': 'kylin.engine.spark-conf.spark.executor.memory',
'spark.sql.shuffle.partitions': 'kylin.engine.spark-conf.spark.sql.shuffle.partitions',
'is-base-cuboid-always-valid': 'is-base-cuboid-always-valid',
'customSettings': 'customSettings'
}
defaultConfigs = ['spark.executor.cores', 'spark.executor.instances', 'spark.executor.memory', 'spark.sql.shuffle.partitions']
get emptyText () {
return this.filter.model_name ? this.$t('kylinLang.common.noResults') : this.$t('kylinLang.common.noData')
}
get modelTableTitle () {
return this.$t('kylinLang.model.modelNameGrid')
}
get settingOption () {
return [
'Auto-merge',
'Volatile Range',
'Retention Threshold',
'spark.executor.cores',
'spark.executor.instances',
'spark.executor.memory',
'spark.sql.shuffle.partitions',
'is-base-cuboid-always-valid',
'customSettings'
]
}
get availableRetentionRange () {
// let largestRange = null
// const modelAutoMergeRanges = this.activeRow && this.activeRow.auto_merge_time_ranges || []
// const autoMergeRanges = this.isEdit ? this.modelSettingForm.autoMerge : modelAutoMergeRanges
// this.units.forEach(unit => {
// if (autoMergeRanges.includes(unit.value)) {
// largestRange = unit.value
// }
// })
// return largestRange || ''
return 'DAY'
}
validateSettingItem (rule, value, callback) {
const autoMergeRanges = this.activeRow && this.activeRow.auto_merge_time_ranges || []
if (this.step === 'stepOne' && value === 'Retention Threshold' && !autoMergeRanges.length) {
callback(new Error(null))
} else {
callback()
}
}
get optionDesc () {
return {
'Auto-merge': this.$t('autoMergeTip'),
'Volatile Range': this.$t('volatileTip'),
'Retention Threshold': this.$t('retentionThresholdDesc'),
'kylin.engine.spark-conf.spark.executor.cores': this.$t('sparkCores'),
'kylin.engine.spark-conf.spark.executor.instances': this.$t('sparkInstances'),
'kylin.engine.spark-conf.spark.executor.memory': this.$t('sparkMemory'),
'kylin.engine.spark-conf.spark.sql.shuffle.partitions': this.$t('sparkShuffle'),
'is-base-cuboid-always-valid': this.$t('baseCuboidConfig'),
'customSettings': this.$t('customOptions')
}
}
get rules () {
return {
// settingItem: [{ validator: this.validateSettingItem, message: this.$t('pleaseSetAutoMerge') }]
}
}
handleClosed () {
this.isEdit = false
this.activeRow = null
this.$refs['form'].clearValidate()
this.modelSettingForm = JSON.parse(initialSettingForm)
}
addSettingItem (row) {
// if (row.auto_merge_time_ranges && row.volatile_range && row.retention_range && Object.keys(row.override_props).length === 4) {
// return
// }
this.modelSettingForm.name = row.alias
this.activeRow = objectClone(row)
this.step = 'stepOne'
this.editModelSetting = true
}
get modelSettingTitle () {
return this.isEdit ? this.$t('editSetting') : this.$t('newSetting')
}
get isSubmit () {
if (this.modelSettingForm.settingItem === 'Auto-merge' && !this.modelSettingForm.autoMerge.length) {
return true
} else if (this.modelSettingForm.settingItem === 'Volatile Range' && !(this.modelSettingForm.volatileRange.volatile_range_number >= 0 && this.modelSettingForm.volatileRange.volatile_range_number !== '' && this.modelSettingForm.volatileRange.volatile_range_type)) {
return true
} else if (this.modelSettingForm.settingItem === 'Retention Threshold' && !(this.modelSettingForm.retentionThreshold.retention_range_number >= 0 && this.modelSettingForm.retentionThreshold.retention_range_number !== '' && this.modelSettingForm.retentionThreshold.retention_range_type)) {
return true
} else if (this.modelSettingForm.settingItem.indexOf('spark.') !== -1 && !this.modelSettingForm[this.modelSettingForm.settingItem]) {
return true
} else if (this.modelSettingForm.settingItem === 'is-base-cuboid-always-valid' && this.modelSettingForm[this.modelSettingForm.settingItem] === '') {
return true
} else if (this.modelSettingForm.settingItem === 'customSettings' && (!ArrayFlat(this.modelSettingForm[this.modelSettingForm.settingItem]).length || this.modelSettingForm[this.modelSettingForm.settingItem].some(it => it.length === 1))) {
return true
} else {
return false
}
}
removeAutoMerge (row, type) {
kylinConfirm(this.$t('isDel_' + type), {
type: 'warning',
confirmButtonText: this.$t('kylinLang.common.delete')
}).then(() => {
const rowCopy = objectClone(row)
rowCopy[type] = null
rowCopy['auto_merge_enabled'] = type !== 'auto_merge_time_ranges' ? rowCopy['auto_merge_enabled'] : null
rowCopy['retention_range'] = type !== 'auto_merge_time_ranges' ? rowCopy['retention_range'] : null
if (type.indexOf('spark.') !== -1 || type.indexOf('cube.') !== -1) {
delete rowCopy.override_props[type]
}
this.updateModelConfig(Object.assign({}, {project: this.currentSelectedProject}, rowCopy)).then((res) => {
handleSuccess(res, () => {
this.getConfigList()
})
}, (res) => {
handleError(res)
})
})
}
// 移除自定义配置项
removeCustomSettingItem (row, type) {
kylinConfirm(this.$t('delCustomConfigTip', {name: type}), {
type: 'warning',
confirmButtonText: this.$t('kylinLang.common.delete')
}).then(() => {
const rowCopy = objectClone(row)
if (type in rowCopy.override_props) {
delete rowCopy.override_props[type]
}
this.updateModelConfig(Object.assign({}, {project: this.currentSelectedProject}, rowCopy)).then((res) => {
handleSuccess(res, () => {
this.getConfigList()
})
}, (res) => {
handleError(res)
})
})
}
async nextStep () {
try {
await this.$refs['form'].validate()
this.step = 'stepTwo'
if (this.modelSettingForm.settingItem === 'Retention Threshold') {
this.modelSettingForm.retentionThreshold.retention_range_type = this.availableRetentionRange
}
} catch (e) {
handleError(e)
}
}
preStep () {
this.step = 'stepOne'
}
editMergeItem (row) {
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = 'Auto-merge'
this.modelSettingForm.autoMerge = JSON.parse(JSON.stringify(row.auto_merge_time_ranges))
this.modelSettingForm.retentionThreshold = JSON.parse(JSON.stringify(row.retention_range))
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
editVolatileItem (row) {
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = 'Volatile Range'
this.modelSettingForm.volatileRange = JSON.parse(JSON.stringify(row.volatile_range))
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
editRetentionItem (row) {
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = 'Retention Threshold'
this.modelSettingForm.autoMerge = JSON.parse(JSON.stringify(row.auto_merge_time_ranges))
this.modelSettingForm.retentionThreshold = JSON.parse(JSON.stringify(row.retention_range))
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
editSparkItem (row, sparkItemKey) {
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = sparkItemKey.substring(24)
if (this.modelSettingForm.settingItem === 'spark.executor.memory') {
this.modelSettingForm[this.modelSettingForm.settingItem] = row.override_props[sparkItemKey].replace(/[a-zA-Z]+$/, '')
} else {
this.modelSettingForm[this.modelSettingForm.settingItem] = row.override_props[sparkItemKey]
}
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
// 编辑base-cubiod相关配置
editCubeItem (row, key) {
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = key.split('.').slice(-1).toString()
this.modelSettingForm[this.modelSettingForm.settingItem] = row.override_props[key]
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
// 编辑自定义设置
editCustomSettingItem (row, key) {
let customList = []
customList.push([key, row.override_props[key]])
this.modelSettingForm.name = row.alias
this.modelSettingForm.settingItem = 'customSettings'
this.modelSettingForm[this.modelSettingForm.settingItem] = customList
this.activeRow = row
this.step = 'stepTwo'
this.isEdit = true
this.editModelSetting = true
}
submit () {
if (this.modelSettingForm.settingItem === 'Auto-merge') {
this.activeRow.auto_merge_time_ranges = this.modelSettingForm.autoMerge
this.activeRow.auto_merge_enabled = true
if (this.activeRow.retention_range) {
this.modelSettingForm.retentionThreshold.retention_range_type = this.availableRetentionRange
this.activeRow.retention_range = this.modelSettingForm.retentionThreshold
}
}
if (this.modelSettingForm.settingItem === 'Volatile Range') {
this.activeRow.volatile_range = this.modelSettingForm.volatileRange
}
if (this.modelSettingForm.settingItem === 'Retention Threshold') {
this.activeRow.retention_range = this.modelSettingForm.retentionThreshold
}
if (this.modelSettingForm.settingItem.indexOf('spark.') !== -1) {
this.activeRow.override_props['kylin.engine.spark-conf.' + this.modelSettingForm.settingItem] = this.modelSettingForm[this.modelSettingForm.settingItem]
}
if (this.modelSettingForm.settingItem === 'spark.executor.memory') {
this.activeRow.override_props['kylin.engine.spark-conf.spark.executor.memory'] = this.activeRow.override_props['kylin.engine.spark-conf.spark.executor.memory'] + 'g'
}
if (this.modelSettingForm.settingItem === 'is-base-cuboid-always-valid') {
this.activeRow.override_props['kylin.cube.aggrgroup.is-base-cuboid-always-valid'] = !this.modelSettingForm['is-base-cuboid-always-valid']
}
if (this.modelSettingForm.settingItem === 'customSettings') {
let customData = {}
this.modelSettingForm.customSettings.forEach(item => {
customData[item[0]] = item[1]
})
this.activeRow.override_props = {...this.activeRow.override_props, ...customData}
}
this.isLoading = true
this.updateModelConfig(Object.assign({}, {project: this.currentSelectedProject}, this.activeRow)).then((res) => {
handleSuccess(res, () => {
this.isLoading = false
this.editModelSetting = false
this.getConfigList()
})
}, (res) => {
handleError(res)
this.isLoading = false
})
}
async getConfigList () {
try {
const res = await this.loadModelConfigList(Object.assign({}, {project: this.currentSelectedProject}, this.filter))
const resData = await handleSuccessAsync(res)
this.modelList = resData.value
this.modelListSize = resData.total_size
} catch (e) {
handleError(e)
}
}
currentChange (size, count) {
this.filter.page_offset = size
this.filter.page_size = count
this.getConfigList()
}
searchModels () {
this.filter.page_offset = 0
this.getConfigList()
}
// 增加自定义配置项
addCustomSetting () {
this.modelSettingForm[this.modelSettingForm.settingItem].push([])
}
// 删除某个自定义配置项
removeCustomSetting (index) {
this.modelSettingForm[this.modelSettingForm.settingItem].splice(index, 1)
}
created () {
this.getConfigList()
}
}
</script>
<style lang="less">
@import '../../../assets/styles/variables.less';
.setting-model {
.model-setting-item {
background-color: @grey-4;
line-height: 18px;
> span {
margin-left: 5px;
}
}
.model-setting-table {
.el-ksd-icon-table_add_old.disabled {
color: @text-disabled-color;
cursor: not-allowed;
}
.el-ksd-icon-table_add_old,
.el-icon-ksd-table_edit,
.el-icon-ksd-symbol_type {
&:hover {
color: @base-color;
}
}
}
}
.model-setting-dialog {
.el-dialog__body {
max-height: 500px;
overflow: auto;
}
.el-form-item__content p {
font-size: 12px;
line-height: 16px;
color: @text-normal-color;
margin-top: 5px;
}
.merge-groups {
> div:nth-child(2) {
margin-top: -15px;
}
.el-checkbox {
line-height: 1;
width: 60px;
&+.el-checkbox {
margin-left: 30px;
}
&:nth-child(4) {
margin-left: 0;
}
}
}
.retention-input {
display: inline-block;
width: 100px;
}
.custom-settings {
.custom-param-key {
width: 250px;
&.is-editting {
width: 300px;
}
}
.custom-param-value {
width: 124px;
&.is-editting {
width: 135px;
}
}
}
.el-icon-ksd-alert {
font-size: 14px;
color: @warning-color-1;
margin-right: 5px;
}
}
</style>