|
|
@@ -250,6 +250,16 @@ const numberRangeRule = (requiredMessage: string, fieldLabel: string, min: numbe
|
|
|
}
|
|
|
]
|
|
|
|
|
|
+const optionalNumberRangeRule = (fieldLabel: string, min: number, max: number) => [
|
|
|
+ {
|
|
|
+ type: 'number' as const,
|
|
|
+ min,
|
|
|
+ max,
|
|
|
+ message: `${fieldLabel}需在${min}到${max}之间`,
|
|
|
+ trigger: ['blur', 'change']
|
|
|
+ }
|
|
|
+]
|
|
|
+
|
|
|
const operationMeetingRules = reactive<FormRules>({
|
|
|
meetingDate: [{ required: true, message: '请选择会议日期', trigger: 'change' }],
|
|
|
meetingSeries: [
|
|
|
@@ -269,6 +279,12 @@ const operationMeetingRules = reactive<FormRules>({
|
|
|
support: requiredTextRule('请输入需集团协调支持的事项')
|
|
|
})
|
|
|
|
|
|
+const equipmentUtilizationRateRequired = ref(true)
|
|
|
+const getEquipmentUtilizationRateRules = () =>
|
|
|
+ equipmentUtilizationRateRequired.value
|
|
|
+ ? numberRangeRule('请输入设备利用率', '设备利用率', 0, 100)
|
|
|
+ : optionalNumberRangeRule('设备利用率', 0, 100)
|
|
|
+
|
|
|
const detailRules = reactive<FormRules>({
|
|
|
projectName: requiredTextRule('请选择或者输入项目名称'),
|
|
|
currentRevenue: nonNegativeNumberRule('请输入收入-本期', '收入-本期'),
|
|
|
@@ -279,13 +295,30 @@ const detailRules = reactive<FormRules>({
|
|
|
cumulativePayment: nonNegativeNumberRule('请输入回款-累计', '回款-累计'),
|
|
|
plannedWorkload: requiredTextRule('请输入计划工作量'),
|
|
|
actualCompletion: requiredTextRule('请输入实际完成'),
|
|
|
- equipmentUtilizationRate: numberRangeRule('请输入设备利用率', '设备利用率', 0, 100),
|
|
|
+ equipmentUtilizationRate: getEquipmentUtilizationRateRules(),
|
|
|
keyWorkCompletion: requiredTextRule('请输入重点工作及完成情况'),
|
|
|
problemsAnalysis: requiredTextRule('请输入存在问题及分析'),
|
|
|
nextPlannedWorkload: requiredTextRule('请输入下期计划工作量'),
|
|
|
priorityTasks: requiredTextRule('请输入重点工作事项')
|
|
|
})
|
|
|
|
|
|
+const updateEquipmentUtilizationRateRule = (required: boolean) => {
|
|
|
+ equipmentUtilizationRateRequired.value = required
|
|
|
+ detailRules.equipmentUtilizationRate = getEquipmentUtilizationRateRules()
|
|
|
+ nextTick(() => detailFormRef.value?.clearValidate('equipmentUtilizationRate'))
|
|
|
+}
|
|
|
+
|
|
|
+const loadEquipmentUtilizationRateRule = async () => {
|
|
|
+ updateEquipmentUtilizationRateRule(true)
|
|
|
+
|
|
|
+ try {
|
|
|
+ const data = await OperationMeetingApi.getMandatoryOrNot()
|
|
|
+ updateEquipmentUtilizationRateRule(data?.mandatory !== false)
|
|
|
+ } catch {
|
|
|
+ updateEquipmentUtilizationRateRule(true)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
const formatSummaryNumber = (value: number) =>
|
|
|
value.toLocaleString('zh-CN', {
|
|
|
maximumFractionDigits: 2,
|
|
|
@@ -597,6 +630,7 @@ async function loadProjectNameOptions() {
|
|
|
|
|
|
onMounted(() => {
|
|
|
loadProjectNameOptions()
|
|
|
+ loadEquipmentUtilizationRateRule()
|
|
|
})
|
|
|
</script>
|
|
|
|