New file |
| | |
| | | <template> |
| | | <div class="list-wrap"> |
| | | <a-typography-title class="block-title" :heading="6"> |
| | | {{ $t('cardList.tab.title.content') }} |
| | | </a-typography-title> |
| | | <a-button class="add-button" type="primary" @click="addCard">添加</a-button> |
| | | |
| | | <a-row class="list-row" :gutter="24"> |
| | | <a-col |
| | | :xs="12" |
| | | :sm="12" |
| | | :md="12" |
| | | :lg="6" |
| | | :xl="6" |
| | | :xxl="6" |
| | | class="list-col" |
| | | > |
| | | <div class="card-wrap empty-wrap"> |
| | | <a-card :bordered="false" hoverable> |
| | | <a-result :status="null" title="Xinference模型是个很厉害的模型"> |
| | | <template #icon> |
| | | <icon-plus style="font-size: 20px" /> |
| | | </template> |
| | | </a-result> |
| | | </a-card> |
| | | </div> |
| | | </a-col> |
| | | <a-col |
| | | v-for="item in renderData" |
| | | :key="item.id" |
| | | class="list-col" |
| | | :xs="12" |
| | | :sm="12" |
| | | :md="12" |
| | | :lg="6" |
| | | :xl="6" |
| | | :xxl="6" |
| | | > |
| | | <CardWrap |
| | | :loading="loading" |
| | | :title="item.title" |
| | | :description="item.description" |
| | | :default-value="item.enable" |
| | | :action-type="item.actionType" |
| | | :icon="item.icon" |
| | | :open-txt="$t('cardList.content.inspection')" |
| | | :close-txt="$t('cardList.content.delete')" |
| | | :show-tag="false" |
| | | > |
| | | <a-descriptions |
| | | style="margin-top: 16px" |
| | | :data="item.data" |
| | | layout="inline-horizontal" |
| | | :column="2" |
| | | /> |
| | | <template #skeleton> |
| | | <a-skeleton :animation="true"> |
| | | <a-skeleton-line |
| | | :widths="['50%', '50%', '100%', '40%']" |
| | | :rows="4" |
| | | /> |
| | | <a-skeleton-line :widths="['40%']" :rows="1" /> |
| | | </a-skeleton> |
| | | </template> |
| | | </CardWrap> |
| | | </a-col> |
| | | </a-row> |
| | | |
| | | <a-modal v-model:visible="visible" @Ok="handleOk" @cancel="handleCancel"> |
| | | <template #title> 添加LLM </template> |
| | | <a-form |
| | | ref="formRef" |
| | | :size="form.size" |
| | | :model="form" |
| | | auto-label-width |
| | | @submit="handleSubmit" |
| | | > |
| | | <a-form-item |
| | | field="type" |
| | | label="模型类型" |
| | | :rules="[{ required: true, message: '不能为空' }]" |
| | | :validate-trigger="['change', 'input']" |
| | | > |
| | | <a-select |
| | | v-model="form.type" |
| | | placeholder="请选择模型类型" |
| | | allow-clear |
| | | > |
| | | <a-option>chartGpt 4</a-option> |
| | | <a-option>chartGpt o</a-option> |
| | | <a-option>LLM</a-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | |
| | | <a-form-item |
| | | field="UID" |
| | | label="模型UID" |
| | | :rules="[ |
| | | { required: true, message: '不能为空' }, |
| | | { minLength: 1, message: '至少一个字符' }, |
| | | ]" |
| | | :validate-trigger="['change', 'input']" |
| | | > |
| | | <a-input v-model="form.UID" placeholder="请输入模型UID" /> |
| | | </a-form-item> |
| | | |
| | | <a-form-item |
| | | field="Url" |
| | | label="基础Url" |
| | | :rules="[ |
| | | { required: true, message: '不能为空' }, |
| | | { minLength: 1, message: '至少一个字符' }, |
| | | ]" |
| | | :validate-trigger="['change', 'input']" |
| | | > |
| | | <a-input v-model="form.Url" placeholder="请输入基础Url" /> |
| | | </a-form-item> |
| | | |
| | | <a-form-item |
| | | field="vision" |
| | | label="是否支持 vision" |
| | | :validate-trigger="['change', 'input']" |
| | | > |
| | | <a-switch v-model="form.vision" /> |
| | | </a-form-item> |
| | | </a-form> |
| | | </a-modal> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { nextTick, reactive, ref } from 'vue'; |
| | | import { queryInspectionList, ServiceRecord } from '@/api/list'; |
| | | import useRequest from '@/hooks/request'; |
| | | import CardWrap from './card-wrap.vue'; |
| | | |
| | | const defaultValue: ServiceRecord[] = new Array(3).fill({}); |
| | | const { loading, response: renderData } = useRequest<ServiceRecord[]>( |
| | | queryInspectionList, |
| | | defaultValue |
| | | ); |
| | | const visible = ref(false); |
| | | const addCard = () => { |
| | | visible.value = true; |
| | | }; |
| | | |
| | | const formRef = ref(null); |
| | | const form = reactive({ |
| | | size: 'medium', |
| | | type: '', |
| | | UID: '', |
| | | Url: '', |
| | | vision: false, |
| | | }); |
| | | const handleOk = () => { |
| | | formRef.value.validate().then((res) => { |
| | | if (res) { |
| | | return; |
| | | } |
| | | renderData.value = renderData.value.concat({ |
| | | id: renderData.value.length + 1, |
| | | title: form.type, |
| | | description: form.Url, |
| | | icon: 'icon-setting', |
| | | actionType: 'inspection', |
| | | enable: true, |
| | | data: [ |
| | | { |
| | | label: '待质检数', |
| | | value: '120', |
| | | }, |
| | | { |
| | | label: '积压时长', |
| | | value: '60s', |
| | | }, |
| | | { |
| | | label: '待抽检数', |
| | | value: '0', |
| | | }, |
| | | ], |
| | | }); |
| | | visible.value = false; |
| | | }); |
| | | nextTick(() => { |
| | | visible.value = true; |
| | | }); |
| | | return false; |
| | | }; |
| | | const handleCancel = () => { |
| | | formRef.value.resetFields(); |
| | | visible.value = false; |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .card-wrap { |
| | | height: 100%; |
| | | transition: all 0.3s; |
| | | border: 1px solid var(--color-neutral-3); |
| | | &:hover { |
| | | transform: translateY(-4px); |
| | | } |
| | | :deep(.arco-card-meta-description) { |
| | | color: rgb(var(--gray-6)); |
| | | .arco-descriptions-item-label-inline { |
| | | font-weight: normal; |
| | | font-size: 12px; |
| | | color: rgb(var(--gray-6)); |
| | | } |
| | | .arco-descriptions-item-value-inline { |
| | | color: rgb(var(--gray-8)); |
| | | } |
| | | } |
| | | } |
| | | .empty-wrap { |
| | | height: 200px; |
| | | border-radius: 4px; |
| | | :deep(.arco-card) { |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border-radius: 4px; |
| | | .arco-result-title { |
| | | color: rgb(var(--gray-6)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list-wrap { |
| | | position: relative; |
| | | |
| | | ::v-deep .block-title { |
| | | height: 36px; |
| | | lin-height: 36px; |
| | | } |
| | | |
| | | .add-button { |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 0; |
| | | } |
| | | } |
| | | </style> |