要求运用ant-design-vue的抽屉组件完成文件图片的页面和要求
时间: 2024-12-11 21:29:18 浏览: 50
为了实现一个展示表具详情页的Ant Design Vue应用,可以按照以下步骤操作:
页面结构设计
1. 头部信息区
- 使用
a-row
和a-col
组件来布局头部的信息显示区域。 - 显示表具编号、表具类型、厂商、所属仓库、在库状态、入库日期和表具状态等关键信息。
2. 标签页
- 使用
a-tabs
组件来分标签页显示基本信息、生命周期、关联用户,默认显示基本信息。
3. 基本信息
- 如果没有数据则显示“-”。
- 包含多个输入框或文本框,用于显示批次、生产日期、有效期等详细信息。
- 特别是对于出库日期和安装日期,如果没有数据也可以显示“-”。
4. 生命周期
- 使用表格
a-table
来展示生命周期的各个事件。 - 表格的筛选功能可以通过
a-select
实现,支持按事件类型进行筛选。 - 列表显示操作时间、事件类型、事件日期、操作人/部门、说明以及表具状态。
- 支持导出为Excel的功能,点击按钮后执行导出逻辑。
5. 关联用户
- 展示与该表具相关的所有用户的列表。
- 包括操作时间、户号、户名、地址和表具状态。
示例代码
以下是一个简单的实现方案:
<template>
<a-drawer :visible="visible" @close="onClose" title="表具详情">
<!-- 头部信息 -->
<a-row type="flex" align="middle" justify="space-between">
<a-col span="4">
<p><strong>表具编号:</strong> {{ meterInfo.meterNumber }}</p>
<p><strong>表具类型:</strong> {{ meterInfo.meterType.vendor }}</p>
</a-col>
<a-col span="4">
<p><strong>厂商:</strong> {{ meterInfo.vendor.name }}</p>
<p><strong>所属仓库:</strong> {{ meterInfo.warehouseName }}</p>
</a-col>
<a-col span="4">
<p><strong>在库状态:</strong> {{ meterInfo.inventoryStatus }}</p>
<p><strong>入库日期:</strong> {{ meterInfo.entryDate }}</p>
</a-col>
<a-col span="4">
<p><strong>表具状态:</strong> {{ meterInfo.status }}</p>
</a-col>
</a-row>
<!-- 标签页 -->
<a-tabs default-active-key="1">
<a-tab-pane key="1" tab="基本信息">
<basic-info :meterInfo="meterInfo" />
</a-tab-pane>
<a-tab-pane key="2" tab="生命周期">
<life-cycle :lifecycleData="lifecycleData" @exportExcel="exportExcel" />
</a-tab-pane>
<a-tab-pane key="3" tab="关联用户">
<associated-users :userData="userData" />
</a-tabpane>
</a-tabs>
</a-drawer>
</template>
<script>
import { defineComponent, ref } from 'vue';
import BasicInfo from './components/BasicInfo.vue';
import LifeCycle from './components/LifeCycle.vue';
import AssociatedUsers from './components/AssociatedUsers.vue';
export default defineComponent({
components: {
BasicInfo,
LifeCycle,
AssociatedUsers,
},
props: {
visible: Boolean,
},
emits: ['update:visible'],
setup(props, { emit }) {
const meterInfo = ref({
meterNumber: '123456',
meterType: { vendor: '华能' },
vendor: { name: '厂商A' },
warehouseName: '仓库1',
inventoryStatus: '在库',
entryDate: '2023-01-01',
status: '正常'
});
const lifecycleData = ref([
// 数据示例
]);
const userData = ref([
// 数据示例
]);
const onClose = () => {
emit('update:visible', false);
};
const exportExcel = () => {
// 导出逻辑
console.log('导出Excel');
};
return {
meterInfo,
lifecycleData,
userData,
onClose,
exportExcel,
};
},
});
</script>
子组件定义
BasicInfo.vue
<template>
<a-form>
<a-form-item label="批次">{{ form.batchNumber || '-' }}</a-form-item>
<a-form-item label="生产日期">{{ form.manufactureDate || '-' }}</a-form-item>
<a-form-item label="有效期">{{ form.validityYears || '-' }} 年</a-form-item>
<!-- 其他字段 -->
</a-form>
</template>
<script>
import { defineComponent, toRefs } from 'vue';
export default defineComponent({
props: {
meterInfo: Object,
},
setup(props) {
const { batchNumber, manufactureDate, validityYears } = toRefs(props.meterInfo);
return {
batchNumber,
manufactureDate,
validityYears,
};
},
});
</script>
LifeCycle.vue
<template>
<div>
<a-row>
<a-col>
<a-select v-model="eventFilter" placeholder="请选择事件类型">
<a-select-option value="all">全部</a-select-option>
<a-select-option value="newEntry">新表入库</a-select-option>
<!-- 其他选项 -->
</a-select>
</a-col>
</a-row>
<a-table :columns="columns" :data-source="filteredLifecycleData" bordered>
<template #action="{ record }">
<a-button type="primary" size="small" @click="exportRecord(record)">
导出
</a-button>
</template>
</a-table>
<a-button type="primary" block @click="exportExcel">
导出为Excel
</a-button>
</div>
</template>
<script>
import { defineComponent, computed, ref, toRefs } from 'vue';
const columns = [
{ title: '操作时间', dataIndex: 'operationTime', key: 'operationTime' },
{ title: '事件类型', dataIndex: 'eventType', key: 'eventType' },
{ title: '事件日期', dataIndex: 'eventDate', key: 'eventDate' },
{ title: '操作人/部门', dataIndex: 'operatorDepartment', key: 'operatorDepartment' },
{ title: '说明', dataIndex: 'description', key: 'description' },
{ title: '表具状态', dataIndex: 'meterStatus', key: 'meterStatus' },
];
export default defineComponent({
props: {
lifecycleData: Array,
},
setup(props, { emit }) {
const eventFilter = ref('');
const filteredLifecycleData = computed(() =>
eventFilter.value === 'all'
? props.lifecycleData
: props.lifecycleData.filter(item => item.eventType === eventFilter.value)
);
const exportRecord = (record) => {
console.log('导出单个记录', record);
};
const exportExcel = () => {
emit('exportExcel');
};
return {
columns,
eventFilter,
filteredLifecycleData,
exportRecord,
exportExcel,
};
},
});
</script>
AssociatedUsers.vue
<template>
<a-table :columns="columns" :data-source="userData" bordered>
</a-table>
</template>
<script>
import { defineComponent, toRefs } from 'vue';
const columns = [
{ title: '操作时间', dataIndex: 'operationTime', key: 'operationTime' },
{ title: '户号', dataIndex: 'accountNumber', key: 'accountNumber' },
{ title: '户名', dataIndex: 'accountName', key: 'accountName' },
{ title: '地址', dataIndex: 'address', key: 'address' },
{ title: '表具状态', dataIndex: 'meterStatus', key: 'meterStatus' },
];
export default defineComponent({
props: {
userData: Array,
},
setup(props) {
const { userData } = toRefs(props);
return {
columns,
userData,
};
},
});
</script>
总结
上述代码实现了一个完整的Ant Design Vue表具详情页,包含了头部信息、多标签页切换、生命周期表格及其筛选导出功能、以及关联用户的列表展示。每个组件都有具体的职责,并且通过 Props 进行数据传递,结构清晰明了。你可以根据实际需求进一步优化和扩展这些组件。
相关推荐


















