Browse Source

pms 瑞都日报 审批

zhangcl 5 days ago
parent
commit
9998a3411a

+ 5 - 0
src/api/pms/iotrddailyreport/index.ts

@@ -65,6 +65,11 @@ export const IotRdDailyReportApi = {
     return await request.put({ url: `/pms/iot-rd-daily-report/update`, data })
   },
 
+  // 审批瑞都日报
+  approveRdDailyReport: async (data: IotRdDailyReportVO) => {
+    return await request.put({ url: `/pms/iot-rd-daily-report/approval`, data })
+  },
+
   // 删除瑞都日报
   deleteIotRdDailyReport: async (id: number) => {
     return await request.delete({ url: `/pms/iot-rd-daily-report/delete?id=` + id })

+ 1 - 1
src/router/modules/remaining.ts

@@ -960,7 +960,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
         }
       },
       {
-        path: 'dailyReport/fill/:id(\\d+)',
+        path: 'dailyReport/fill/:id(\\d+)/:mode',
         component: () => import('@/views/pms/iotrddailyreport/FillDailyReportForm.vue'),
         name: 'FillDailyReportForm',
         meta: {

+ 182 - 6
src/views/pms/iotrddailyreport/FillDailyReportForm.vue

@@ -2,7 +2,11 @@
   <ContentWrap v-loading="formLoading">
     <!-- 第一部分:日报标题 -->
     <div class="daily-report-title">
-      <h2>{{ dailyReportTitle }}</h2>
+      <h2>{{ isApprovalMode ? dailyReportApprovalTitle : dailyReportTitle }}</h2>
+      <!-- 在审批模式下显示审批状态提示 -->
+      <div v-if="isApprovalMode" class="approval-notice">
+        <el-alert title="审批模式:所有字段均为只读" type="info" :closable="false" />
+      </div>
     </div>
 
     <!-- 第二部分:项目/任务信息 -->
@@ -116,10 +120,11 @@
       <el-form
         ref="formRef"
         :model="formData"
-        :rules="formRules"
+        :rules="isApprovalMode ? {} : formRules"
         v-loading="formLoading"
         style="margin-top: 1em"
         label-width="200px"
+        :disabled="isApprovalMode"
       >
         <!-- 第一行:时间节点、施工状态 -->
         <el-row :gutter="30">
@@ -133,12 +138,13 @@
                 end-placeholder="结束时间"
                 placeholder="选择时间范围"
                 style="width: 100%"
+                :readonly="isApprovalMode"
               />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="施工状态" prop="rdStatus">
-              <el-select v-model="formData.rdStatus" placeholder="请选择施工状态" style="width: 100%">
+              <el-select v-model="formData.rdStatus" placeholder="请选择施工状态" style="width: 100%" :disabled="isApprovalMode">
                 <el-option
                   v-for="dict in rdStatusOptions"
                   :key="dict.value"
@@ -154,7 +160,8 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="施工工艺" prop="techniqueIds">
-              <el-select v-model="formData.techniqueIds" placeholder="请选择施工工艺" style="width: 100%" multiple>
+              <el-select v-model="formData.techniqueIds" placeholder="请选择施工工艺"
+                         style="width: 100%" multiple :disabled="isApprovalMode">
                 <el-option
                   v-for="dict in techniqueOptions"
                   :key="dict.value"
@@ -176,13 +183,14 @@
             <el-form-item
               :label="attr.name + (attr.unit ? `(${attr.unit})` : '')"
               :prop="'dynamicFields.' + attr.identifier"
-              :rules="getDynamicAttrRules(attr)"
+              :rules="isApprovalMode ? [] : getDynamicAttrRules(attr)"
             >
               <!-- 文本类型 -->
               <el-input
                 v-if="attr.dataType === 'text'"
                 v-model="formData.dynamicFields[attr.identifier]"
                 :placeholder="`请输入${attr.name}`"
+                :readonly="isApprovalMode"
               />
 
               <!-- 文本域类型 -->
@@ -192,6 +200,7 @@
                 :placeholder="`请输入${attr.name}`"
                 type="textarea"
                 :rows="3"
+                :readonly="isApprovalMode"
               />
 
               <!-- 数字类型 -->
@@ -202,6 +211,7 @@
                 type="number"
                 :min="attr.minValue || undefined"
                 :max="attr.maxValue || undefined"
+                :readonly="isApprovalMode"
               />
 
               <!-- 日期类型 -->
@@ -212,6 +222,7 @@
                 value-format="x"
                 :placeholder="`选择${attr.name}`"
                 style="width: 100%"
+                :readonly="isApprovalMode"
               />
 
               <!-- 默认文本输入 -->
@@ -219,6 +230,7 @@
                 v-else
                 v-model="formData.dynamicFields[attr.identifier]"
                 :placeholder="`请输入${attr.name}`"
+                :readonly="isApprovalMode"
               />
             </el-form-item>
           </el-col>
@@ -233,6 +245,7 @@
                 type="textarea"
                 :rows="3"
                 placeholder="请输入当日生产动态"
+                :readonly="isApprovalMode"
               />
             </el-form-item>
           </el-col>
@@ -247,6 +260,7 @@
                 type="textarea"
                 :rows="3"
                 placeholder="请输入下步工作计划"
+                :readonly="isApprovalMode"
               />
             </el-form-item>
           </el-col>
@@ -261,6 +275,32 @@
                 type="textarea"
                 :rows="3"
                 placeholder="请输入外租设备信息"
+                :readonly="isApprovalMode"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </ContentWrap>
+
+    <!-- 第四部分:审批意见 - 只在审批模式下显示 -->
+    <ContentWrap class="section-padding" v-if="isApprovalMode">
+      <el-form
+        ref="approvalFormRef"
+        :model="approvalForm"
+        style="margin-top: 1em"
+        label-width="200px"
+      >
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="审批意见" prop="opinion">
+              <el-input
+                v-model="approvalForm.opinion"
+                type="textarea"
+                :rows="4"
+                placeholder="请输入审批意见"
+                maxlength="500"
+                show-word-limit
               />
             </el-form-item>
           </el-col>
@@ -269,7 +309,7 @@
     </ContentWrap>
 
     <!-- 操作按钮 -->
-    <ContentWrap class="section-padding">
+    <ContentWrap class="section-padding" v-if="!isApprovalMode">
       <el-form>
         <el-form-item style="float: right">
           <el-button @click="submitForm" type="primary" :disabled="formLoading">
@@ -279,6 +319,22 @@
         </el-form-item>
       </el-form>
     </ContentWrap>
+
+    <!-- 审批模式下的操作按钮 -->
+    <ContentWrap class="section-padding" v-if="isApprovalMode">
+      <el-form>
+        <el-form-item style="float: right">
+          <el-button @click="handleApprove('pass')" type="success">
+            审批通过
+          </el-button>
+          <el-button @click="handleApprove('reject')" type="danger">
+            审批驳回
+          </el-button>
+          <el-button @click="close">{{ t('common.close') }}</el-button>
+        </el-form-item>
+      </el-form>
+    </ContentWrap>
+
   </ContentWrap>
 </template>
 
@@ -315,6 +371,20 @@ const dailyReportData = ref<any>({})
 // 动态属性相关变量
 const dynamicAttrs = ref<any[]>([]) // 存储动态属性列表
 
+// 添加审批表单相关变量
+const approvalFormRef = ref()
+const approvalForm = reactive({
+  opinion: '' // 审批意见
+})
+
+// 审批表单验证规则(可选,根据需求添加)
+const approvalFormRules = reactive({
+  opinion: [
+    { required: false, message: '请输入审批意见', trigger: 'blur' },
+    { min: 0, max: 500, message: '审批意见长度不能超过500个字符', trigger: 'blur' }
+  ]
+})
+
 // 表单数据
 const formData = ref({
   id: undefined,
@@ -356,6 +426,9 @@ const queryParams = reactive({
   techniqueIds: [],
 })
 
+// 添加审批模式判断
+const isApprovalMode = computed(() => params.mode === 'approval')
+
 // 下拉选项
 const rdStatusOptions = getStrDictOptions(DICT_TYPE.PMS_PROJECT_RD_STATUS)   // 施工状态
 const techniqueOptions = getStrDictOptions(DICT_TYPE.PMS_PROJECT_RD_TECHNOLOGY) // 瑞都施工工艺
@@ -369,6 +442,15 @@ const dailyReportTitle = computed(() => {
   return `${dailyReportData.value.wellName} - ${dateStr} 生产日报`
 })
 
+// 日报审批:日报标题
+const dailyReportApprovalTitle = computed(() => {
+  if (!dailyReportData.value.wellName || !dailyReportData.value.constructionStartDate) {
+    return '日报审批'
+  }
+  const dateStr = formatDate(dailyReportData.value.constructionStartDate)
+  return `${dailyReportData.value.wellName} - ${dateStr} 日报审批`
+})
+
 // 计算属性:施工周期
 const constructionPeriod = computed(() => {
   const start = dailyReportData.value.constructionStartDate
@@ -654,6 +736,53 @@ onMounted(async () => {
     formLoading.value = false
   }
 })
+
+/** 审批操作 */
+const handleApprove = async (action: 'pass' | 'reject') => {
+  try {
+    // 验证审批表单(如果需要)
+    // await approvalFormRef.value.validate()
+
+    formLoading.value = true
+
+    // 处理时间范围数据
+    if (formData.value.timeRange && formData.value.timeRange.length === 2) {
+      // 将时间范围转换为 LocalTime 格式的字符串
+      const startDate = dayjs(formData.value.timeRange[0])
+      const endDate = dayjs(formData.value.timeRange[1])
+
+      // 格式化为 HH:mm:ss 字符串,后端会自动转换为 LocalTime
+      formData.value.startTime = startDate.format('HH:mm:ss')
+      formData.value.endTime = endDate.format('HH:mm:ss')
+    }
+
+    // 构建审批数据,包含审批意见
+    const approveData = {
+      ...formData.value,
+      id: Number(id),
+      opinion: approvalForm.opinion,
+      auditStatus: action === 'pass' ? 20 : 30
+    }
+
+    // 这里可以调用审批API
+    if (action === 'pass') {
+      // 审批通过逻辑
+      await IotRdDailyReportApi.approveRdDailyReport(approveData)
+      message.success('审批通过')
+    } else {
+      // 审批驳回逻辑
+      await IotRdDailyReportApi.approveRdDailyReport(approveData)
+      message.success('审批驳回')
+    }
+    close()
+  } catch (error) {
+    console.error('审批操作失败:', error)
+    message.error('审批操作失败')
+  } finally {
+    formLoading.value = false
+  }
+}
+
 </script>
 
 <style scoped>
@@ -812,4 +941,51 @@ onMounted(async () => {
   /* 保证换行后文本正常显示(可选,清除可能的 nowrap 影响) */
   white-space: normal;
 }
+
+/* 添加审批模式下的样式 */
+.approval-notice {
+  margin-top: 10px;
+}
+
+/* 审批模式下表单字段的只读样式 */
+:deep(.el-form-item.is-disabled .el-input__inner),
+:deep(.el-form-item.is-disabled .el-textarea__inner) {
+  background-color: #f5f7fa;
+  border-color: #e4e7ed;
+  color: #c0c4cc;
+  cursor: not-allowed;
+}
+
+:deep(.el-form-item.is-disabled .el-select .el-input__inner) {
+  background-color: #f5f7fa;
+  border-color: #e4e7ed;
+  color: #c0c4cc;
+  cursor: not-allowed;
+}
+
+:deep(.el-form-item.is-disabled .el-date-editor .el-input__inner) {
+  background-color: #f5f7fa;
+  border-color: #e4e7ed;
+  color: #c0c4cc;
+  cursor: not-allowed;
+}
+
+/* 添加审批意见区域的样式 */
+.approval-opinion-section {
+  margin-top: 20px;
+  border-top: 2px solid #f0f0f0;
+  padding-top: 20px;
+}
+
+/* 审批意见文本域样式 */
+:deep(.approval-opinion .el-textarea__inner) {
+  min-height: 100px;
+  resize: vertical;
+}
+
+/* 审批意见标签样式 */
+:deep(.approval-opinion .el-form-item__label) {
+  font-weight: bold;
+  color: #606266;
+}
 </style>

+ 1 - 1
src/views/pms/iotrddailyreport/fillDailyReport.vue

@@ -223,7 +223,7 @@ const resetQuery = () => {
 /** 添加/修改操作 */
 const formRef = ref()
 const openForm = (type: string, id?: number) => {
-  push({ name: 'FillDailyReportForm', params:{ id } })
+  push({ name: 'FillDailyReportForm', params:{ id: id,mode: 'fill' } })
 }
 
 /** 删除按钮操作 */

+ 23 - 6
src/views/pms/iotrddailyreport/index.vue

@@ -115,7 +115,7 @@
         :formatter="dateFormatter"
         :width="columnWidths.createTime"
       />
-      <el-table-column label="操作" align="center" min-width="120px">
+      <el-table-column label="操作" align="center" min-width="120px" fixed="right">
         <template #default="scope">
           <el-button
             link
@@ -127,11 +127,11 @@
           </el-button>
           <el-button
             link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-            v-hasPermi="['pms:iot-rd-daily-report:delete']"
+            type="warning"
+            @click="handleApprove(scope.row.id)"
+            v-hasPermi="['pms:iot-rd-daily-report:update']"
           >
-            删除
+            审批
           </el-button>
         </template>
       </el-table-column>
@@ -156,12 +156,13 @@ import { IotRdDailyReportApi, IotRdDailyReportVO } from '@/api/pms/iotrddailyrep
 import IotRdDailyReportForm from './IotRdDailyReportForm.vue'
 import {DICT_TYPE} from "@/utils/dict";
 
+
 /** 瑞都日报 列表 */
 defineOptions({ name: 'IotRdDailyReport' })
 
 const message = useMessage() // 消息弹窗
 const { t } = useI18n() // 国际化
-
+const { push } = useRouter() // 路由跳转
 const loading = ref(true) // 列表的加载中
 const list = ref<IotRdDailyReportVO[]>([]) // 列表的数据
 const total = ref(0) // 列表的总页数
@@ -368,6 +369,22 @@ const openForm = (type: string, id?: number) => {
   formRef.value.open(type, id)
 }
 
+/** 审批按钮操作 */
+const handleApprove = async (id: number) => {
+  try {
+    // 跳转到 FillDailyReportForm 页面,传递审批模式和ID
+    push({
+      name: 'FillDailyReportForm',
+      params: {
+        id: id.toString(),
+        mode: 'approval'  // 添加审批模式标识
+      }
+    })
+  } catch (error) {
+    console.error('跳转审批页面失败:', error)
+  }
+}
+
 /** 删除按钮操作 */
 const handleDelete = async (id: number) => {
   try {