营养管理界面实现
This commit is contained in:
@@ -18,8 +18,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 营养列表 -->
|
<!-- 营养列表 -->
|
||||||
<el-table :data="tableData" style="width: 100%" v-loading="loading" row-key="id">
|
<el-table :data="tableData" style="width: 100%" v-loading="loading" row-key="id"
|
||||||
<el-table-column prop="id" label="ID" width="80"></el-table-column>
|
:expand-row-keys="expandRowKeys" @expand-change="handleExpandChange">
|
||||||
|
<el-table-column type="expand">
|
||||||
|
<template #default="props">
|
||||||
|
<div style="padding: 10px 20px;">
|
||||||
|
<h4>包含此营养的原料</h4>
|
||||||
|
<el-table :data="props.row.raw_materials" border>
|
||||||
|
<el-table-column prop="name" label="原料名称"></el-table-column>
|
||||||
|
<el-table-column prop="value" label="含量"></el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<!-- 移除 ID 列 -->
|
||||||
<el-table-column prop="name" label="营养名称"></el-table-column>
|
<el-table-column prop="name" label="营养名称"></el-table-column>
|
||||||
<el-table-column prop="description" label="描述"></el-table-column>
|
<el-table-column prop="description" label="描述"></el-table-column>
|
||||||
<el-table-column label="操作" width="180">
|
<el-table-column label="操作" width="180">
|
||||||
@@ -56,6 +68,7 @@ export default {
|
|||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const searchKeyword = ref('');
|
const searchKeyword = ref('');
|
||||||
const searchType = ref('name'); // 默认按营养名称搜索
|
const searchType = ref('name'); // 默认按营养名称搜索
|
||||||
|
const expandRowKeys = ref([]); // 用于控制展开行
|
||||||
|
|
||||||
const pagination = ref({
|
const pagination = ref({
|
||||||
page: 1,
|
page: 1,
|
||||||
@@ -104,6 +117,26 @@ export default {
|
|||||||
fetchNutrients();
|
fetchNutrients();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 处理行展开/折叠事件
|
||||||
|
const handleExpandChange = async (row, expandedRows) => {
|
||||||
|
const isExpanded = expandedRows.some(r => r.id === row.id);
|
||||||
|
// 优化:仅在展开时且数据未加载时才请求
|
||||||
|
if (isExpanded && (!row.raw_materials || row.raw_materials.length === 0)) {
|
||||||
|
try {
|
||||||
|
const response = await FeedApi.getNutrientById(row.id);
|
||||||
|
if (response.data) {
|
||||||
|
const index = tableData.value.findIndex(item => item.id === row.id);
|
||||||
|
if (index !== -1) {
|
||||||
|
tableData.value[index].raw_materials = response.data.raw_materials;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取营养详情失败:', error);
|
||||||
|
ElMessage.error('获取营养所含原料失败');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleEdit = (row) => {
|
const handleEdit = (row) => {
|
||||||
emit('edit', row); // 触发 edit 事件,并传递当前行数据
|
emit('edit', row); // 触发 edit 事件,并传递当前行数据
|
||||||
};
|
};
|
||||||
@@ -139,10 +172,12 @@ export default {
|
|||||||
loading,
|
loading,
|
||||||
searchKeyword,
|
searchKeyword,
|
||||||
searchType,
|
searchType,
|
||||||
|
expandRowKeys,
|
||||||
pagination,
|
pagination,
|
||||||
handleSearch,
|
handleSearch,
|
||||||
handleSizeChange,
|
handleSizeChange,
|
||||||
handleCurrentChange,
|
handleCurrentChange,
|
||||||
|
handleExpandChange,
|
||||||
handleEdit,
|
handleEdit,
|
||||||
handleDelete,
|
handleDelete,
|
||||||
fetchNutrients, // 将方法暴露出去
|
fetchNutrients, // 将方法暴露出去
|
||||||
|
|||||||
Reference in New Issue
Block a user