feat(CoilSelector): 新增入场卷号字段并调整当前卷号显示

feat(customer): 新增客户相关配卷和财务信息查询接口

fix(base.vue): 修复发货单时间条件显示问题

refactor(CustomerEdit): 替换地址选择组件为普通输入框

feat(CoilSelector): 增加入场卷号查询条件并调整对话框宽度

style(OrderEdit): 调整客户名称和销售员选择框宽度

refactor(ChinaAreaSelect): 优化地址解析逻辑并支持空对象处理

feat(FileUpload/FileList): 新增文件预览功能组件

refactor(KLPService/CustomerSelect): 优化客户选择组件并支持自定义字段绑定

fix(AbnormalForm): 修复异常位置校验逻辑并保留当前卷号

feat(ContractTabs): 新增合同附件展示功能

refactor(warehouse/record): 重构操作记录统计展示方式

feat(contract): 集成客户选择组件并优化合同信息填充

refactor(order): 调整订单表单布局并集成合同信息

feat(FilePreview): 新增文件预览组件

feat(customer): 新增财务状态和发货配卷展示

refactor(CustomerOrder): 移除冗余代码并优化布局

feat(PlanDetailForm): 新增合同附件查看功能

feat(dict): 新增字典管理页面
This commit is contained in:
砂糖
2026-04-06 13:16:45 +08:00
parent 4075ead84e
commit 1fa4c55869
21 changed files with 1158 additions and 192 deletions

View File

@@ -73,12 +73,12 @@ export default {
{ required: true, message: '请选择位置', trigger: 'change' }
],
startPosition: [
{ required: true, message: '请输入开始位置', trigger: 'blur' },
// { type: 'number', message: '请输入数字', trigger: 'blur' }
{ required: true, message: '请输入开始位置', trigger: ['blur', 'change'] },
{ validator: this.validateStartPosition, trigger: ['blur', 'change'] }
],
endPosition: [
{ required: true, message: '请输入结束位置', trigger: 'blur' },
// { type: 'number', message: '请输入数字', trigger: 'blur' }
{ required: true, message: '请输入结束位置', trigger: ['blur', 'change'] },
{ validator: this.validateEndPosition, trigger: ['blur', 'change'] }
],
defectCode: [
{ required: true, message: '请选择缺陷代码', trigger: 'change' }
@@ -102,14 +102,19 @@ export default {
methods: {
/** 表单验证 */
validate(callback) {
if (this.formData.startPosition > this.formData.endPosition) {
this.$message.error('开始位置必须小于结束位置');
return false;
}
return this.$refs.form.validate(callback);
},
/** 重置表单 */
resetFields() {
this.$refs.form.resetFields();
const currentCoilId = this.formData.coilId;
this.formData = {
abnormalId: undefined,
coilId: undefined,
coilId: currentCoilId,
position: undefined,
startPosition: undefined,
endPosition: undefined,
@@ -124,6 +129,22 @@ export default {
if (this.formData.startPosition && this.formData.endPosition) {
this.formData.length = this.formData.endPosition - this.formData.startPosition;
}
},
/** 校验开始位置 */
validateStartPosition(rule, value, callback) {
if (value <= 0) {
callback(new Error('开始位置必须为正数'));
} else {
callback();
}
},
/** 校验结束位置 */
validateEndPosition(rule, value, callback) {
if (value <= 0) {
callback(new Error('结束位置必须为正数'));
} else {
callback();
}
}
}
};

View File

@@ -48,8 +48,8 @@
<MaterialSelect :hideType="hideType" :itemId.sync="queryParams.itemIds" :itemType.sync="queryParams.itemType"
:multiple="true" />
<el-form-item label="发货单时间">
<el-date-picker v-if="showWaybill" v-model="queryParams.shipmentTime" type="daterange" value-format="yyyy-MM-dd HH:mm:ss"
<el-form-item v-if="showWaybill" label="发货单时间">
<el-date-picker v-model="queryParams.shipmentTime" type="daterange" value-format="yyyy-MM-dd HH:mm:ss"
range-separator="" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>

View File

@@ -28,6 +28,8 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 统计指标卡 -->
<el-row :gutter="10" class="mb10">
<el-col :span="8">
@@ -71,14 +73,27 @@
</el-col>
</el-row>
<!-- 操作人汇总表格 -->
<el-card shadow="hover" :body-style="{ padding: '10px' }" class="mb10">
<div slot="header" class="clearfix" style="padding-bottom: 5px;">
<span>操作记录趋势</span>
</div>
<div id="trendChart" style="height: 250px;"></div>
</el-card>
<!-- 图表区域 -->
<el-row :gutter="10" class="mb10">
<el-col :span="12">
<el-card shadow="hover" :body-style="{ padding: '10px' }">
<div slot="header" class="clearfix" style="padding-bottom: 5px;">
<span>操作记录趋势</span>
</div>
<div id="trendChart" style="height: 250px;"></div>
<el-table :data="userSummaryData" style="width: 100%" height="280px">
<el-table-column prop="createBy" label="操作人" width="180"></el-table-column>
<el-table-column prop="coilCount" label="操作卷数" width="120"></el-table-column>
<el-table-column prop="totalWeight" label="总重量(kg)">
<template slot-scope="scope">
{{ scope.row.totalWeight.toFixed(2) }}
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="6">
@@ -212,6 +227,8 @@ export default {
totalWeight: 0,
warehouseCount: 0
},
// 操作人汇总数据
userSummaryData: [],
// 图表实例
trendChart: null,
pieChart: null,
@@ -258,7 +275,7 @@ export default {
this.queryParams.createEndTime = this.queryParams.createTimeRange[1];
}
// 移除分页参数,获取全部数据
const params = { ...this.queryParams, pageNum:1, pageSize: 10000 };
const params = { ...this.queryParams, pageNum: 1, pageSize: 10000 };
listCoilWarehouseOperationLog(params).then(response => {
this.allData = response.rows;
@@ -296,6 +313,26 @@ export default {
});
this.stats.warehouseCount = warehouseIds.size;
// 按操作人汇总数据
const userMap = {};
this.allData.forEach(item => {
const user = item.createBy || '未知';
if (!userMap[user]) {
userMap[user] = {
createBy: user,
coilCount: 0,
totalWeight: 0
};
}
userMap[user].coilCount++;
if (item.coil && item.coil.netWeight) {
userMap[user].totalWeight += parseFloat(item.coil.netWeight);
}
});
// 转换为数组并按操作卷数降序排序
this.userSummaryData = Object.values(userMap).sort((a, b) => b.coilCount - a.coilCount);
// 更新图表数据
this.updateCharts();
},