文章目录
- 一、代码展示
- 二、代码解读
- 三、结果展示
一、代码展示
<template>
<div class="container">
<h1>文件列表</h1>
<div class="header-actions">
<a-input placeholder="输入关键词搜索" v-model:value="search" style="width: 200px;" />
<a-button type="primary" @click="fetchResource">搜索</a-button>
<a-button type="primary" @click="showUploadModal">上传文件</a-button>
</div>
<div class="table-container" >
<a-table :columns="columns" :dataSource="dataSource" :pagination="pagination" :current="pagination.current" :pageSize="pagination.pageSize" @change="handleTableChange">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'operation'">
<a @click="copyLink(record.fileLink)">复制链接</a>
</template>
</template>
</a-table>
</div>
<a-modal v-model:visible="uploadModalVisible" title="上传文件" @ok="handleUpload" @cancel="closeUploadModal">
<a-form :form="uploadForm" layout="vertical">
<a-form-item label="文件名" required>
<a-input v-model:value="uploadForm.title" />
</a-form-item>
<a-form-item label="文件链接" required>
<a-input v-model:value="uploadForm.source" />
</a-form-item>
<a-form-item label="文件类型(阿里、百度等)" required>
<a-input v-model:value="uploadForm.type" />
</a-form-item>
<a-form-item label="备注" >
<a-input v-model:value="uploadForm.remark" />
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script setup>
略
</script>
<style scoped >
.table-container {
min-height: 80vh;
}
.container {
margin-bottom: 20px;
margin-top: 80px;
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1 {
margin-bottom: 10px;
}
.header-actions {
display: flex;
gap: 10px;
margin-bottom: 20px;
}
a-input {
width: 200px;
}
.table-container {
margin-top: 20px;
}
</style>
二、代码解读
<template>
部分是Vue文件的模板部分,用于定义页面的结构和布局。在这段代码中,<template>
主要包括了页面的 HTML 结构和 Ant Design Vue 组件的使用。下面是对 <template>
部分的详细解释:
-
<div class="container">
: 整个页面的容器,用于包裹所有内容,设置了一些样式,如边框圆角和阴影,使页面看起来更加美观。 -
<h1>
: 页面标题,显示"文件列表",用于标识页面的主题。 -
<div class="header-actions">
: 头部操作区域,包括搜索框、搜索按钮和上传文件按钮。这里使用了 Ant Design Vue 的样式和组件。-
<a-input>
: Ant Design Vue 中的输入框组件,用于输入搜索关键词。通过v-model:value="search"
进行双向绑定,将输入框的值与search
变量关联。 -
<a-button>
: Ant Design Vue 中的按钮组件,包括搜索和上传文件两个按钮。使用@click
监听按钮点击事件,分别调用fetchResource
和showUploadModal
方法。
-
-
<a-table>
: Ant Design Vue 中的表格组件,用于展示文件列表。通过:columns
、:dataSource
、:pagination
等属性将数据和配置传递给表格组件。-
:columns="columns"
: 指定表格的列配置,定义了文件名、来源、类型、上传者、上传时间等列。 -
:dataSource="dataSource"
: 表格的数据源,使用了 Vue 的响应式引用dataSource
。 -
:pagination="pagination"
: 表格分页的配置,包括是否显示大小调整器、是否显示快速跳转、每页显示数量等。 -
@change="handleTableChange"
: 监听表格分页、排序、筛选等变化,触发handleTableChange
方法进行处理。 -
<template #bodyCell="{ column, record }">
: 自定义表格单元格内容,在操作列显示"复制链接"的链接,通过调用copyLink
方法实现。
-
-
<a-modal>
: 弹出的上传文件的模态框,包含文件名、文件链接、文件类型等输入框。通过v-model:visible
控制模态框的显示和隐藏,使用@ok
和@cancel
监听确定和取消按钮的点击事件,分别调用handleUpload
和closeUploadModal
方法。-
<a-form>
: Ant Design Vue 中的表单组件,包含文件名、文件链接、文件类型、备注等表单项。-
<a-form-item>
: 表单项,包括文件名、文件链接、文件类型和备注,其中文件名、文件链接和文件类型为必填项。 -
<a-input>
: 输入框组件,用于输入文件名、文件链接、文件类型和备注,通过v-model:value
进行双向绑定。
-
-
总体而言,<template>
部分定义了页面的结构,包括标题、搜索框、按钮、文件列表和上传文件模态框等组件,同时使用了 Ant Design Vue 提供的组件来实现样式和交互效果。