|
|
@@ -290,14 +290,100 @@
|
|
|
:min-width="columnWidths.productionTime.width"
|
|
|
resizable
|
|
|
/>
|
|
|
+ <el-table-column label="非生产时间" align="center">
|
|
|
+ <el-table-column
|
|
|
+ label="工程质量"
|
|
|
+ align="center"
|
|
|
+ prop="accidentTime"
|
|
|
+ :min-width="columnWidths.accidentTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="设备故障"
|
|
|
+ align="center"
|
|
|
+ prop="repairTime"
|
|
|
+ :min-width="columnWidths.repairTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="设备保养"
|
|
|
+ align="center"
|
|
|
+ prop="selfStopTime"
|
|
|
+ :min-width="columnWidths.selfStopTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="技术受限"
|
|
|
+ align="center"
|
|
|
+ prop="complexityTime"
|
|
|
+ :min-width="columnWidths.complexityTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="生产配合"
|
|
|
+ align="center"
|
|
|
+ prop="relocationTime"
|
|
|
+ :min-width="columnWidths.relocationTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="生产组织"
|
|
|
+ align="center"
|
|
|
+ prop="rectificationTime"
|
|
|
+ :min-width="columnWidths.rectificationTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="不可抗力"
|
|
|
+ align="center"
|
|
|
+ prop="waitingStopTime"
|
|
|
+ :min-width="columnWidths.waitingStopTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="待命"
|
|
|
+ align="center"
|
|
|
+ prop="winterBreakTime"
|
|
|
+ :min-width="columnWidths.winterBreakTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="甲方设计"
|
|
|
+ align="center"
|
|
|
+ prop="partyaDesign"
|
|
|
+ :min-width="columnWidths.partyaDesign.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="甲方准备"
|
|
|
+ align="center"
|
|
|
+ prop="partyaPrepare"
|
|
|
+ :min-width="columnWidths.partyaPrepare.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="甲方资源"
|
|
|
+ align="center"
|
|
|
+ prop="partyaResource"
|
|
|
+ :min-width="columnWidths.partyaResource.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="其它非生产时间"
|
|
|
+ align="center"
|
|
|
+ prop="otherNptTime"
|
|
|
+ :min-width="columnWidths.otherNptTime.width"
|
|
|
+ resizable
|
|
|
+ />
|
|
|
+ </el-table-column>
|
|
|
<el-table-column
|
|
|
- label="非生产时间(H)"
|
|
|
+ label="其他非生产时间原因"
|
|
|
align="center"
|
|
|
- prop="nonProductionTime"
|
|
|
- :min-width="columnWidths.nonProductionTime.width"
|
|
|
+ prop="otherNptReason"
|
|
|
+ :min-width="columnWidths.otherNptReason.width"
|
|
|
resizable
|
|
|
/>
|
|
|
- <el-table-column
|
|
|
+ <!-- <el-table-column
|
|
|
:label="t('project.nptReason')"
|
|
|
align="center"
|
|
|
prop="ryNptReason"
|
|
|
@@ -310,7 +396,7 @@
|
|
|
:value="scope.row.ryNptReason"
|
|
|
/>
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
+ </el-table-column> -->
|
|
|
<el-table-column
|
|
|
label="生产动态"
|
|
|
align="center"
|
|
|
@@ -598,9 +684,69 @@ const columnWidths = ref<
|
|
|
prop: 'productionTime',
|
|
|
width: '120px'
|
|
|
},
|
|
|
- nonProductionTime: {
|
|
|
- label: '非生产时间(H)',
|
|
|
- prop: 'nonProductionTime',
|
|
|
+ accidentTime: {
|
|
|
+ label: '工程质量',
|
|
|
+ prop: 'accidentTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ repairTime: {
|
|
|
+ label: '设备故障',
|
|
|
+ prop: 'repairTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ selfStopTime: {
|
|
|
+ label: '设备保养',
|
|
|
+ prop: 'selfStopTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ complexityTime: {
|
|
|
+ label: '技术受限',
|
|
|
+ prop: 'complexityTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ relocationTime: {
|
|
|
+ label: '生产配合',
|
|
|
+ prop: 'relocationTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ rectificationTime: {
|
|
|
+ label: '生产组织',
|
|
|
+ prop: 'rectificationTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ waitingStopTime: {
|
|
|
+ label: '不可抗力',
|
|
|
+ prop: 'waitingStopTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ winterBreakTime: {
|
|
|
+ label: '待命',
|
|
|
+ prop: 'winterBreakTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ partyaDesign: {
|
|
|
+ label: '甲方设计',
|
|
|
+ prop: 'partyaDesign',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ partyaPrepare: {
|
|
|
+ label: '甲方资源',
|
|
|
+ prop: 'partyaPrepare',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ partyaResource: {
|
|
|
+ label: '甲方准备',
|
|
|
+ prop: 'partyaResource',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ otherNptTime: {
|
|
|
+ label: '其它非生产时间',
|
|
|
+ prop: 'otherNptTime',
|
|
|
+ width: '120px'
|
|
|
+ },
|
|
|
+ otherNptReason: {
|
|
|
+ label: '其他非生产时间原因',
|
|
|
+ prop: 'otherNptReason',
|
|
|
width: '120px'
|
|
|
},
|
|
|
ryNptReason: {
|
|
|
@@ -738,38 +884,59 @@ const cellStyle = ({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 1. 检查三个时间字段:额定生产时间、生产时间、非生产时间
|
|
|
- const timeFields = ['ratedProductionTime', 'productionTime', 'nonProductionTime']
|
|
|
+ const nptFields = [
|
|
|
+ 'accidentTime', // 工程质量
|
|
|
+ 'repairTime', // 设备故障
|
|
|
+ 'selfStopTime', // 设备保养
|
|
|
+ 'complexityTime', // 技术受限
|
|
|
+ 'relocationTime', // 生产配合
|
|
|
+ 'rectificationTime', // 生产组织
|
|
|
+ 'waitingStopTime', // 不可抗力
|
|
|
+ 'winterBreakTime', // 待命
|
|
|
+ 'partyaDesign', // 甲方设计
|
|
|
+ 'partyaPrepare', // 甲方资源
|
|
|
+ 'partyaResource', // 甲方准备
|
|
|
+ 'otherNptTime' // 其它非生产时间
|
|
|
+ ]
|
|
|
+
|
|
|
+ // 定义所有涉及校验的列(额定、生产 + 所有非生产细分字段)
|
|
|
+ const timeFields = ['ratedProductionTime', 'productionTime', ...nptFields]
|
|
|
+
|
|
|
if (timeFields.includes(column.property)) {
|
|
|
- const ratedTime = parseFloat(row.ratedProductionTime) || 0
|
|
|
- const prodTime = parseFloat(row.productionTime) || 0
|
|
|
- const nonProdTime = parseFloat(row.nonProductionTime) || 0
|
|
|
-
|
|
|
- // 新增:检查三个字段是否有空值
|
|
|
- const hasEmptyField =
|
|
|
- row.ratedProductionTime === null ||
|
|
|
- row.ratedProductionTime === undefined ||
|
|
|
- row.ratedProductionTime === '' ||
|
|
|
- row.productionTime === null ||
|
|
|
- row.productionTime === undefined ||
|
|
|
- row.productionTime === '' ||
|
|
|
- row.nonProductionTime === null ||
|
|
|
- row.nonProductionTime === undefined ||
|
|
|
- row.nonProductionTime === ''
|
|
|
-
|
|
|
- // 如果有空字段,应用警告样式
|
|
|
+ // 辅助函数:判断值是否为空
|
|
|
+ const isEmpty = (val) => val === null || val === undefined || val === ''
|
|
|
+
|
|
|
+ // 1. 检查是否有空值
|
|
|
+ // 先检查额定时间和生产时间
|
|
|
+ let hasEmptyField = isEmpty(row.ratedProductionTime) || isEmpty(row.productionTime)
|
|
|
+
|
|
|
+ // 如果主要字段不为空,继续检查所有非生产时间细分字段
|
|
|
+ if (!hasEmptyField) {
|
|
|
+ hasEmptyField = nptFields.some((field) => isEmpty(row[field]))
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果有空字段,应用警告样式(红色)
|
|
|
if (hasEmptyField) {
|
|
|
return {
|
|
|
- backgroundColor: '#fff2f0', // 浅红色背景,表示数据不完整
|
|
|
+ backgroundColor: '#fff2f0', // 浅红色背景
|
|
|
color: '#d46b08', // 深红色文字
|
|
|
fontWeight: 'bold',
|
|
|
- border: '1px solid #ffa39e' // 可选:添加边框突出显示
|
|
|
+ border: '1px solid #ffa39e'
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 如果三个字段都有值,且不满足公式:额定生产时间 = 生产时间 + 非生产时间
|
|
|
+ // 2. 获取数值进行计算
|
|
|
+ const ratedTime = parseFloat(row.ratedProductionTime) || 0
|
|
|
+ const prodTime = parseFloat(row.productionTime) || 0
|
|
|
+
|
|
|
+ // 计算所有非生产时间细分字段的总和
|
|
|
+ const totalNonProdTime = nptFields.reduce((sum, field) => {
|
|
|
+ return sum + (parseFloat(row[field]) || 0)
|
|
|
+ }, 0)
|
|
|
+
|
|
|
+ // 3. 校验逻辑:额定生产时间 = 生产时间 + 所有非生产时间细项之和
|
|
|
// 使用容差比较,避免浮点数精度问题
|
|
|
- if (Math.abs(ratedTime - (prodTime + nonProdTime)) > 0.01) {
|
|
|
+ if (Math.abs(ratedTime - (prodTime + totalNonProdTime)) > 0.01) {
|
|
|
return {
|
|
|
backgroundColor: '#fffbe6', // 浅黄色背景
|
|
|
color: '#d46b08', // 橙色文字
|