|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { computed, PropType } from "vue";
|
|
|
|
|
// import MoreFilled from "@iconify-icons/ant-design/ellipsis-outlined";
|
|
|
|
|
import cover from "@/assets/static/cover.png";
|
|
|
|
|
import { MoreFilled } from "@element-plus/icons-vue";
|
|
|
|
|
|
|
|
|
|
defineOptions({
|
|
|
|
|
name: "ReCard"
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
interface CardProductType {
|
|
|
|
|
type: number;
|
|
|
|
|
isSetup: boolean;
|
|
|
|
|
leader: string;
|
|
|
|
|
name: string;
|
|
|
|
|
phone: number;
|
|
|
|
|
modelNum: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
product: {
|
|
|
|
|
type: Object as PropType<CardProductType>
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const emit = defineEmits(["manage-product", "delete-item", "product-detail"]);
|
|
|
|
|
|
|
|
|
|
const handleClickManage = (product: CardProductType) => {
|
|
|
|
|
emit("manage-product", product);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleClickDelete = (product: CardProductType) => {
|
|
|
|
|
emit("delete-item", product);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleClickDetail = (product: CardProductType) => {
|
|
|
|
|
emit("product-detail", product);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const cardClass = computed(() => [
|
|
|
|
|
"list-card-item",
|
|
|
|
|
{ "list-card-item__disabled": !props.product.isSetup }
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
const cardLogoClass = computed(() => [
|
|
|
|
|
"list-card-item_detail--logo",
|
|
|
|
|
{ "list-card-item_detail--logo__disabled": !props.product.isSetup }
|
|
|
|
|
]);
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<div :class="cardClass">
|
|
|
|
|
<div
|
|
|
|
|
class="list-card-item_detail bg-bg_color"
|
|
|
|
|
@click="handleClickDetail(product)"
|
|
|
|
|
>
|
|
|
|
|
<div :class="cardLogoClass">
|
|
|
|
|
<img :src="cover" class="bg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="list-card-item_content">
|
|
|
|
|
<el-row justify="space-between">
|
|
|
|
|
<p class="list-card-item_detail--name text-text_color_primary">
|
|
|
|
|
{{ product.name }}
|
|
|
|
|
</p>
|
|
|
|
|
<div class="list-card-item_detail--operation" @click.stop>
|
|
|
|
|
<el-dropdown
|
|
|
|
|
trigger="click"
|
|
|
|
|
:disabled="false"
|
|
|
|
|
popper-class="dropDownStyle"
|
|
|
|
|
>
|
|
|
|
|
<!-- <IconifyIconOffline :icon="MoreFilled" class="text-[24px]" /> -->
|
|
|
|
|
<el-icon :size="16"><MoreFilled /></el-icon>
|
|
|
|
|
<template #dropdown>
|
|
|
|
|
<el-dropdown-menu :disabled="!product.isSetup">
|
|
|
|
|
<el-dropdown-item @click="handleClickManage(product)">
|
|
|
|
|
编辑项目
|
|
|
|
|
</el-dropdown-item>
|
|
|
|
|
<el-dropdown-item @click="handleClickDelete(product)">
|
|
|
|
|
删除项目
|
|
|
|
|
</el-dropdown-item>
|
|
|
|
|
</el-dropdown-menu>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dropdown>
|
|
|
|
|
</div>
|
|
|
|
|
</el-row>
|
|
|
|
|
<p class="list-card-item_detail--desc">
|
|
|
|
|
项目负责人:{{ product.leader }}
|
|
|
|
|
</p>
|
|
|
|
|
<p class="list-card-item_detail--desc text-text_color_regular">
|
|
|
|
|
联系方式:{{ product.phone }}
|
|
|
|
|
</p>
|
|
|
|
|
<p class="list-card-item_detail--desc text-text_color_regular">
|
|
|
|
|
模型应用数:{{ product.modelNum }}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
.list-card-item {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
margin-bottom: 12px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
border: 1px solid #e0e0e0;
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
|
|
|
|
|
&_content {
|
|
|
|
|
padding: 16px 16px 8px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&_detail {
|
|
|
|
|
flex: 1;
|
|
|
|
|
min-height: 140px;
|
|
|
|
|
|
|
|
|
|
&--logo {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
|
|
&__disabled {
|
|
|
|
|
color: #a1c4ff;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&--operation {
|
|
|
|
|
display: flex;
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
|
|
&--tag {
|
|
|
|
|
border: 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&--name {
|
|
|
|
|
margin-bottom: 8px;
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
// font-family: "PingFang SC";
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&--desc {
|
|
|
|
|
display: -webkit-box;
|
|
|
|
|
margin-bottom: 8px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
line-height: 22px;
|
|
|
|
|
// font-family: "Roboto";
|
|
|
|
|
color: #666;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// &__disabled {
|
|
|
|
|
// .list-card-item_detail--name,
|
|
|
|
|
// .list-card-item_detail--desc {
|
|
|
|
|
// // color: var(--el-text-color-disabled);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// .list-card-item_detail--operation--tag {
|
|
|
|
|
// // color: #bababa;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
</style>
|