Ver código fonte

feat: 设备搬迁日报新增修改流程

- 列表页新增“修改”操作按钮
- “修改”按钮增加 pms:iot-ry-improve-daily-report:modify 权限控制
- 表单页新增 modify 模式
- 修改模式下允许编辑日报表单内容,审批意见保持只读
- 修改模式保存时额外传递 modifyFlag: "Y"
- 初始化表单时保证施工动态明细至少有一条数据
- 施工动态明细仅剩一条时禁止删除
- 调整操作列宽度以适配新增按钮
Zimo 2 dias atrás
pai
commit
e2432a65ef

+ 9 - 7
src/views/pms/iotrydailyreport/components/equipment-form.vue

@@ -6,7 +6,7 @@ import { Close, Delete, Plus } from '@element-plus/icons-vue'
 
 defineOptions({ name: 'IotRyEquipmentReportForm' })
 
-type FormMode = 'create' | 'edit' | 'detail' | 'approval'
+type FormMode = 'create' | 'edit' | 'detail' | 'approval' | 'modify'
 
 interface EquipmentReportForm {
   id?: number
@@ -19,6 +19,7 @@ interface EquipmentReportForm {
   personnel: string
   auditStatus?: 0 | 10 | 20 | 30 | 40
   opinion?: string
+  modifyFlag?: 'Y'
 }
 
 interface ImproveReportDetail {
@@ -83,7 +84,8 @@ const drawerTitle = computed(() => {
     create: '新建设备汇报',
     edit: '编辑设备汇报',
     detail: '查看设备汇报',
-    approval: '审批设备汇报'
+    approval: '审批设备汇报',
+    modify: '修改设备汇报'
   }
 
   return titleMap[formMode.value]
@@ -173,7 +175,6 @@ function addImproveReportDetail() {
 
 function removeImproveReportDetail(index: number) {
   if (form.value.improveReportDetails.length <= 1) {
-    form.value.improveReportDetails = getDefaultDetails()
     return
   }
 
@@ -198,9 +199,10 @@ async function submitForm() {
         workPurpose: data.workPurpose,
         relocationDays: Number(data.relocationDays),
         personnel: data.personnel,
-        improveReportDetails: data.improveReportDetails
+        improveReportDetails: data.improveReportDetails,
+        ...(formMode.value === 'modify' ? { modifyFlag: 'Y' as const } : {})
       })
-      message.success('编辑成功')
+      message.success(formMode.value === 'modify' ? '修改成功' : '编辑成功')
       await props.loadList()
     } else {
       await IotRyImproveDailyReportApi.createIotRyImproveDailyReport({
@@ -428,7 +430,7 @@ defineExpose({ handleOpenForm })
                     type="danger"
                     :icon="Delete"
                     @click="removeImproveReportDetail($index)"
-                    :disabled="mainFieldDisabled">
+                    :disabled="mainFieldDisabled || form.improveReportDetails.length <= 1">
                     删除
                   </el-button>
                 </template>
@@ -453,7 +455,7 @@ defineExpose({ handleOpenForm })
 
     <template #footer>
       <el-button
-        v-if="formMode === 'create' || formMode === 'edit'"
+        v-if="formMode === 'create' || formMode === 'edit' || formMode === 'modify'"
         size="default"
         type="primary"
         @click="submitForm"

+ 12 - 2
src/views/pms/iotrydailyreport/equipment.vue

@@ -90,7 +90,10 @@ function getAuditStatus(status?: number) {
   return auditStatusMap[status as keyof typeof auditStatusMap] || auditStatusMap[0]
 }
 
-function handleOpenForm(type: 'create' | 'edit' | 'detail' | 'approval', row?: ReportRow) {
+function handleOpenForm(
+  type: 'create' | 'edit' | 'detail' | 'approval' | 'modify',
+  row?: ReportRow
+) {
   formRef.value?.handleOpenForm(type, row)
 }
 
@@ -182,11 +185,18 @@ onMounted(() => {
                   </el-tag>
                 </template>
               </zm-table-column>
-              <zm-table-column label="操作" width="160" fixed="right" action>
+              <zm-table-column label="操作" width="200" fixed="right" action>
                 <template #default="{ row }">
                   <el-button link type="primary" @click="handleOpenForm('detail', row)">
                     查看
                   </el-button>
+                  <el-button
+                    link
+                    type="primary"
+                    @click="handleOpenForm('modify', row)"
+                    v-hasPermi="['pms:iot-ry-improve-daily-report:modify']">
+                    修改
+                  </el-button>
                   <el-button
                     v-if="row.status === 0"
                     link