Pārlūkot izejas kodu

瑞都新建日报查看

Zimo 2 dienas atpakaļ
vecāks
revīzija
1e7135b600

+ 44 - 5
src/views/pms/iotrddailyreport/create-rd-form.vue

@@ -6,16 +6,20 @@ import { useUserStore } from '@/store/modules/user'
 import { getStrDictOptions } from '@/utils/dict'
 import * as DeptApi from '@/api/system/dept'
 import { IotRdDailyReportApi } from '@/api/pms/iotrddailyreport'
+import { formatT } from '@/utils/formatTime'
 
 const deptId = useUserStore().getUser.deptId
 
 interface Props {
   visible: boolean
   loadList: () => void
+  isview: 'detail' | 'create' | 'time'
+  id?: number
 }
 
 const props = withDefaults(defineProps<Props>(), {
-  visible: false
+  visible: false,
+  isview: 'create'
 })
 
 const emits = defineEmits(['update:visible'])
@@ -134,8 +138,30 @@ const loading = ref(false)
 
 async function load() {
   loading.value = true
-  await loadDept()
+
   await loadUserOptions()
+
+  if (props.isview && props.id) {
+    const res = await IotRdDailyReportApi.getIotRdDailyReport(props.id)
+    deptName.value = res.deptName
+    form.value = {
+      deptId: res.deptId,
+      location: res.location,
+      responsiblePerson: res.responsiblePerson,
+      timeRange: [formatT(res.startTime), formatT(res.endTime)],
+      rdStatus: res.rdStatus,
+      dailyFuel: res.dailyFuel,
+      productionStatus: res.productionStatus,
+      nextPlan: res.nextPlan,
+      externalRental: res.externalRental,
+      malfunction: res.malfunction,
+      otherNptReason: res.otherNptReason,
+      ...NON_PROD_FIELDS.reduce((acc, field) => ({ ...acc, [field.key]: res[field.key] }), {})
+    }
+  } else {
+    await loadDept()
+  }
+
   loading.value = false
 }
 
