forked from JointCloud/JCC-RIP
fix
This commit is contained in:
parent
7882c60f4e
commit
2576a6ffc2
|
@ -559,6 +559,8 @@
|
|||
"stop": "Stop",
|
||||
"modelName": "Model Name",
|
||||
"updateTime": "Update Time",
|
||||
"inferCard": "Infer Card"
|
||||
"inferCard": "Infer Card",
|
||||
"operation": "Single Operation",
|
||||
"allOperation": "All Operation"
|
||||
}
|
||||
}
|
|
@ -559,6 +559,8 @@
|
|||
"stop": "停止",
|
||||
"modelName": "模型名称",
|
||||
"updateTime": "更新时间",
|
||||
"inferCard": "算力卡"
|
||||
"inferCard": "算力卡",
|
||||
"operation": "单独操作",
|
||||
"allOperation": "全部操作"
|
||||
}
|
||||
}
|
|
@ -16,6 +16,14 @@ export const stopDeployInstance = (params) => {
|
|||
return request({ url: '/pcm/v1/inference/stopDeployInstance', method: 'post', params })
|
||||
}
|
||||
|
||||
export const startAllInstance = (data) => {
|
||||
return request({ url: '/pcm/v1/inference/startAll', method: 'post', data: data })
|
||||
}
|
||||
|
||||
export const stopAllInstance = (data) => {
|
||||
return request({ url: '/pcm/v1/inference/stopAll', method: 'post', data: data })
|
||||
}
|
||||
|
||||
export const getDeployInstanceStat = () => {
|
||||
return request({ url: '/pcm/v1/inference/deployInstanceStat', method: 'get' })
|
||||
}
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
v-bind="$attrs"
|
||||
:max-height="height"
|
||||
:border="border"
|
||||
:highlight-current-row="listColumns.length>0 && listColumns[0].type !== 'selection'"
|
||||
:highlight-current-row="highlightCurrentRow !=='undefined' ? highlightCurrentRow : (listColumns.length>0 && listColumns[0].type !== 'selection')"
|
||||
tooltip-effect="dark"
|
||||
style="width: 100%"
|
||||
:row-key="rowKey"
|
||||
|
@ -168,6 +168,9 @@ export default {
|
|||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
highlightCurrentRow: {
|
||||
type: Boolean
|
||||
},
|
||||
pagination: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
|
|
@ -68,10 +68,11 @@
|
|||
ref="deploymentList"
|
||||
:key="$i18n.locale"
|
||||
class="multipleTable"
|
||||
:span-method="objectSpanMethod"
|
||||
:columns="columns"
|
||||
:filter-map="filterMap"
|
||||
:get-list-action="getAiTaskList"
|
||||
:default-sort="{prop: 'existTime', order: 'ascending'}"
|
||||
:table-list-data="tableData"
|
||||
:highlight-current-row="false"
|
||||
:pagination="true"
|
||||
page-key="pageNum"
|
||||
limit-key="pageSize"
|
||||
|
@ -90,7 +91,7 @@
|
|||
|
||||
<script>
|
||||
import List from '@/components/list'
|
||||
import { getAiTaskList, startDeployInstance, stopDeployInstance, getDeployInstanceStat, getTaskStat, getTrainingTaskStat } from '@/api/task/task'
|
||||
import { getAiTaskList, startDeployInstance, stopDeployInstance, getDeployInstanceStat, getTaskStat, getTrainingTaskStat, startAllInstance, stopAllInstance } from '@/api/task/task'
|
||||
import { mapGetters } from 'vuex'
|
||||
export default {
|
||||
components: { List },
|
||||
|
@ -111,7 +112,8 @@ export default {
|
|||
running: 0,
|
||||
total: 0
|
||||
},
|
||||
freshList: null
|
||||
freshList: null,
|
||||
tableData: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -145,6 +147,7 @@ export default {
|
|||
watch: {
|
||||
},
|
||||
mounted() {
|
||||
this.getDeployInstanceList()
|
||||
getDeployInstanceStat().then(e => {
|
||||
this.deployInstance = e.data
|
||||
})
|
||||
|
@ -154,27 +157,68 @@ export default {
|
|||
getTrainingTaskStat().then(e => {
|
||||
this.trainingTask = e.data
|
||||
})
|
||||
this.freshList = setInterval(() => this.freshAllList(), 5000)
|
||||
// this.freshList = setInterval(() => this.freshAllList(), 5000)
|
||||
},
|
||||
destroyed() {
|
||||
clearInterval(this.freshList)
|
||||
},
|
||||
methods: {
|
||||
getDeployInstanceList() {
|
||||
getAiTaskList({ pageNum: 1, pageSize: 10 }).then(e => {
|
||||
this.tableData = e.data.list
|
||||
})
|
||||
},
|
||||
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
if (columnIndex === 0 || columnIndex === 1 || columnIndex === 2 || columnIndex === 9) {
|
||||
// const currentValue = row[column.modelType]
|
||||
// const preRow=this.tableData[rowIndex-1]
|
||||
// const preValue = preRow ?preRow[column.modelType]: null;
|
||||
// if(currentValue === preValue){
|
||||
// return { rowspan:0,colspan:0};
|
||||
// } else {
|
||||
// let rowspan =1;
|
||||
// for (let i=rowIndex + 1;i< this.tableData.length; i++){
|
||||
// const nextRow = this.tableData[i]
|
||||
// const nextValue = nextRow[column.modelType];
|
||||
// if(nextValue === currentValue){
|
||||
// rowspan++
|
||||
// } else {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// return{rowspan,colspan:1}
|
||||
// }
|
||||
// if (columnIndex !== 0 && columnIndex !== 1) {
|
||||
// return { rowspan: 1, colspan: 1 };
|
||||
// }
|
||||
|
||||
if (
|
||||
rowIndex === 0 ||
|
||||
row.deployTaskId !== this.tableData[rowIndex - 1].deployTaskId
|
||||
) {
|
||||
const rowCount = this.tableData.filter(
|
||||
(i) => i.deployTaskId === row.deployTaskId
|
||||
).length
|
||||
return { rowspan: rowCount, colspan: 1 }
|
||||
}
|
||||
return { rowspan: 0, colspan: 0 }
|
||||
}
|
||||
},
|
||||
setColumn() {
|
||||
return [
|
||||
{ prop: 'modelName', label: this.$t('page.modelName'), sortable: true, formatter: (row) => { return <a onClick={() => this.viewDetail(row)}>{row.modelName}</a> } },
|
||||
{ prop: 'modelType', label: this.$t('page.modelType') },
|
||||
{
|
||||
prop: 'instanceName',
|
||||
label: this.$t('page.instanceName')
|
||||
},
|
||||
{ prop: 'modelName', label: this.$t('page.modelName'), formatter: (row) => { return <a onClick={() => this.viewDetail(row)}>{row.modelName}</a> } },
|
||||
{ prop: 'modelType', label: this.$t('page.modelType') },
|
||||
{
|
||||
prop: 'inferCard',
|
||||
label: this.$t('page.inferCard')
|
||||
},
|
||||
{
|
||||
prop: 'status',
|
||||
label: this.$t('page.jobStatus')
|
||||
prop: 'clusterName',
|
||||
label: this.$t('page.clusterName')
|
||||
},
|
||||
// { prop: 'strategy', label: this.$t('page.policy'), formatter: row => {
|
||||
// const res = this.dict.schedule_Strategy.filter(e => { return row.strategy.toString() === e.itemValue })[0][this.$i18n.locale === 'en' ? 'itemText' : 'description']
|
||||
|
@ -183,34 +227,40 @@ export default {
|
|||
// { prop: 'synergyStatus', label: this.$t('page.synergyStatus'), sortable: true, formatter: (row) => {
|
||||
// return <div>{!row.synergyStatus ? this.$t('page.notSynergistic') : this.$t('page.synergistic')}</div>
|
||||
// } },
|
||||
{ prop: 'adapterName', label: this.$t('page.adapter'), sortable: true },
|
||||
{ prop: 'adapterName', label: this.$t('page.adapter') },
|
||||
// { prop: 'cluster', label: this.$t('page.cluster'), sortable: true },
|
||||
{ prop: 'createTime', label: this.$t('page.createTime'), sortable: true, formatter: (row) => {
|
||||
return <div>{row.createTime && new Date(row.createTime).toLocaleString() || '-'}</div>
|
||||
} },
|
||||
{ prop: 'updateTime', label: this.$t('page.updateTime'), sortable: true, formatter: row => {
|
||||
// { prop: 'createTime', label: this.$t('page.createTime'), formatter: (row) => {
|
||||
// return <div>{row.createTime && new Date(row.createTime).toLocaleString() || '-'}</div>
|
||||
// } },
|
||||
{ prop: 'updateTime', label: this.$t('page.updateTime'), formatter: row => {
|
||||
return <div>{row.updateTime && new Date(row.updateTime).toLocaleString() || '-'}</div>
|
||||
} },
|
||||
{ prop: 'more', label: this.$t('page.more'), width: 200, formatter: (row) => {
|
||||
const txt = this.$t('page.viewDetail')
|
||||
{
|
||||
prop: 'status',
|
||||
label: this.$t('page.jobStatus')
|
||||
},
|
||||
{ prop: 'more', label: this.$t('page.operation'), formatter: (row) => {
|
||||
const start = this.$t('page.start')
|
||||
const stop = this.$t('page.stop')
|
||||
return <div>
|
||||
<el-dropdown>
|
||||
<el-button className='el-dropdown-link' size='mini' icon='el-icon-more' circle>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot='dropdown'>
|
||||
<span onClick={() => this.viewDetail(row)}> <el-dropdown-item> {txt} </el-dropdown-item> </span>
|
||||
{row.status === 'Stopped' ? <span onClick={() => this.handleDeploy(row, 1)}> <el-dropdown-item> {start} </el-dropdown-item> </span> : null}
|
||||
{row.status === 'Running' ? <span onClick={() => this.handleDeploy(row, 2)}> <el-dropdown-item> {stop} </el-dropdown-item> </span> : null}
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
{row.status === 'Stopped' ? <span onClick={() => this.handleDeploy(row, 1)}> <el-dropdown-item> {start} </el-dropdown-item> </span> : null}
|
||||
{row.status === 'Running' ? <span onClick={() => this.handleDeploy(row, 2)}> <el-dropdown-item> {stop} </el-dropdown-item> </span> : null}
|
||||
</div>
|
||||
} }
|
||||
} },
|
||||
{
|
||||
prop: 'more', label: this.$t('page.allOperation'), formatter: (row) => {
|
||||
const start = this.$t('page.start')
|
||||
const stop = this.$t('page.stop')
|
||||
return <div>
|
||||
<span style='cursor: pointer;' onClick={() => this.handleDeploy(row, 3)}>{start} </span>/
|
||||
<span style='cursor: pointer;' onClick={() => this.handleDeploy(row, 4)}>{stop}</span>
|
||||
</div>
|
||||
} }
|
||||
]
|
||||
},
|
||||
freshAllList() {
|
||||
this.$refs.deploymentList.getList()
|
||||
// this.$refs.deploymentList.getList()
|
||||
this.getDeployInstanceList()
|
||||
getDeployInstanceStat().then(e => {
|
||||
this.deployInstance = e.data
|
||||
})
|
||||
|
@ -237,17 +287,23 @@ export default {
|
|||
id: row.id,
|
||||
instanceId: row.instanceId
|
||||
}
|
||||
if (type === 1) {
|
||||
const allId = { deployTaskld: row.deployTaskId }
|
||||
|
||||
if (type === 1 || type === 3) {
|
||||
this.$confirm('<p>确定要启动么?</p>', '温馨提示', {
|
||||
dangerouslyUseHTMLString: true,
|
||||
confirmButtonText: '确认',
|
||||
center: true,
|
||||
cancelButtonText: '取消'
|
||||
}).then(() => {
|
||||
startDeployInstance(data).then(e => {
|
||||
type === 1 ? startDeployInstance(data).then(e => {
|
||||
this.$message.success(this.$t('message.success'))
|
||||
this.freshAllList()
|
||||
})
|
||||
: startAllInstance(allId).then(e => {
|
||||
this.$message.success(this.$t('message.success'))
|
||||
this.freshAllList()
|
||||
})
|
||||
})
|
||||
} else {
|
||||
this.$confirm('<p>确定要停止么?</p>', '温馨提示', {
|
||||
|
@ -256,10 +312,14 @@ export default {
|
|||
center: true,
|
||||
cancelButtonText: '取消'
|
||||
}).then(() => {
|
||||
stopDeployInstance(data).then(e => {
|
||||
type === 2 ? stopDeployInstance(data).then(e => {
|
||||
this.$message.success(this.$t('message.success'))
|
||||
this.freshAllList()
|
||||
})
|
||||
: stopAllInstance(allId).then(e => {
|
||||
this.$message.success(this.$t('message.success'))
|
||||
this.freshAllList()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ import { chatApi } from '@/api/task/task'
|
|||
export default {
|
||||
name: 'BootChart',
|
||||
props: {
|
||||
url: {
|
||||
id: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ export default {
|
|||
this.text = ''
|
||||
this.inputDisabled = true
|
||||
const chatData = {
|
||||
'apiUrl': this.url,
|
||||
'id': this.id,
|
||||
'reqData': {
|
||||
'prompt': dt.text
|
||||
}
|
||||
|
|
|
@ -67,7 +67,18 @@
|
|||
/>
|
||||
|
||||
</el-form-item>
|
||||
<bootChart v-if="formData.taskTypeDict === '12'" :url="inferUrl" />
|
||||
<el-form-item v-if="formData.taskTypeDict === '12'" :label="$t('page.selectCluster')">
|
||||
<el-select v-if="formData.subTaskInfos" v-model="inferId" style="width:30%">
|
||||
<el-option
|
||||
v-for="item in formData.subTaskInfos"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<br>
|
||||
<bootChart v-if="formData.taskTypeDict === '12'" :id="inferId" />
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
@ -110,7 +121,7 @@ export default {
|
|||
activeName: '',
|
||||
log: '',
|
||||
taskResult: [],
|
||||
inferUrl: ''
|
||||
inferId: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -155,7 +166,7 @@ export default {
|
|||
})
|
||||
}
|
||||
if (this.formData.taskTypeDict === '12') {
|
||||
this.inferUrl = this.formData.subTaskInfos[0].inferUrl
|
||||
this.inferId = this.formData.subTaskInfos[0].id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue