You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
3.5 KiB

<script lang="ts" setup>
import { Card } from 'ant-design-vue'
import type { PropType } from 'vue'
import { ref, watch } from 'vue'
import type { ModelItem } from './data'
import CreateModel from './CreateModel.vue'
import Icon from '@/components/Icon/index'
import { modelCardListApi } from '@/api/alert/model/models'
import type { ModelQueryParams } from '@/api/alert/model/model/models'
import { useGo } from '@/hooks/web/usePage'
import { useDrawer } from '@/components/Drawer'
const props = defineProps({
loading: {
type: Boolean,
},
selectData: {
type: Object as PropType<Record<string, any> | null | undefined>,
},
systemId: {
type: Number,
},
})
const [registerDraw, { openDrawer }] = useDrawer()
// 点击模型卡片跳转训练页面
const go = useGo()
function changeModel(id, version?) {
const versionParam = version ? `?version=${encodeURIComponent(version)}` : ''
go(`/model/train/${id}${versionParam}`)
}
const modelCardList = ref<Array<ModelItem>>([])
const colors = ['#8dc63f', '#dbb09e']
const statusStr = ['未下装', '已下装']
const icons = ['material-symbols:lock-open-right-outline', 'material-symbols:lock-outline']
watch(
() => props.selectData,
async (value) => {
const queryParams: ModelQueryParams = {
unitId: value?.unit,
typeId: value?.type,
systemId: value?.system,
name: value?.name,
}
const modelList = await modelCardListApi(queryParams)
if (!modelList) {
modelCardList.value = []
return
}
const cardList: ModelItem[] = []
for (const modelCard of modelList) {
// modelCard.status = 0;
const card: ModelItem = {
id: modelCard.id,
title: modelCard.name,
version: modelCard.version,
icon: icons[modelCard.status],
value: 1,
total: 1,
color: colors[modelCard.status],
status: statusStr[modelCard.status],
creator: modelCard.creator,
createTime: modelCard.createTime,
description: modelCard.name,
headStyle: {
backgroundColor: colors[modelCard.status],
fontSize: '20px',
},
bodyStyle: {
borderColor: colors[modelCard.status],
borderWidth: '1px',
},
}
cardList.push(card)
}
modelCardList.value = cardList
},
)
</script>
<template>
<div class="enter-y">
<div class="grid gap-4 md:grid-cols-4">
<template v-for="item in modelCardList" :key="item.title">
<Card
size="small"
:loading="loading"
:title="item.title"
:hoverable="true"
:body-style="item.bodyStyle"
:head-style="item.headStyle"
@click="changeModel(item.id, item.version)"
>
<template #extra>
<Icon :icon="item.icon" :size="30" color="white" />
</template>
<div class="grid p-2 px-5 md:grid-cols-3">
<span>创建人: {{ item.creator }}</span><span>创建时间: {{ item.createTime }}</span><span>模型状态: {{ item.status }}</span>
</div>
</Card>
</template>
<Card v-show="systemId != null" size="small" class="icon-card" :hoverable="true" @click="openDrawer(true)">
<Icon icon="ic:sharp-add" :size="80" color="#a7a9a7" />
</Card>
</div>
<CreateModel :system-id="systemId" @register="registerDraw" />
</div>
</template>
<style>
.icon-card {
display: flex;
align-items: center;
justify-content: center;
background-color: #f2f2f2;
}
</style>