fix: template下载参数、endpoint导出文件名

This commit is contained in:
chenjinsong
2021-05-21 22:55:51 +08:00
parent dfd59ad195
commit a3a9daf982
4 changed files with 9 additions and 437 deletions

View File

@@ -630,8 +630,8 @@ export default {
} }
if (!param.query) delete param.query if (!param.query) delete param.query
// 根据panelId获得panel下的所有图表 // 根据panelId获得panel下的所有图表
const groupId = this.from === fromRoute.panel ? '&groupId=0' : '' // const groupId = true ? '&groupId=0' : ''
this.$get('visual/panel/chart?panelId=' + params.panelId + groupId + '&pageSize=-1').then(response => { this.$get('visual/panel/chart?panelId=' + params.panelId + '&groupId=0' + '&pageSize=-1').then(response => {
if (response.code === 200) { if (response.code === 200) {
response.data.list.forEach((item, index) => { response.data.list.forEach((item, index) => {
item.isLoaded = false item.isLoaded = false

View File

@@ -216,19 +216,19 @@ export default {
const fileName = this.exportFileName + '-' + this.$t('overall.template') + '-' + this.getTimeString() + '.xlsx' const fileName = this.exportFileName + '-' + this.$t('overall.template') + '-' + this.getTimeString() + '.xlsx'
let url = null let url = null
if (this.importUrl.indexOf('asset') > -1) { const param = { language: language }
if (this.exportFileName.indexOf('asset') > -1) {
url = '/asset/asset/template' url = '/asset/asset/template'
} else if (this.importUrl.indexOf('rule') > -1) { param.type = 'asset'
url = '/alert/rule/template' } else if (this.exportFileName.indexOf('dashboard') > -1) {
} else if (this.importUrl.indexOf('panel') > -1) {
url = 'visual/panel/template' url = 'visual/panel/template'
} else if (this.importUrl.indexOf('endpoint') > -1) { } else if (this.exportFileName.indexOf('endpoint') > -1) {
url = '/monitor/endpoint/template' url = '/monitor/endpoint/template'
param.type = 'endpoint'
} else if (this.importUrl.indexOf('tmpl') > -1) { } else if (this.importUrl.indexOf('tmpl') > -1) {
url = '/expression/tmpl/template' url = '/expression/tmpl/template'
} }
const param = { language: language }
if (!url) { if (!url) {
console.error('no interface support') console.error('no interface support')
} }

View File

@@ -1,428 +0,0 @@
<template>
<div class="right-box right-box-model" v-clickoutside="{obj:editModel,func:clickOutside}" @click="inputHandler">
<!-- begin--顶部按钮-->
<div class="right-box-top-btns right-box-form-delete">
<button @click="del" class="nz-btn nz-btn-size-normal nz-btn-size-alien" id="model-del" type="button" v-has="'model_delete'" v-if="editModel.id">
<span class="right-box-top-btn-icon"><i class="nz-icon nz-icon-delete"></i></span>
<span class="right-box-top-btn-txt">{{$t('overall.delete')}}</span>
</button>
</div>
<!-- end--顶部按钮-->
<!-- begin--标题-->
<div class="right-box-title">{{editModel.id ? ($t("config.model.editModel")) : $t("config.model.createModel")}}</div>
<!-- end--标题-->
<!-- begin--表单-->
<div class="right-box-form-box">
<el-form class="right-box-form right-box-form-left" :model="editModel" label-position = "top" label-width="120px" :rules="rules" ref="modelForm">
<!--model名称-->
<el-form-item :label='$t("overall.name")' prop="name">
<el-input placeholder="" maxlength="64" show-word-limit v-model.trim="editModel.name" size="small" id="model-box-input-name"></el-input>
</el-form-item>
<!--设备类型-->
<el-form-item :label="$t('config.model.type')" prop="type">
<el-autocomplete
id="model-box-input-type"
:fetch-suggestions="typeSuggestion"
v-model.trim="editModel.type.value"
placeholder=""
size="small"
popper-class="no-style-class"
>
<template slot-scope="{ item }">
<div class="autocomplete-dropdown" @mouseenter="dropdownHoverItem = 'type' + item.id" @mouseleave="dropdownHoverItem = ''">
<span v-if="!item.isEdit">{{item.value}}</span>
<span v-else @click.stop="inputHandler(item)"><el-input size="mini" v-model="editingType" @click.stop></el-input></span>
<div class="dropdown-btns" v-show="dropdownHoverItem == 'type' + item.id">
<span :id="'model-type-op-del-' + item.id" v-has="'model_delete'" class="dropdown-btn dropdown-btn-delete" @click.stop="delType(item.id)"><i class="nz-icon nz-icon-delete"></i></span>
<span v-if="!item.isEdit" :id="'model-type-op-edit-' + item.id" v-has="'model_edit'" class="dropdown-btn dropdown-btn-edit" @click.stop="editType(item)"><i class="nz-icon nz-icon-edit"></i></span>
<span :id="'model-type-op-edit-' + item.id" @click.stop="saveType(item)" class="dropdown-btn dropdown-btn-edit" v-else><i class="nz-icon nz-icon-check"></i></span>
</div>
</div>
</template>
</el-autocomplete>
</el-form-item>
<!--厂商-->
<el-form-item :label="$t('config.model.vendor')" prop="vendor">
<el-autocomplete
id="model-box-input-vendor"
:fetch-suggestions="vendorSuggestion"
v-model.trim="editModel.vendor.value"
placeholder=""
size="small"
popper-class="no-style-class"
>
<template slot-scope="{ item }">
<div class="autocomplete-dropdown" @mouseenter="dropdownHoverItem = 'vendor' + item.id" @mouseleave="dropdownHoverItem = ''">
<span v-if="!item.isEdit">{{item.value}}</span>
<span v-else @click.stop="inputHandler(item)"><el-input size="mini" v-model="editingVendor"></el-input></span>
<div class="dropdown-btns" v-show="dropdownHoverItem == 'vendor' + item.id">
<span :id="'model-vendor-op-del-' + item.id" v-has="'model_delete'" class="dropdown-btn dropdown-btn-delete" @click.stop="delVendor(item.id)"><i class="nz-icon nz-icon-delete"></i></span>
<span v-if="!item.isEdit" :id="'model-vendor-op-edit-' + item.id" v-has="'model_edit'" class="dropdown-btn dropdown-btn-edit" @click.stop="editVendor(item)"><i class="nz-icon nz-icon-edit"></i></span>
<span :id="'model-type-op-edit-' + item.id" @click.stop="saveVendor(item)" class="dropdown-btn dropdown-btn-edit" v-else><i class="nz-icon nz-icon-check"></i></span>
</div>
</div>
</template>
</el-autocomplete>
</el-form-item>
<el-form-item :label="$t('asset.uSize')" prop="usize">
<el-input v-model.number="editModel.usize" :max="47" size="small" id="model-box-input-usize"></el-input>
</el-form-item>
</el-form>
</div>
<!--底部按钮-->
<div class="right-box__footer">
<button v-cancel="{obj:editModel,func:esc}" id="model-box-esc" class="footer__btn footer__btn--light">
<span>{{$t('overall.cancel')}}</span>
</button>
<button :class="{'nz-btn-disabled':prevent_opt.save}" :disabled="prevent_opt.save" @click="save" class="footer__btn" id="model-box-save">
<span>{{$t('overall.save')}}</span>
</button>
</div>
</div>
</template>
<script>
import bus from '../../../libs/bus'
export default {
name: 'modelBox',
props: {
model: Object
},
data () {
return {
vendorData: [], // vendor下拉列表的数据
typeData: [], // type下拉列表的数据
editModel: {},
rules: {
name: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
type: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
vendor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
usize: [
{ type: 'number', min: 1, max: 47, message: this.$t('validate.usize'), trigger: 'blur' }
]
},
editingVendor: '', // 修改状态的vendor值
editingType: '', // 修改状态的assetType值
dropdownHoverItem: '' // 控制vendor和type下拉列表中操作按钮的展示
}
},
methods: {
clickOutside () {
this.esc(false)
},
// 控制下拉框里input的状态
inputHandler (obj) {
if (obj) {
this.typeData.forEach((item, index) => {
if (obj.id != item.id) {
item.isEdit = false
}
})
this.vendorData.forEach((item, index) => {
if (obj.id != item.id) {
item.isEdit = false
}
})
} else {
this.typeData.forEach((item, index) => {
item.isEdit = false
})
this.vendorData.forEach((item, index) => {
item.isEdit = false
})
}
},
/* 关闭弹框 */
esc (refresh) {
this.$emit('close', refresh)
},
/* 保存 */
save () {
this.$refs.modelForm.validate((valid) => {
if (valid) {
this.prevent_opt.save = true
// vendor和type如果是新记录需要先请求后台新增再获取code
let vendorReady
const vendorCode = this.autocompleteExist('vendor', this.editModel.vendor.value)
if (vendorCode) {
this.editModel.vendorCode = vendorCode
vendorReady = this.$TOOLS.blankPromise()
} else {
const vendor = { type: 'vendor', value: this.editModel.vendor.value }
vendorReady = this.saveVendor(vendor)
}
let typeReady
const typeCode = this.autocompleteExist('type', this.editModel.type.value)
if (typeCode) {
this.editModel.typeCode = typeCode
typeReady = this.$TOOLS.blankPromise()
} else {
const type = { type: 'assetType', value: this.editModel.type.value }
typeReady = this.saveType(type)
}
Promise.all([vendorReady, typeReady]).then(response => {
if (this.editModel.id) {
this.$put('model', this.editModel).then(response => {
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.saveSuccess') })
bus.$emit('asset-property-change')
this.esc(true)
} else {
this.$message.error(response.msg)
}
this.prevent_opt.save = false
})
} else {
this.$post('model', this.editModel).then(response => {
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.saveSuccess') })
bus.$emit('asset-property-change')
this.esc(true)
} else {
this.$message.error(response.msg)
}
this.prevent_opt.save = false
})
}
})
} else {
return false
}
})
},
/* 删除 */
del () {
this.$confirm(this.$t('tip.confirmDelete'), {
confirmButtonText: this.$t('tip.yes'),
cancelButtonText: this.$t('tip.no'),
type: 'warning'
}).then(() => {
this.$delete('model?ids=' + this.editModel.id).then(response => {
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.deleteSuccess') })
this.esc(true)
} else {
this.$message.error(response.msg)
}
})
})
},
delType (id) {
this.$confirm(this.$t('tip.confirmDelete'), {
confirmButtonText: this.$t('tip.yes'),
cancelButtonText: this.$t('tip.no'),
type: 'warning'
}).then(() => {
this.$delete('sys/dict/delete?ids=' + id).then(response => {
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.deleteSuccess') })
this.getTypeData()
this.$emit('reload')
bus.$emit('asset-property-change')
} else {
this.$message.error(response.msg)
}
})
})
},
editType (item) {
this.editingType = item.value
this.inputHandler(item)
item.isEdit = true
},
saveType (item) {
return new Promise(resolve => {
if (this.editingType) { // 下拉选中的编辑
const temp = Object.assign({}, item)
temp.value = this.editingType
this.$post('sys/dict/update', temp).then(response => {
if (response.code === 200) {
item.value = this.editingType
item.isEdit = false
if (this.editModel.type.id == item.id) {
this.editModel.type.value = item.value
}
this.$emit('reload')
bus.$emit('asset-property-change')
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.saveSuccess') })
} else {
this.$message.error(response.msg)
}
})
} else {
this.$post('sys/dict/save', item).then(response => {
if (response.code === 200) {
this.editModel.typeCode = response.data.dictEntity.code
this.$emit('reload')
bus.$emit('asset-property-change')
// this.$message({duration: 1000, type: 'success', message: this.$t("tip.saveSuccess")});
resolve()
} else {
this.$message.error(response.msg)
}
})
}
})
},
editVendor (item) {
this.editingVendor = item.value
this.inputHandler(item)
item.isEdit = true
},
saveVendor (item) {
return new Promise(resolve => {
if (this.editingVendor) {
const temp = Object.assign({}, item)
temp.value = this.editingVendor
this.$post('sys/dict/update', temp).then(response => {
if (response.code === 200) {
item.value = this.editingVendor
item.isEdit = false
if (this.editModel.vendor.id == item.id) {
this.editModel.vendor.value = item.value
}
this.$emit('reload')
bus.$emit('asset-property-change')
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.saveSuccess') })
} else {
this.$message.error(response.msg)
}
})
} else {
this.$post('sys/dict/save', item).then(response => {
if (response.code === 200) {
this.editModel.vendorCode = response.data.dictEntity.code
this.$emit('reload')
bus.$emit('asset-property-change')
// this.$message({duration: 1000, type: 'success', message: this.$t("tip.saveSuccess")});
resolve()
} else {
this.$message.error(response.msg)
}
})
}
})
},
delVendor (id) {
this.$confirm(this.$t('tip.confirmDelete'), {
confirmButtonText: this.$t('tip.yes'),
cancelButtonText: this.$t('tip.no'),
type: 'warning'
}).then(() => {
this.$delete('sys/dict/delete?ids=' + id).then(response => {
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.deleteSuccess') })
this.getVendorData()
this.$emit('reload')
bus.$emit('asset-property-change')
} else {
this.$message.error(response.msg)
}
})
})
},
getVendorData () {
this.$get('sys/dict/all?type=vendor&pageSize=-1').then(response => {
if (response.code === 200) {
this.vendorData = response.data.map((item) => {
item.isEdit = false
return item
})
}
})
},
getTypeData () {
this.$get('sys/dict/all?type=assetType&pageSize=-1').then(response => {
if (response.code === 200) {
this.typeData = response.data.map((item) => {
item.isEdit = false
return item
})
}
})
},
// vendor的输入建议
vendorSuggestion (queryString, callback) {
callback(this.suggestionFilter('vendor', queryString))
},
// type的输入建议
typeSuggestion (queryString, callback) {
callback(this.suggestionFilter('type', queryString))
},
suggestionFilter (type, queryString) {
let data = []
if (type == 'vendor') {
if (!queryString) {
data = this.vendorData
} else {
for (let i = 0; i < this.vendorData.length; i++) {
if (this.vendorData[i].value.toLowerCase().indexOf(queryString.toLowerCase()) != -1) {
data.push(this.vendorData[i])
}
}
}
} else if (type == 'type') {
if (!queryString) {
data = this.typeData
} else {
for (let i = 0; i < this.typeData.length; i++) {
if (this.typeData[i].value.toLowerCase().indexOf(queryString.toLowerCase()) != -1) {
data.push(this.typeData[i])
}
}
}
}
return data
},
autocompleteExist (type, string) {
let result = false
let data = []
if (type == 'vendor') {
data = this.vendorData
} else if (type == 'type') {
data = this.typeData
}
for (let i = 0; i < data.length; i++) {
if (data[i].value.toLowerCase() == string.toLowerCase()) {
result = data[i].code
break
}
}
return result
}
},
mounted () {
this.getVendorData()
this.getTypeData()
},
watch: {
model: {
immediate: true,
deep: true,
handler (n, o) {
this.editModel = JSON.parse(JSON.stringify(n))
}
}
}
}
</script>
<style>
.right-box-model .el-autocomplete {
width: 100%;
}
</style>

View File

@@ -19,7 +19,7 @@
</button> </button>
<top-tool-more-options <top-tool-more-options
ref="export" ref="export"
id="expression-template-list" id="endpoint-template-list"
:params="searchLabel" :params="searchLabel"
:permissions="{import: 'monitor_endpoint_add', export: 'monitor_module_view'}" :permissions="{import: 'monitor_endpoint_add', export: 'monitor_module_view'}"
class="top-tool-export margin-l-10 margin-r-10" class="top-tool-export margin-l-10 margin-r-10"