feat: 新增多项功能并优化多个页面交互
1. 新增批量修改钢卷合同接口与合同批量转单功能 2. 优化KLPTable多选列默认位置与物料预警查询交互 3. 升级CoilTable支持多选与自定义操作栏 4. 新增菜单导出功能 5. 优化钢卷面板列宽与操作按钮文案
This commit is contained in:
@@ -45,6 +45,15 @@
|
||||
@click="toggleExpandAll"
|
||||
>展开/折叠</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
@@ -278,6 +287,7 @@ import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/me
|
||||
import Treeselect from "@riophae/vue-treeselect";
|
||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
||||
import IconSelect from "@/components/IconSelect";
|
||||
import * as XLSX from 'xlsx';
|
||||
|
||||
export default {
|
||||
name: "Menu",
|
||||
@@ -446,6 +456,71 @@ export default {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出菜单(仅可见且未停用的菜单,父节点被过滤则子节点一并排除) */
|
||||
handleExport() {
|
||||
// 菜单类型映射
|
||||
const menuTypeMap = { M: '目录', C: '菜单', F: '按钮' };
|
||||
|
||||
// 递归过滤:只保留 visible='0'(显示) && status='0'(正常) 的节点
|
||||
const filterTree = (nodes) => {
|
||||
return nodes
|
||||
.filter(node => node.visible === '0' && node.status === '0')
|
||||
.map(node => ({
|
||||
...node,
|
||||
children: node.children ? filterTree(node.children) : []
|
||||
}));
|
||||
};
|
||||
|
||||
// 递归展平为一维数组,缩进体现层级
|
||||
const flattenTree = (nodes, level = 0, result = []) => {
|
||||
nodes.forEach(node => {
|
||||
const prefix = '\u3000'.repeat(level); // 全角空格缩进
|
||||
result.push({
|
||||
menuName: prefix + node.menuName,
|
||||
menuType: menuTypeMap[node.menuType] || node.menuType,
|
||||
icon: node.icon || '',
|
||||
orderNum: node.orderNum,
|
||||
perms: node.perms || '',
|
||||
component: node.component || '',
|
||||
status: '正常',
|
||||
createTime: node.createTime || ''
|
||||
});
|
||||
if (node.children && node.children.length > 0) {
|
||||
flattenTree(node.children, level + 1, result);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
const filtered = filterTree(this.menuList);
|
||||
const flatData = flattenTree(filtered);
|
||||
|
||||
if (flatData.length === 0) {
|
||||
this.$modal.msgWarning('没有可导出的菜单数据');
|
||||
return;
|
||||
}
|
||||
|
||||
// 构建 Excel 数据
|
||||
const wsData = [
|
||||
['菜单名称', '菜单类型', '图标', '排序', '权限标识', '组件路径', '状态', '创建时间'],
|
||||
...flatData.map(item => [
|
||||
item.menuName, item.menuType, item.icon,
|
||||
item.orderNum, item.perms, item.component,
|
||||
item.status, item.createTime
|
||||
])
|
||||
];
|
||||
|
||||
const ws = XLSX.utils.aoa_to_sheet(wsData);
|
||||
ws['!cols'] = [
|
||||
{ wch: 30 }, { wch: 10 }, { wch: 12 },
|
||||
{ wch: 8 }, { wch: 25 }, { wch: 30 },
|
||||
{ wch: 8 }, { wch: 20 }
|
||||
];
|
||||
|
||||
const wb = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(wb, ws, '菜单列表');
|
||||
XLSX.writeFile(wb, '菜单列表.xlsx');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user