| | |
| | | * @Author: 胡思旗 931347610@qq.com |
| | | * @Date: 2023-08-28 15:23:47 |
| | | * @LastEditors: husq 931347610@qq.com |
| | | * @LastEditTime: 2023-09-01 17:29:16 |
| | | * @LastEditTime: 2023-09-05 10:17:17 |
| | | * @FilePath: \Cloud-API-Demo-Web\src\pages\page-web\projects\project_list\list_page\components\ProjectList.vue |
| | | * @Description:项目列表组件 |
| | | * |
| | | * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. |
| | | --> |
| | | <template> |
| | | <div class="project-box"> |
| | | <div class="project-card" v-for="item in cardList" :key="item.id"> |
| | | <div class="project-left"> |
| | | <div class="head mb10 flex-display flex-align-center flex-justify-between"> |
| | | <div class="head-left flex-display flex-align-center"> |
| | | <a-tag color="#87d068">{{ status[item.projectStatus] }}</a-tag> |
| | | <span class="head-text">{{ item.projectName }}</span> |
| | | </div> |
| | | <div class="head-right"> |
| | | <a-dropdown> |
| | | <dash-outlined /> |
| | | <template #overlay> |
| | | <a-menu> |
| | | <a-menu-item> |
| | | <a @click="goEdit(item)">编辑</a> |
| | | </a-menu-item> |
| | | <a-menu-item> |
| | | <a @click="editStatus(item)">归档</a> |
| | | </a-menu-item> |
| | | <a-menu-item> |
| | | <a @click="deleteItem(item)">删除</a> |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | | </a-dropdown> |
| | | </div> |
| | | </div> |
| | | <div class="wrapper"> |
| | | <div class="introduction mb10">{{ item.projectIntro || '暂无简介' }}</div> |
| | | <div class="time mb5">创建时间: {{ item.createTime }}</div> |
| | | <div class="manager mb5 flex-display flex-align-center"> |
| | | <user-outlined /> |
| | | <!-- {{item.memberList[0].userId}} --> |
| | | <div class="user_name ml10">测试角色</div> |
| | | </div> |
| | | </div> |
| | | <div class="project-box flex-common"> |
| | | <a-spin :spinning="model" style="width: 100%;"> |
| | | <div class="project-card" v-for="item in cardList" :key="item.id"> |
| | | <div class="project-left"> |
| | | <div class="head mb10 flex-display flex-align-center flex-justify-between"> |
| | | <div class="head-left flex-display flex-align-center"> |
| | | <a-tag color="#87d068">{{ status[item.projectStatus] }}</a-tag> |
| | | <span class="head-text">{{ item.projectName }}</span> |
| | | </div> |
| | | <div> |
| | | <div class="enter"> |
| | | <export-outlined /> |
| | | </div> |
| | | <div class="head-right"> |
| | | <a-dropdown> |
| | | <dash-outlined /> |
| | | <template #overlay> |
| | | <a-menu> |
| | | <a-menu-item> |
| | | <a @click="goEdit(item)">编辑</a> |
| | | </a-menu-item> |
| | | <a-menu-item> |
| | | <a @click="editStatus(item)">归档</a> |
| | | </a-menu-item> |
| | | <a-menu-item> |
| | | <a @click="deleteItem(item)">删除</a> |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | | </a-dropdown> |
| | | </div> |
| | | </div> |
| | | <div class="wrapper"> |
| | | <div class="introduction mb10">{{ item.projectIntro || '暂无简介' }}</div> |
| | | <div class="time mb5">创建时间: {{ item.createTime }}</div> |
| | | <div class="manager mb5 flex-display flex-align-center"> |
| | | <user-outlined /> |
| | | <!-- {{item.memberList[0].userId}} --> |
| | | <div class="user_name ml10">测试角色</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="enter"> |
| | | <export-outlined /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </a-spin> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | |
| | | import { del, edit } from '/@/api/project-page' |
| | | import { Modal, message } from 'ant-design-vue' |
| | | const router = useRouter() |
| | | const emit = defineEmits(['refreshList']) |
| | | const emit = defineEmits(['refreshList', 'update:modelValue']) |
| | | const props = defineProps({ |
| | | cardList: { |
| | | type: Array as () => projectCard[], |
| | | required: true, |
| | | }, |
| | | modelValue: [String, Number, Boolean] |
| | | }) |
| | | |
| | | const model = computed({ |
| | | get () { |
| | | return props.modelValue |
| | | }, |
| | | set (val) { |
| | | emit('update:modelValue', val) |
| | | } |
| | | }) |
| | | const spinning = ref<boolean>(true) |
| | | // 删除方法 |
| | | const deleteItem = (item:projectCard) => { |
| | | const deleteItem = (item: projectCard) => { |
| | | Modal.confirm({ |
| | | title: () => '确认删除?', |
| | | icon: () => createVNode(ExclamationCircleOutlined), |
| | |
| | | }) |
| | | } |
| | | |
| | | const editStatus = (item:projectCard) => { |
| | | const editStatus = (item: projectCard) => { |
| | | Modal.confirm({ |
| | | title: () => '确认归档?', |
| | | icon: () => createVNode(ExclamationCircleOutlined), |
| | |
| | | }) |
| | | } |
| | | |
| | | const goEdit = (item:any) => { |
| | | console.log(item) |
| | | const goEdit = (item: any) => { |
| | | router.push({ |
| | | name: ERouterName.EDIT_PROJECT, |
| | | query: { id: item.id } |
| | |
| | | |
| | | <style scoped lang="scss"> |
| | | .project-box { |
| | | .project-card { |
| | | cursor: pointer; |
| | | width: 100%; |
| | | min-height: 120px; |
| | | background: #232323; |
| | | user-select: none; |
| | | border-bottom: 1px solid #4f4f4f; |
| | | display: flex; |
| | | } |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | .project-left { |
| | | padding: 16px; |
| | | flex: 1; |
| | | width: calc(100% - 48px); |
| | | box-sizing: border-box; |
| | | :deep(.ant-spin-nested-loading) { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .head { |
| | | .head-left { |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | } |
| | | .project-card { |
| | | cursor: pointer; |
| | | width: 100%; |
| | | min-height: 120px; |
| | | background: #232323; |
| | | user-select: none; |
| | | border-bottom: 1px solid #4f4f4f; |
| | | display: flex; |
| | | } |
| | | |
| | | .enter { |
| | | background: #303030; |
| | | width: 48px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | color: #fff; |
| | | height: 100%; |
| | | cursor: pointer; |
| | | .project-left { |
| | | padding: 16px; |
| | | flex: 1; |
| | | width: calc(100% - 48px); |
| | | box-sizing: border-box; |
| | | |
| | | .head { |
| | | .head-left { |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .enter { |
| | | background: #303030; |
| | | width: 48px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | color: #fff; |
| | | height: 100%; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | </style> |