feat: 完成履约管理模块全量功能迭代

本次迭代包含以下核心功能:
1. 新增履约时效总览可视化页面,支持多维度数据统计
2. 实现物料/客户/供应商的Excel批量导入导出功能
3. 新增订单批量结单功能,优化结单流程校验
4. 完善日志配置,新增文件日志落地
5. 修复分类查询逻辑,优化多租户数据隔离
6. 新增甲方履约结单管理页面与权限控制
7. 重构部分Mapper与Service接口,增强代码健壮性
This commit is contained in:
2026-06-18 11:10:36 +08:00
parent 7a8e4297e0
commit 7b71822a32
37 changed files with 1759 additions and 66 deletions

View File

@@ -60,6 +60,12 @@
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['bid:material:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['bid:material:export']">导出</el-button>
</el-col>
<el-col :span="1.5" v-if="currentCategoryName">
<el-tag size="medium" closable @close="clearCategoryFilter" type="warning">
当前分类: {{ currentCategoryName }}
@@ -303,6 +309,16 @@
<el-button type="primary" @click="submitCategoryForm">确定</el-button>
</div>
</el-dialog>
<!-- Excel 导入对话框 -->
<excel-import-dialog
ref="importRef"
title="物料导入"
action="/bid/material/importData"
template-action="/bid/material/importTemplate"
template-file-name="material_template"
update-support-label="是否更新已经存在的物料数据"
@success="getList" />
</div>
</template>
@@ -310,9 +326,11 @@
import { listMaterial, getMaterial, addMaterial, updateMaterial, delMaterial, listManufacturer } from "@/api/bid/material";
import { getCategoryList, addCategory, updateCategory, delCategory } from "@/api/bid/category";
import request from '@/utils/request'
import ExcelImportDialog from "@/components/ExcelImportDialog"
export default {
name: "Material",
components: { ExcelImportDialog },
data() {
return {
loading: false, multiple: true, total: 0, materialList: [],
@@ -409,6 +427,10 @@ export default {
handleAdd() {
this.reset();
this.perfParams = [];
// 自动带入当前选中的分类
if (this.queryParams.categoryId) {
this.form.categoryId = this.queryParams.categoryId;
}
this.open = true;
this.title = "新增物料";
},
@@ -428,6 +450,13 @@ export default {
const ids = row.materialId || (this.ids || []).join(",");
this.$modal.confirm("确认删除?").then(() => delMaterial(ids)).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); });
},
// ═══ Excel 导入导出 ═══
handleImport() {
this.$refs.importRef.open();
},
handleExport() {
this.download('/bid/material/export', { ...this.queryParams }, `material_${new Date().getTime()}.xlsx`);
},
handleStatusChange(row) { updateMaterial(row); },
// 性能参数
addPerfRow() {