فهرست منبع

运营会议设置设备利用率是否必填

Zimo 2 روز پیش
والد
کامیت
bc07ec2e3e
2فایلهای تغییر یافته به همراه39 افزوده شده و 1 حذف شده
  1. 4 0
      src/api/pms/meeting/index.ts
  2. 35 1
      src/views/pms/operation-meeting/meeting-form.vue

+ 4 - 0
src/api/pms/meeting/index.ts

@@ -33,6 +33,10 @@ export const OperationMeetingApi = {
     return await request.get({ url: `/pms/iot-operation-meeting/previousWorkPlan`, params })
   },
 
+  getMandatoryOrNot: async () => {
+    return await request.get({ url: `/pms/iot-operation-meeting/mandatoryOrNot` })
+  },
+
   getDeptList: async () => {
     return await request.get({ url: `/system/dept/includeDisabledCompanies` })
   }

+ 35 - 1
src/views/pms/operation-meeting/meeting-form.vue

@@ -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>