@@ -164,11 +190,15 @@ async function submitForm() {
     formLoading.value = true
     await formRef.value.validate()
     const { timeRange, ...rest } = form.value
-    const data = { ...rest, startTime: timeRange?.[0], endTime: timeRange?.[1] }
+    const data: any = { ...rest, startTime: timeRange?.[0], endTime: timeRange?.[1] }
 
+    if (props.id) {
+      data.id = props.id
+    }
     await IotRdDailyReportApi.createIotRdDailyReport(data)
 
-    message.success('新增成功')
+    if (props.id) message.success('更新成功')
+    else message.success('新增成功')
     handleCloseForm()
     props.loadList()
   } catch (error) {
@@ -205,6 +235,7 @@ async function submitForm() {
         class="flex flex-col"
         :rules="rules"
         :loading="loading"
+        :disabled="props.isview !== 'create'"
       >
         <div class="grid grid-cols-2 gap-x-8">
           <el-form-item label="施工队伍">{{ deptName }}</el-form-item>
@@ -326,6 +357,7 @@ async function submitForm() {
               class="w-full!"
               align="left"
               @blur="handleRowValidate(field.key)"
+              :disabled="isview === 'detail'"
             >
               <template #suffix>小时(H)</template>
             </el-input-number>
@@ -349,13 +381,20 @@ async function submitForm() {
               show-word-limit
               :maxlength="1000"
               placeholder="当'其他非生产时间'大于0时必填"
+              :disabled="isview === 'detail'"
             />
           </el-form-item>
         </div>
       </el-form>
     </div>
     <template #footer>
-      <el-button size="default" type="primary" @click="submitForm" :loading="formLoading">
+      <el-button
+        :disabled="isview === 'detail'"
+        size="default"
+        type="primary"
+        @click="submitForm"
+        :loading="formLoading"
+      >
         确 定
       </el-button>
       <el-button size="default" @click="emits('update:visible', false)">取 消</el-button>

+ 24 - 5
src/views/pms/iotrddailyreport/fillDailyReport.vue

@@ -59,6 +59,8 @@ interface ListItem {
   responsiblePersonNames: string
   submitterNames: string
   nonProductFlag: boolean
+  projectId?: number
+  taskId?: number
 }
 
 const list = ref<ListItem[]>([])
@@ -125,13 +127,24 @@ const visible = ref(false)
 
 const formRef = ref()
 
-function handleOpenCreateForm() {
+const isview = ref<'create' | 'detail' | 'time'>('create')
+const viewId = ref<number>()
+
+function handleOpenCreateForm(id?: number, type?: any) {
   if (formRef.value) {
+    if (id) {
+      viewId.value = id
+      isview.value = type
+    }
     formRef.value.handleOpenForm()
   }
 }
 
-function handleOpenForm(id: number, type: 'edit' | 'detail' | 'approval' | 'time') {
+function handleOpenForm(id: number, type: 'edit' | 'detail' | 'approval' | 'time', row?: ListItem) {
+  if (row && row.projectId === null && row.taskId === null) {
+    handleOpenCreateForm(id, type)
+    return
+  }
   router.push({
     name: 'FillDailyReportForm',
     query: { id: id, mode: type, backpath: route.path }
@@ -269,7 +282,7 @@ function realValue(type: any, value: string) {
                   <el-button
                     link
                     type="success"
-                    @click="handleOpenForm(scope.row.id, 'detail')"
+                    @click="handleOpenForm(scope.row.id, 'detail', scope.row)"
                     v-hasPermi="['pms:iot-rd-daily-report:query']"
                   >
                     查看
@@ -281,7 +294,7 @@ function realValue(type: any, value: string) {
                         ? 'success'
                         : 'warning'
                     "
-                    @click="handleOpenForm(scope.row.id, 'time')"
+                    @click="handleOpenForm(scope.row.id, 'time', scope.row)"
                     v-hasPermi="['pms:iot-rd-daily-report:non-productive']"
                     v-if="scope.row.auditStatus === 20"
                   >
@@ -373,7 +386,13 @@ function realValue(type: any, value: string) {
       </div>
     </div>
   </div>
-  <create-rd-form ref="formRef" :load-list="loadList" v-model:visible="visible" />
+  <create-rd-form
+    :isview="isview"
+    :id="viewId"
+    ref="formRef"
+    :load-list="loadList"
+    v-model:visible="visible"
+  />
   <!-- <IotRdDailyReportForm ref="formRef" @success="loadList" /> -->
 </template>
 

+ 30 - 10
src/views/pms/iotrddailyreport/index.vue

@@ -7,7 +7,7 @@ import { formatT, rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
 import download from '@/utils/download'
-import rdForm from './rd-form.vue'
+import createRdForm from './create-rd-form.vue'
 
 defineOptions({ name: 'IotRdDailyReport' })
 
@@ -81,6 +81,8 @@ interface ListItem {
   contractName: string
   timeRange: string
   auditStatus: number
+  projectId: number
+  taskId: number
 }
 
 const list = ref<ListItem[]>([])
@@ -196,15 +198,27 @@ function realValue(type: any, value: string) {
 
 const visible = ref(false)
 
-// const formRef = ref()
+const formRef = ref()
 
-// function handleOpenForm(id: number, type: 'edit' | 'detail' | 'approval' | 'time') {
-//   if (formRef.value) {
-//     formRef.value.handleOpenForm(id, type)
-//   }
-// }
+const isview = ref<'create' | 'detail' | 'time'>('create')
+const viewId = ref<number>()
 
-function handleOpenForm(id: number, type: 'edit' | 'detail' | 'approval' | 'time') {
+function handleOpenCreateForm(id?: number, type?: any) {
+  if (formRef.value) {
+    if (id) {
+      viewId.value = id
+      isview.value = type
+    }
+    formRef.value.handleOpenForm()
+  }
+}
+
+function handleOpenForm(id: number, type: 'edit' | 'detail' | 'approval' | 'time', row?: ListItem) {
+  console.log('row', row)
+  if (row && row.projectId === null && row.taskId === null) {
+    handleOpenCreateForm(id, type)
+    return
+  }
   router.push({
     name: 'FillDailyReportForm',
     query: { id: id, mode: type, backpath: route.path }
@@ -492,7 +506,7 @@ onMounted(() => {
                   <el-button
                     link
                     type="success"
-                    @click="handleOpenForm(scope.row.id, 'detail')"
+                    @click="handleOpenForm(scope.row.id, 'detail', scope.row)"
                     v-hasPermi="['pms:iot-rd-daily-report:query']"
                   >
                     查看
@@ -529,7 +543,13 @@ onMounted(() => {
     </div>
   </div>
 
-  <rd-form ref="formRef" :load-list="loadList" v-model:visible="visible" />
+  <create-rd-form
+    :isview="isview"
+    :id="viewId"
+    ref="formRef"
+    :load-list="loadList"
+    v-model:visible="visible"
+  />
   <!-- <IotRdDailyReportForm ref="formRef" @success="loadList" /> -->
 </template>