Merge branch 'dev-3.8' of git.mesalab.cn:nezha/nezha-fronted into dev-3.8

This commit is contained in:
zyh
2023-06-27 11:29:51 +08:00
41 changed files with 169 additions and 66 deletions

View File

@@ -325,7 +325,12 @@
margin-top: 0 !important;
margin-bottom: 0 !important;
max-width: 626px !important;
.hidden-padding {
padding: 0;
> span{
padding: 0 20px;
}
}
}
.api-select.right-box-select-top.right-public-box-dropdown-top {
.el-scrollbar__view.el-select-dropdown__list {

View File

@@ -6,7 +6,7 @@
margin-right: 20px;
flex: 1;
}
.latlng .input-box .el-input,.latlng .input-box .el-input-number{
.latlng .input-box .input-box-item .el-input,.latlng .input-box .input-box-item .el-input-number{
width: 100%;
}
.latlng .map-config-dialog .el-dialog{
@@ -20,3 +20,24 @@
padding:0px 5px!important;
}
.prepend_unit{
display: flex;
.el-input--small .el-input__inner {
border-radius: 0 4px 4px 0;
border-left: none;
}
&::before{
content: attr(data-unit);
//position: absolute;
display: inline-block;
top: 0;
right: 100%;
padding: 0 5px;
color: $--color-text-secondary;
background-color: $--background-color-base;
border: 1px solid $--border-color-light;
border-radius:4px 0 0 4px;
}
}

View File

@@ -16,6 +16,9 @@
border: none !important;
}
}
.meta2d-chart-hide-header {
height: calc(100% - 78px);
}
.meta2d-project{
height: calc(100% - 78px);
border: 1px solid;

View File

@@ -24,8 +24,8 @@
display: none !important;
}
}
.right-box__select{
.right-box__select-pipeline{
position: absolute;
left: -55px;
left: -65px;
top: 0;
}

View File

@@ -60,6 +60,7 @@
@import './common/rightBox/assetMetaBox.scss';
@import './common/rightBox/menuBox.scss';
@import './common/rightBox/moduleBox.scss';
@import './common/rightBox/pipelineSelect.scss';
@import './common/rightBox/ipam.scss';
@import './common/rightBox/assetMetaBox.scss';
@import './common/rightBox/chartRightBox/chartRightBox.scss';

View File

@@ -13,7 +13,7 @@ $--font-path: '~element-ui/lib/theme-chalk/fonts'; // 避免ele原字体加载
}
body {
height: 100%;
min-width: 1024px;
min-width: 1400px;
margin:0 !important;
padding: 0 !important;
cursor: default;

View File

@@ -19,6 +19,7 @@
:is-chart="true"
:iconArray="iconArray"
:ref="'topology' + index"
:paddingTop="40"
/>
</el-carousel-item>
</el-carousel>

View File

@@ -4,7 +4,7 @@ const data = {
showHeader: true,
name: '',
dashboardId: 1244,
groupId: 0,
groupId: undefined,
span: 4,
height: 4,
updateBy: 381,

View File

@@ -94,7 +94,8 @@ export default {
this.term = new Terminal({
cursorStyle: 'block', // 光标样式 null | 'block' | 'underline' | 'bar'
disableStdin: false, // 是否应禁用输入
fontSize: 16
fontSize: 16,
lineHeight: 1.2
})
this.term.open(terminalContainer)
this.term.focus()

View File

@@ -150,6 +150,9 @@
<!-- <i class="nz-icon nz-icon-delete" v-if="!item.isDir" @click="delFile(item)"></i>-->
</div>
</div>
<div class="file-item">
{{$t('fileDirectory.overNum', {num: overNum})}}
</div>
</div>
</div>
<el-dialog
@@ -280,6 +283,8 @@ export default {
breadcrumb: [],
fileList: [],
oldFileList: [],
overNum: false,
showNum: 10000,
newFolderBoxShow: false,
folder: '',
fileDirectoryLoading: false,
@@ -409,6 +414,12 @@ export default {
if (res.code === 200) {
this.fileDirectoryLoading = false
this.fileDirectory = res.data.path
if (res.data.list.length > this.showNum) {
this.overNum = res.data.list.length - this.showNum
res.data.list.splice(this.showNum, res.data.list.length)
} else {
this.overNum = false
}
res.data.list.forEach(item => {
if (item.name[0] === '.') {
item.isHide = true

View File

@@ -175,6 +175,7 @@ export default {
},
viewGraph () {
this.$refs.recordRulesQueryTab.viewGraph()
this.dropdownHandler(true)
},
dropdownHandler (show) {
if (!show) {

View File

@@ -48,6 +48,7 @@
:class="[selectSize ? `is-${ selectSize }` : '']"
:disabled="selectDisabled"
:autocomplete="autoComplete || autocomplete"
:maxlength = "maxlength"
@focus="handleFocus"
@blur="softFocus = false"
@click.stop
@@ -72,6 +73,7 @@
v-model="selectedLabel"
type="text"
:placeholder="currentPlaceholder"
:maxlength = "maxlength"
:name="name"
:id="id"
:autocomplete="autoComplete || autocomplete"
@@ -301,6 +303,9 @@ export default {
popperAppendToBody: {
type: Boolean,
default: true
},
maxlength: {
type: Number
}
},

View File

@@ -12,7 +12,7 @@
<div class="condition__column">
<div v-if="meta.nameIsEditing">
<el-select
allow-create
allow-create :maxlength="64"
filterable
size="mini"
v-model="meta.name"
@@ -35,7 +35,7 @@
<div class="condition__column">
<div v-if="meta.operIsEditing">
<el-select
allow-create
allow-create :maxlength="64"
filterable
size="mini"
v-model="meta.oper"

View File

@@ -7,9 +7,8 @@
</el-input>
</div>
<div class="input-box-item" v-if="showZoom">
<el-input v-model="zoom" :max="mapParam.maxZoom" :min="mapParam.minZoom" :step="1" controls-position="right">
<template v-if="showZoom" slot="prepend">{{$t('config.system.basic.zoom')}}</template>
</el-input>
<el-input-number v-model="zoom" :max="mapParam.maxZoom" :precision="0" :min="mapParam.minZoom" :controls="false" class="prepend_unit" :data-unit="$t('config.system.basic.zoom')">
</el-input-number>
</div>
<div class="input-box-item" style="margin-right: unset !important;width: 30px !important;flex:unset;" @click="mapConfigVisible = true"><i class="nz-icon nz-icon-weizhi" style="color:rgb(238, 157, 63)"></i></div>
</div>
@@ -209,9 +208,7 @@ export default {
} else {
this.mapParam = { ...mapParam }
}
if (!this.zoom) {
this.zoom = mapParam.zoom
}
resolve()
}
})

View File

@@ -8,6 +8,7 @@
:search-msg="searchMsg"
:show-history="false"
:show-search="false"
:isNzTransfet="true"
style="width:100%"
@search="search"
></search-input>

View File

@@ -30,13 +30,13 @@
</span>
<el-row class="block-col-2" style="width: 35px;">
<el-col>
<el-dropdown placement="bottom-end" trigger="click">
<el-dropdown placement="bottom-end" trigger="click" v-if="data.id != -1">
<span class="el-dropdown-link tree--operation" @click.stop><i class="nz-icon nz-icon-more1"></i></span>
<el-dropdown-menu class="right-box-select-top" slot="dropdown" v-has="['asset_label_delete', 'asset_label_edit']">
<el-dropdown-item>
<el-dropdown-item class="hidden-padding">
<span @click.stop="edit(data)"><i v-has="'asset_label_edit'" class="nz-icon nz-icon-edit"></i>{{$t('overall.edit')}}</span>
</el-dropdown-item>
<el-dropdown-item>
<el-dropdown-item class="hidden-padding">
<span @click.stop="del(data)" v-has="'asset_label_delete'"><i class="nz-icon nz-icon-delete"></i>{{$t('overall.delete')}}</span>
</el-dropdown-item>
</el-dropdown-menu>

View File

@@ -65,6 +65,7 @@ export default {
historiesLength: 0
}
},
inject: ['option'],
props: {
meta2dId: {
require: true
@@ -81,10 +82,16 @@ export default {
undo () { // 撤销
getTopology(this.meta2dId).undo()
// getTopology(this.meta2dId).inactive()
if (this.option.map) {
getTopology(this.meta2dId).showMap()
}
bus.$emit('changeSelectPens', [])
},
redo () { // 重做
getTopology(this.meta2dId).redo()
if (this.option.map) {
getTopology(this.meta2dId).showMap()
}
// getTopology(this.meta2dId).inactive()
bus.$emit('changeSelectPens', [])
},

View File

@@ -137,7 +137,7 @@ export default {
getTopology(this.meta2dId).resize()
getTopology(this.meta2dId).open(data)
if (this.isChart) {
getTopology(this.meta2dId).fitView(true, 20)
getTopology(this.meta2dId).fitView(true, this.paddingTop)
} else {
getTopology(this.meta2dId).centerView()
}
@@ -366,12 +366,12 @@ export default {
this.position.top = ePosition.layerY
this.$nextTick(() => {
if ((boxWidth / 2) > ePosition.layerX) {
this.position.left = ePosition.layerX + 20
this.position.left = ePosition.layerX + 15
} else {
this.position.left = ePosition.layerX - 20 - 400
this.position.left = ePosition.layerX - 15 - 400
}
if (boxHeight / 2 > ePosition.layerY) {
this.position.top = ePosition.layerY + 50
this.position.top = ePosition.layerY + 15
} else {
this.position.top = ePosition.layerY - 300
}

View File

@@ -466,7 +466,7 @@
</el-select>
</div>
<div style="display: inline-block;width: calc(70% - 13px);margin-left: 10px">
<el-select v-model="pen.data.textLegend" size="small" filterable allow-create clearable default-first-option>
<el-select v-model="pen.data.textLegend" size="small" filterable allow-create :maxlength="64" clearable default-first-option>
<el-option v-for="item in queryValues.filter(query => (query.parent === pen.data.textParent) && query.type === 'item')" :key="item.id" :value="item.name" :label='item.name' :title="item.name" style="width: 302px"> </el-option>
</el-select>
</div>
@@ -806,7 +806,7 @@
</el-select>
</div>
<div style="display: inline-block;width: calc(70% - 13px);margin-left: 10px">
<el-select v-model="pen.data.legend" size="small" filterable allow-create clearable default-first-option>
<el-select v-model="pen.data.legend" size="small" filterable allow-create :maxlength="64" clearable default-first-option>
<el-option class="text-ellipsis" v-for="item in queryValues.filter(query => (query.parent === pen.data.parent) && query.type === 'item')" :key="item.id" :value="item.name" :label='item.name' :title="item.name" style="width: 302px;"></el-option>
</el-select>
</div>
@@ -1087,7 +1087,7 @@
:title="legend.legend"
style="width: 100%"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
clearable>
<el-option class="text-ellipsis" v-for="item in queryValues.filter(query => (query.parent === legend.parent) && query.type === 'item')" :key="item.id" :value="item.name" :label='item.name' :title='item.name' style="width: 300px"></el-option>

View File

@@ -13,7 +13,11 @@
@saveChart="saveChart"
@getNodesArr="getNodesArr"
/>
<div class="meta2d-main" :class="isChart ? 'meta2d-chart': 'meta2d-project'" @contextmenu="onContextMenu($event)" style="position: relative" :style="{border: editFlag ? '1px solid' : ''}">
<div class="meta2d-main" :class="{
'meta2d-chart-hide-header': !showHeader,
'meta2d-chart': isChart,
'meta2d-project': !isChart
}" @contextmenu="onContextMenu($event)" style="position: relative" :style="{border: editFlag ? '1px solid' : ''}">
<div v-for="(item,index) in nodesArr" v-if="!editFlag && project"
:key="index"
v-show="(item.y + offsetY - 48 > -20) && (item.x + item.width/2 + offsetX - 24 > - 20)"
@@ -127,6 +131,11 @@ import { globalStore } from '@meta2d/core'
export default {
name: 'meta2dMain',
mixins: [meta2dMainCalc, topoUtil],
provide () {
return {
option: this.option
}
},
props: {
meta2dId: {}, // 唯一id 不可重复
iconArray: {
@@ -155,6 +164,24 @@ export default {
type: Boolean,
default: true
},
paddingTop: {
type: Number,
default: 20
}
},
data () {
return {
option: {
lineName: 'curve',
lineWidth: 1,
fromArrow: '',
toArrow: 'triangleSolid',
scale: 100,
grid: false,
rule: false,
map: false
},
}
},
computed: {
},

View File

@@ -65,6 +65,9 @@ export default {
console.log(this.params.title, this.dataSource.elements.expression, this.dataSource.metric)
this.title = this.handleLegendAlias(this.params.title, this.params.title, this.dataSource.metric) || this.params.title
this.content = this.handleLegendAlias(this.params.content, this.params.content, this.dataSource.metric) || this.params.content
} else {
this.title = this.params.title
this.content = this.params.content
}
this.params.legends.forEach(item => {
const findItem = this.queryValues.find(query => query.name === item.legend && query.parent === item.parent)

View File

@@ -98,18 +98,9 @@ import { deepClone, s8 } from '@meta2d/core'
import lineData from './js/defaultPenLineData'
export default {
name: 'topologyTopTool',
inject: ['option'],
data () {
return {
option: {
lineName: 'curve',
lineWidth: 1,
fromArrow: '',
toArrow: 'triangleSolid',
scale: 100,
grid: false,
rule: false,
map: false
},
dragstartFlag: false,
drawLineFlag: false,
scaleNum: 100,
@@ -277,10 +268,12 @@ export default {
undo () { // 撤销
getTopology(this.meta2dId).undo()
// getTopology(this.meta2dId).inactive()
this.showMap()
bus.$emit('changeSelectPens', [])
},
redo () { // 重做
getTopology(this.meta2dId).redo()
this.showMap()
// getTopology(this.meta2dId).render()
// getTopology(this.meta2dId).inactive()
bus.$emit('changeSelectPens', [])

View File

@@ -15,7 +15,7 @@
</el-form-item>
<!--brand-->
<el-form-item :label='$t("asset.brand")' prop="brandId">
<el-select value-key="id" allow-create class="right-box__select" popper-class="right-box-select-top prevent-clickoutside" :filterable="true" v-model="editModel.brandId" placeholder="" size="small" id="module-box-input-project">
<el-select value-key="id" allow-create :maxlength="64" class="right-box__select" popper-class="right-box-select-top prevent-clickoutside" :filterable="true" v-model="editModel.brandId" placeholder="" size="small" id="module-box-input-project">
<el-option :id="'module-project-'+item.id" v-for="item in brandList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>

View File

@@ -75,6 +75,7 @@
popper-class="right-box-select-top right-public-box-dropdown-top"
placeholder="key"
size="mini"
:maxlength="64"
@select="handleSelect"
></el-autocomplete>
</el-form-item>

View File

@@ -40,8 +40,8 @@
</el-switch>
</el-form-item>
<el-form-item :label='$t("overall.type")' prop="type">
<el-select v-model="editAssetMeta.type" :popper-append-to-body="false" class="right-box__select" popper-class="right-box-select-top prevent-clickoutside" size="small" @change="selectType">
<el-option v-for="(item, index) in typeData" :key="index" :value="item.value" :disabled="item.disabled">
<el-select v-model="editAssetMeta.type" :popper-append-to-body="false" class="right-box__select" popper-class="right-box-select-top prevent-clickoutside right-box-select-width" size="small" @change="selectType">
<el-option v-for="(item, index) in typeData" :key="index" :value="item.value" :disabled="item.disabled" :label="item.name">
<div><i :class="item.icon"></i>&nbsp;&nbsp;<span>{{item.name}}</span></div>
</el-option>
</el-select>

View File

@@ -1025,7 +1025,7 @@
style="margin-right: 10px"
@change="change('valueMapping', index)"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option
@@ -1103,7 +1103,7 @@
size="small"
@change="change"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option

View File

@@ -195,7 +195,7 @@
size="small"
@change="change"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option

View File

@@ -776,7 +776,7 @@
style="margin-right: 10px"
@change="change('valueMapping', index)"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option
@@ -855,7 +855,7 @@
size="small"
@change="change"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option

View File

@@ -33,7 +33,7 @@
:placeholder="editIssue.type"
style="margin-right: 10px"
filterable
allow-create
allow-create :maxlength="64"
default-first-option
>
<el-option

View File

@@ -52,6 +52,7 @@
<!-- <el-input placeholder="" v-model=""></el-input>-->
<el-autocomplete
id="module-box-input-pattern"
:maxlength="64"
v-model="editModule.endpointNameTmpl"
:fetch-suggestions="querySearch"
:placeholder="$t('overall.placeHolder')"

View File

@@ -2,7 +2,7 @@
<span style="position: relative">
<el-select
id="module-box-logs-pipeline-type"
class="right-box__select"
class="right-box__select right-box__select-pipeline"
placeholder=""
popper-class="right-box-select-top prevent-clickoutside pipeline"
size="small"
@@ -22,7 +22,7 @@
</el-option>
</el-option-group>
</el-select>
<i class="nz-icon nz-icon-plus" @click="addPipelineShow" :title="$t('tip.add')"></i>
<i class="nz-icon nz-icon-plus" @click="addPipelineShow" :title="$t('tip.add')" style="top: 2px"></i>
</span>
</template>

View File

@@ -16,6 +16,7 @@
id="traffic-setting-asset"
popper-class="no-style-class"
size="small"
:maxlength="64"
v-model="assetSetting.host"
></el-autocomplete>
<el-popover @hide="popHide" @show="popShow" placement="bottom" popper-class="no-style-class" trigger="hover">
@@ -177,6 +178,7 @@
:trigger-on-focus="true"
popper-class="no-style-class"
size="mini"
:maxlength="64"
:highlight-first-item="true"
@input="ifIndexInputChange(scope.row[item.prop],scope.row,scope.$index)"
></el-autocomplete>

View File

@@ -182,7 +182,7 @@
v-model="editDialogObj.realValue"
multiple
filterable
allow-create
allow-create :maxlength="64"
default-first-option
:filter-method="dialogValueListSet"
v-loadMore="{

View File

@@ -501,6 +501,7 @@ export default {
defaultItem: {},
defaultValue: {},
inTransform: {},
isNzTransfet: {},
position: {
type: String,
default: ''
@@ -1111,7 +1112,16 @@ export default {
// 获取历史记录 数据进行处理以便循环展示
restructure_historyDate () {
if (localStorage.getItem('nz-history-' + this.where) !== undefined && localStorage.getItem('nz-history-' + this.where) !== null) {
this.history_once = JSON.parse(localStorage.getItem('nz-history-' + this.where))
const arr = JSON.parse(localStorage.getItem('nz-history-' + this.where))
arr.forEach(labelArr => {
labelArr.forEach((item)=>{
const findItem = this.searchMsg.searchLabelList.find(searchLabel => searchLabel.id == item.id)
if(findItem) {
item.name = findItem.name
}
})
})
this.history_once = arr
}
},
clear_search_list (e) {
@@ -1544,6 +1554,12 @@ export default {
const inputListDom = this.$refs['input-center-box']
if (inputListDom) {
this.$nextTick(() => {
if (this.isNzTransfet) {
const position = inputListDom.getBoundingClientRect()
this.selectDom.top = position.top + 36 + 'px'
this.selectDom.left = position.left + 'px'
return
}
if (this.inTransform) {
const position = inputListDom.getBoundingClientRect()
this.selectDom.top = position.top + 36 + 'px'

View File

@@ -95,7 +95,7 @@
<el-dropdown-menu slot="dropdown" class="right-box-select-top right-public-box-dropdown-top">
<!-- <el-dropdown-item v-has="'asset_label_edit'" :command="['edit', scope.row]"><i class="nz-icon nz-icon-edit"></i><span class="operation-dropdown-text">{{$t('overall.edit')}}</span></el-dropdown-item>-->
<el-dropdown-item v-has="'asset_label_edit'" :command="['copy', scope.row]"><i class="nz-icon nz-icon-override"></i><span class="operation-dropdown-text">{{$t('overall.duplicate')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'asset_label_delete'" :command="['delete-rel', scope.row, {forceDeleteShow:false, single:true}]"><i class="nz-icon nz-icon-delete"></i><span class="operation-dropdown-text">{{$t('overall.delete')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'asset_label_delete'" :command="['delete-rel', scope.row, {forceDeleteShow:true, single:false}]"><i class="nz-icon nz-icon-delete"></i><span class="operation-dropdown-text">{{$t('overall.delete')}}</span></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>

View File

@@ -37,9 +37,9 @@
</template>
<template slot-scope="scope" :column="item">
<span v-if="item.prop==='varType'">
<template v-if="scope.row[item.prop] == 0 ">None</template>
<template v-if="scope.row[item.prop] == 1 ">Asset</template>
<template v-if="scope.row[item.prop] == 2 ">Endpoint</template>
<template v-if="scope.row[item.prop] == 0 ">{{$t('project.topology.none')}}</template>
<template v-if="scope.row[item.prop] == 1 ">{{$t('asset.asset')}}</template>
<template v-if="scope.row[item.prop] == 2 ">{{$t('asset.endpoint')}}</template>
</span>
<template v-else-if="item.prop === 'name'">
<copy :copyData='scope.row[item.prop]' :showInfo='scope.row[item.prop]'>

View File

@@ -38,15 +38,15 @@
<template v-else-if="item.prop === 'state'">
<div v-if="scope.row[item.prop] === 1">
<span class="nz-icon nz-icon-circle ip-detail-available"></span>
{{ 'Available' }}
{{ $t('overall.ipam.available') }}
</div>
<div v-else-if="scope.row[item.prop] === 2">
<span class="nz-icon nz-icon-circle ip-detail-transient"></span>
{{ 'Transient' }}
{{ $t('overall.ipam.available') }}
</div>
<div v-else-if="scope.row[item.prop] === 3">
<span class="nz-icon nz-icon-circle ip-detail-used"></span>
{{ 'Used' }}
{{ $t('overall.ipam.used') }}
</div>
</template>
<span v-else-if="scope.row[item.prop]" :class="item.prop === 'remark'? 'el-table-remark':''">{{scope.row[item.prop]}}</span>

View File

@@ -38,7 +38,7 @@
ref="deleteButton"
:single="false"
:from="'assetMeta'"
:forceDeleteShow="false"
:forceDeleteShow="true"
:delete-objs="batchDeleteObjs"
@after="getTableData"
id="meta-msg-batch-delete"

View File

@@ -1,5 +1,5 @@
<template>
<div class="promqlInput">
<div class="promqlInput" :class=" errorMsg || appendMsg ? 'mb10' : ''">
<div class="query-row">
<!--explore页面的样式-->
<template v-if="styleType == 1">
@@ -101,10 +101,10 @@
>
</el-input>
<div v-if="errorMsg" class="append-msg error">
<div v-if="errorMsg" class="append-msg error" style="position: absolute">
<span>{{ errorMsg }}</span>
</div>
<div v-if="appendMsg" class="append-msg error">
<div v-if="appendMsg" class="append-msg error" style="position: absolute">
<span>{{ appendMsg }}</span>
</div>
</div>
@@ -273,13 +273,13 @@
class="not-fixed-height no-resize"
ref="elInput"
></el-input>
</div>
<div class="append-msg error" v-if="errorMsg">
<span>{{ errorMsg }}</span>
</div>
<div class="append-msg error" v-if="appendMsg">
<span>{{ appendMsg }}</span>
</div>
</div>
</el-col>
</el-row>
</template>

View File

@@ -281,6 +281,9 @@ export default {
event.cancelBubble = true
}
this.checked = this.checked.filter(dcId => dcId !== id)
const checkedCount = this.checked.length
this.checkAll = checkedCount === this.dataCenter.length
this.isIndeterminate = checkedCount > 0 && checkedCount < this.dataCenter.length
},
// 开始任务
startTask () {

View File

@@ -272,6 +272,9 @@ export default {
event.cancelBubble = true
}
this.checked = this.checked.filter(dcId => dcId !== id)
const checkedCount = this.checked.length
this.checkAll = checkedCount === this.dataCenter.length
this.isIndeterminate = checkedCount > 0 && checkedCount < this.dataCenter.length
},
// 开始任务
startTask () {