|
@@ -31,13 +31,22 @@
|
|
<el-input v-model="formData.dailyWaterInjection" placeholder="请输入当日注水量(方)" />
|
|
<el-input v-model="formData.dailyWaterInjection" placeholder="请输入当日注水量(方)" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="当日注气时间(H)" prop="dailyInjectGasTime">
|
|
<el-form-item label="当日注气时间(H)" prop="dailyInjectGasTime">
|
|
- <el-input v-model="formData.dailyInjectGasTime" placeholder="请输入当日注气时间(H)" />
|
|
|
|
|
|
+ <el-input v-model="formData.dailyInjectGasTime"
|
|
|
|
+ placeholder="请输入当日注气时间(H)"
|
|
|
|
+ :class="{'red-text': isTimeSumInvalid}"
|
|
|
|
+ @change="validateTimeSum" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="当日注水时间(H)" prop="dailyInjectWaterTime">
|
|
<el-form-item label="当日注水时间(H)" prop="dailyInjectWaterTime">
|
|
- <el-input v-model="formData.dailyInjectWaterTime" placeholder="当日注水时间(H)" />
|
|
|
|
|
|
+ <el-input v-model="formData.dailyInjectWaterTime"
|
|
|
|
+ placeholder="当日注水时间(H)"
|
|
|
|
+ :class="{'red-text': isTimeSumInvalid}"
|
|
|
|
+ @change="validateTimeSum" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="非生产时间(H)" prop="nonProductionTime">
|
|
<el-form-item label="非生产时间(H)" prop="nonProductionTime">
|
|
- <el-input v-model="formData.nonProductionTime" placeholder="" disabled/>
|
|
|
|
|
|
+ <el-input v-model="formData.nonProductionTime"
|
|
|
|
+ placeholder="非生产时间(H)"
|
|
|
|
+ :class="{'red-text': isTimeSumInvalid}"
|
|
|
|
+ @change="validateTimeSum" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="非生产时间原因" prop="nptReason">
|
|
<el-form-item label="非生产时间原因" prop="nptReason">
|
|
<el-select v-model="formData.nptReason" placeholder="请选择" clearable disabled>
|
|
<el-select v-model="formData.nptReason" placeholder="请选择" clearable disabled>
|
|
@@ -74,7 +83,7 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import { IotRhDailyReportApi, IotRhDailyReportVO } from '@/api/pms/iotrhdailyreport'
|
|
import { IotRhDailyReportApi, IotRhDailyReportVO } from '@/api/pms/iotrhdailyreport'
|
|
import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
|
|
import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
|
|
-import { computed, ref, watch, nextTick } from 'vue'
|
|
|
|
|
|
+import { computed, ref, watch, nextTick, reactive } from 'vue'
|
|
|
|
|
|
/** 瑞恒日报 表单 */
|
|
/** 瑞恒日报 表单 */
|
|
defineOptions({ name: 'IotRhDailyReportForm' })
|
|
defineOptions({ name: 'IotRhDailyReportForm' })
|
|
@@ -104,6 +113,8 @@ const dialogTitle = ref('') // 弹窗的标题
|
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
|
|
|
|
|
+const isTimeSumInvalid = ref(false) // 时间总和的校验状态
|
|
|
|
+
|
|
// 添加显示数据对象
|
|
// 添加显示数据对象
|
|
const displayData = ref({
|
|
const displayData = ref({
|
|
deptName: '',
|
|
deptName: '',
|
|
@@ -143,7 +154,34 @@ const formData = ref({
|
|
capacity: undefined
|
|
capacity: undefined
|
|
})
|
|
})
|
|
const formRules = reactive({
|
|
const formRules = reactive({
|
|
|
|
+ dailyInjectGasTime: [
|
|
|
|
+ { validator: validateTimeField, trigger: 'change' }
|
|
|
|
+ ],
|
|
|
|
+ dailyInjectWaterTime: [
|
|
|
|
+ { validator: validateTimeField, trigger: 'change' }
|
|
|
|
+ ],
|
|
|
|
+ nonProductionTime: [
|
|
|
|
+ { validator: validateTimeField, trigger: 'change' }
|
|
|
|
+ ]
|
|
})
|
|
})
|
|
|
|
+
|
|
|
|
+// 时间字段校验器
|
|
|
|
+function validateTimeField(rule: any, value: any, callback: any) {
|
|
|
|
+ if (value === undefined || value === null || value === '') {
|
|
|
|
+ callback()
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const numValue = Number(value)
|
|
|
|
+ if (isNaN(numValue)) {
|
|
|
|
+ callback(new Error('请输入有效的数字'))
|
|
|
|
+ } else if (numValue < 0) {
|
|
|
|
+ callback(new Error('时间不能为负数'))
|
|
|
|
+ } else {
|
|
|
|
+ callback()
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
const formRef = ref() // 表单 Ref
|
|
const formRef = ref() // 表单 Ref
|
|
|
|
|
|
// 计算运行时效的显示值和颜色
|
|
// 计算运行时效的显示值和颜色
|
|
@@ -180,6 +218,18 @@ const calculateTransitTime = () => {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// 验证三个时间字段的总和
|
|
|
|
+const validateTimeSum = () => {
|
|
|
|
+ const gasTime = Number(formData.value.dailyInjectGasTime) || 0
|
|
|
|
+ const waterTime = Number(formData.value.dailyInjectWaterTime) || 0
|
|
|
|
+ const nonProdTime = Number(formData.value.nonProductionTime) || 0
|
|
|
|
+
|
|
|
|
+ const total = gasTime + waterTime + nonProdTime
|
|
|
|
+ isTimeSumInvalid.value = total !== 24
|
|
|
|
+
|
|
|
|
+ return total === 24
|
|
|
|
+}
|
|
|
|
+
|
|
/** 打开弹窗 */
|
|
/** 打开弹窗 */
|
|
const open = async (type: string, id?: number) => {
|
|
const open = async (type: string, id?: number) => {
|
|
dialogVisible.value = true
|
|
dialogVisible.value = true
|
|
@@ -206,6 +256,8 @@ const open = async (type: string, id?: number) => {
|
|
// 计算运行时效
|
|
// 计算运行时效
|
|
calculateTransitTime()
|
|
calculateTransitTime()
|
|
}
|
|
}
|
|
|
|
+ // 验证时间总和
|
|
|
|
+ validateTimeSum()
|
|
} finally {
|
|
} finally {
|
|
formLoading.value = false
|
|
formLoading.value = false
|
|
}
|
|
}
|
|
@@ -225,6 +277,12 @@ const submitForm = async () => {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 检查时间总和
|
|
|
|
+ if (!validateTimeSum()) {
|
|
|
|
+ message.error('当日注气时间、注水时间和非生产时间之和必须等于24小时')
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
// 提交请求
|
|
// 提交请求
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
try {
|
|
try {
|
|
@@ -284,6 +342,8 @@ const resetForm = () => {
|
|
taskName: ''
|
|
taskName: ''
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ isTimeSumInvalid.value = false
|
|
|
|
+
|
|
formRef.value?.resetFields()
|
|
formRef.value?.resetFields()
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|