Sfoglia il codice sorgente

pms 瑞恒日报 编辑

zhangcl 3 settimane fa
parent
commit
fc896e289c

+ 1 - 0
src/api/pms/iotrhdailyreport/index.ts

@@ -8,6 +8,7 @@ export interface IotRhDailyReportVO {
   taskId: number // 任务id
   projectClassification: string // 项目类别(钻井 修井 注氮 酸化压裂... )
   relocationDays: number // 搬迁安装天数
+  designInjection: number // 设计注气量
   transitTime: number // 运行时效
   dailyGasInjection: number // 当日注气量(万方)
   dailyWaterInjection: number // 当日注水量(方)

+ 131 - 93
src/views/pms/iotrhdailyreport/IotRhDailyReportForm.vue

@@ -4,127 +4,65 @@
       ref="formRef"
       :model="formData"
       :rules="formRules"
-      label-width="100px"
+      label-width="120px"
       v-loading="formLoading"
     >
-      <el-form-item label="施工队伍id" prop="deptId">
-        <el-input v-model="formData.deptId" placeholder="请输入施工队伍id" />
+      <el-form-item label="施工队伍" prop="deptName">
+        <el-input v-model="displayData.deptName" placeholder="" disabled/>
       </el-form-item>
-      <el-form-item label="项目id" prop="projectId">
-        <el-input v-model="formData.projectId" placeholder="请输入项目id" />
+      <el-form-item label="项目" prop="contractName">
+        <el-input v-model="displayData.contractName" placeholder="" disabled/>
       </el-form-item>
-      <el-form-item label="任务id" prop="taskId">
-        <el-input v-model="formData.taskId" placeholder="请输入任务id" />
+      <el-form-item label="任务" prop="taskName">
+        <el-input v-model="displayData.taskName" placeholder="" disabled/>
       </el-form-item>
-      <el-form-item label="项目类别(钻井 修井 注氮 酸化压裂... )" prop="projectClassification">
-        <el-input v-model="formData.projectClassification" placeholder="请输入项目类别(钻井 修井 注氮 酸化压裂... )" />
-      </el-form-item>
-      <el-form-item label="搬迁安装天数" prop="relocationDays">
-        <el-input v-model="formData.relocationDays" placeholder="请输入搬迁安装天数" />
+      <el-form-item label="搬迁安装天数(D)" prop="relocationDays">
+        <el-input v-model="formData.relocationDays" placeholder="" disabled/>
       </el-form-item>
       <el-form-item label="运行时效" prop="transitTime">
-        <el-date-picker
-          v-model="formData.transitTime"
-          type="date"
-          value-format="x"
-          placeholder="选择运行时效"
-        />
+        <el-input v-model="displayTransitTime" placeholder="" disabled
+                  :class="{'red-text': isTransitTimeOver}"
+                  id="transitTimeInput" />
       </el-form-item>
-      <el-form-item label="当日注气量(方)" prop="dailyGasInjection">
-        <el-input v-model="formData.dailyGasInjection" placeholder="请输入当日注气量(方)" />
+      <el-form-item label="当日注气量(方)" prop="dailyGasInjection">
+        <el-input v-model="formData.dailyGasInjection" placeholder="请输入当日注气量(方)" @change="calculateTransitTime"/>
       </el-form-item>
       <el-form-item label="当日注水量(方)" prop="dailyWaterInjection">
         <el-input v-model="formData.dailyWaterInjection" placeholder="请输入当日注水量(方)" />
       </el-form-item>
       <el-form-item label="当日注气时间(H)" prop="dailyInjectGasTime">
-        <el-date-picker
-          v-model="formData.dailyInjectGasTime"
-          type="date"
-          value-format="x"
-          placeholder="选择当日注气时间(H)"
-        />
+        <el-input v-model="formData.dailyInjectGasTime" placeholder="请输入当日注气时间(H)" />
       </el-form-item>
       <el-form-item label="当日注水时间(H)" prop="dailyInjectWaterTime">
-        <el-date-picker
-          v-model="formData.dailyInjectWaterTime"
-          type="date"
-          value-format="x"
-          placeholder="选择当日注水时间(H)"
-        />
+        <el-input v-model="formData.dailyInjectWaterTime" placeholder="当日注水时间(H)" />
       </el-form-item>
       <el-form-item label="非生产时间(H)" prop="nonProductionTime">
-        <el-date-picker
-          v-model="formData.nonProductionTime"
-          type="date"
-          value-format="x"
-          placeholder="选择非生产时间(H)"
-        />
+        <el-input v-model="formData.nonProductionTime" placeholder="" disabled/>
       </el-form-item>
       <el-form-item label="非生产时间原因" prop="nptReason">
-        <el-input v-model="formData.nptReason" placeholder="请输入非生产时间原因" />
-      </el-form-item>
-      <el-form-item label="施工开始日期" prop="constructionStartDate">
-        <el-date-picker
-          v-model="formData.constructionStartDate"
-          type="date"
-          value-format="x"
-          placeholder="选择施工开始日期"
-        />
-      </el-form-item>
-      <el-form-item label="施工结束日期" prop="constructionEndDate">
-        <el-date-picker
-          v-model="formData.constructionEndDate"
-          type="date"
-          value-format="x"
-          placeholder="选择施工结束日期"
-        />
-      </el-form-item>
-      <el-form-item label="当日生产情况生产动态" prop="productionStatus">
-        <el-radio-group v-model="formData.productionStatus">
-          <el-radio value="1">请选择字典生成</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="下步工作计划" prop="nextPlan">
-        <el-input v-model="formData.nextPlan" placeholder="请输入下步工作计划" />
-      </el-form-item>
-      <el-form-item label="施工状态(动迁 准备 施工 完工)" prop="constructionStatus">
-        <el-radio-group v-model="formData.constructionStatus">
-          <el-radio value="1">请选择字典生成</el-radio>
-        </el-radio-group>
+        <el-select v-model="formData.nptReason" placeholder="请选择" clearable disabled>
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.PMS_PROJECT_NPT_REASON)"
+            :key="dict.id"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
       </el-form-item>
-      <el-form-item label="人员情况" prop="personnel">
-        <el-input v-model="formData.personnel" placeholder="请输入人员情况" />
+      <el-form-item label="生产动态" prop="productionStatus">
+        <el-input v-model="formData.productionStatus" placeholder="请输入生产动态" type="textarea"/>
       </el-form-item>
       <el-form-item label="累计注气量(万方)" prop="totalGasInjection">
-        <el-input v-model="formData.totalGasInjection" placeholder="请输入累计注气量(万方)" />
+        <el-input v-model="formData.totalGasInjection" placeholder="" disabled/>
       </el-form-item>
       <el-form-item label="累计注水量(方)" prop="totalWaterInjection">
-        <el-input v-model="formData.totalWaterInjection" placeholder="请输入累计注水量(方)" />
+        <el-input v-model="formData.totalWaterInjection" placeholder="请输入累计注水量(方)" disabled/>
       </el-form-item>
       <el-form-item label="累计完工井次" prop="cumulativeCompletion">
-        <el-input v-model="formData.cumulativeCompletion" placeholder="请输入累计完工井次" />
-      </el-form-item>
-      <el-form-item label="不同专业公司的扩展属性值" prop="extProperty">
-        <el-input v-model="formData.extProperty" placeholder="请输入不同专业公司的扩展属性值" />
-      </el-form-item>
-      <el-form-item label="排序值" prop="sort">
-        <el-input v-model="formData.sort" placeholder="请输入排序值" />
+        <el-input v-model="formData.cumulativeCompletion" placeholder="请输入累计完工井次" disabled/>
       </el-form-item>
       <el-form-item label="备注" prop="remark">
-        <el-input v-model="formData.remark" placeholder="请输入备注" />
-      </el-form-item>
-      <el-form-item label="状态(0启用 1禁用)" prop="status">
-        <el-radio-group v-model="formData.status">
-          <el-radio value="1">请选择字典生成</el-radio>
-        </el-radio-group>
-      </el-form-item>
-      <el-form-item label="流程实例id" prop="processInstanceId">
-        <el-input v-model="formData.processInstanceId" placeholder="请输入流程实例id" />
-      </el-form-item>
-      <el-form-item label="审批状态 未提交、审批中、审批通过、审批不通过、已取消" prop="auditStatus">
-        <el-radio-group v-model="formData.auditStatus">
-          <el-radio value="1">请选择字典生成</el-radio>
-        </el-radio-group>
+        <el-input v-model="formData.remark" placeholder="请输入备注" type="textarea"/>
       </el-form-item>
     </el-form>
     <template #footer>
@@ -135,6 +73,8 @@
 </template>
 <script setup lang="ts">
 import { IotRhDailyReportApi, IotRhDailyReportVO } from '@/api/pms/iotrhdailyreport'
+import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
+import { computed, ref, watch, nextTick } from 'vue'
 
 /** 瑞恒日报 表单 */
 defineOptions({ name: 'IotRhDailyReportForm' })
@@ -142,10 +82,35 @@ defineOptions({ name: 'IotRhDailyReportForm' })
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 
+// 添加 props 接收行数据
+const props = defineProps({
+  rowData: {
+    type: Object,
+    default: () => ({})
+  }
+})
+
+// 监听 props.rowData 的变化
+watch(() => props.rowData, (newVal) => {
+  if (newVal) {
+    displayData.value.deptName = newVal.deptName || ''
+    displayData.value.contractName = newVal.contractName || ''
+    displayData.value.taskName = newVal.taskName || ''
+  }
+}, { immediate: true })
+
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
+
+// 添加显示数据对象
+const displayData = ref({
+  deptName: '',
+  contractName: '',
+  taskName: ''
+})
+
 const formData = ref({
   id: undefined,
   deptId: undefined,
@@ -175,22 +140,72 @@ const formData = ref({
   status: undefined,
   processInstanceId: undefined,
   auditStatus: undefined,
+  capacity: undefined
 })
 const formRules = reactive({
 })
 const formRef = ref() // 表单 Ref
 
+// 计算运行时效的显示值和颜色
+const displayTransitTime = computed(() => {
+  if (!formData.value.transitTime) return ''
+  return `${(formData.value.transitTime * 100).toFixed(2)}%`
+})
+
+const transitTimeColor = computed(() => {
+  console.log('当前运行时效的值是否大于1.2:' + (parseFloat(formData.value.transitTime) > 1.2))
+  return formData.value.transitTime && parseFloat(formData.value.transitTime) > 1.2 ? 'red' : ''
+})
+
+// 修改为返回布尔值的计算属性,便于在模板中使用class绑定
+const isTransitTimeOver = computed(() => {
+  const transitTime = Number(formData.value.transitTime)
+  console.log('运行时效值:', transitTime, '是否大于1.2:', transitTime > 1.2)
+  return transitTime > 1.2
+})
+
+// 计算运行时效的方法
+const calculateTransitTime = () => {
+  if (!formData.value.capacity) {
+    message.error('请维护增压机产能')
+    return
+  }
+
+  if (formData.value.dailyGasInjection) {
+    const dailyGas = parseFloat(formData.value.dailyGasInjection)
+    const capacity = parseFloat(formData.value.capacity)
+    formData.value.transitTime = dailyGas / capacity
+  } else {
+    formData.value.transitTime = 0
+  }
+}
+
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
+
+  // 设置显示数据
+  if (props.rowData) {
+    displayData.value.deptName = props.rowData.deptName || ''
+    displayData.value.contractName = props.rowData.contractName || ''
+    displayData.value.taskName = props.rowData.taskName || ''
+  }
+
   // 修改时,设置数据
   if (id) {
     formLoading.value = true
     try {
       formData.value = await IotRhDailyReportApi.getIotRhDailyReport(id)
+      // 检查产能是否存在
+      if (!formData.value.capacity) {
+        message.error('请维护增压机产能')
+      } else {
+        // 计算运行时效
+        calculateTransitTime()
+      }
     } finally {
       formLoading.value = false
     }
@@ -203,6 +218,13 @@ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成
 const submitForm = async () => {
   // 校验表单
   await formRef.value.validate()
+
+  // 检查产能
+  if (!formData.value.capacity) {
+    message.error('请维护增压机产能')
+    return
+  }
+
   // 提交请求
   formLoading.value = true
   try {
@@ -253,7 +275,23 @@ const resetForm = () => {
     status: undefined,
     processInstanceId: undefined,
     auditStatus: undefined,
+    capacity: undefined
   }
+
+  displayData.value = {
+    deptName: '',
+    contractName: '',
+    taskName: ''
+  }
+
   formRef.value?.resetFields()
 }
 </script>
+
+<style scoped>
+/* 添加红色文本样式,使用深度选择器覆盖Element UI的disabled状态样式 */
+:deep(.red-text .el-input__inner) {
+  color: red !important;
+  -webkit-text-fill-color: red !important;
+}
+</style>

+ 22 - 5
src/views/pms/iotrhdailyreport/index.vue

@@ -83,6 +83,7 @@
           </template>
         </el-table-column>
         <el-table-column label="搬迁安装天数" align="center" prop="relocationDays" :width="columnWidths.relocationDays"/>
+        <el-table-column label="设计注气量(万方)" align="center" prop="designInjection" :width="columnWidths.designInjection"/>
         <el-table-column label="运行时效" align="center" prop="transitTime" :width="columnWidths.transitTime" :formatter="percentageFormatter"/>
         <el-table-column label="当日注气量(万方)" align="center" prop="dailyGasInjection"
                          :width="columnWidths.dailyGasInjection" :formatter="gasInjectionFormatter"/>
@@ -114,12 +115,12 @@
                          :width="columnWidths.totalGasInjection" :formatter="gasInjectionFormatter"/>
         <el-table-column label="累计注水量(方)" align="center" prop="totalWaterInjection" :width="columnWidths.totalWaterInjection"/>
         <el-table-column label="累计完工井次" align="center" prop="cumulativeCompletion" :width="columnWidths.cumulativeCompletion"/>
-        <el-table-column label="操作" align="center" :width="columnWidths.operation">
+        <el-table-column label="操作" align="center" :width="columnWidths.operation" fixed="right">
           <template #default="scope">
             <el-button
               link
               type="primary"
-              @click="openForm('update', scope.row.id)"
+              @click="openForm('update', scope.row.id, scope.row)"
               v-hasPermi="['pms:iot-rh-daily-report:update']"
             >
               编辑
@@ -146,7 +147,7 @@
   </ContentWrap>
 
   <!-- 表单弹窗:添加/修改 -->
-  <IotRhDailyReportForm ref="formRef" @success="getList" />
+  <IotRhDailyReportForm ref="formRef" @success="getList" :row-data="selectedRowData"/>
 </template>
 
 <script setup lang="ts">
@@ -163,6 +164,9 @@ defineOptions({ name: 'IotRhDailyReport' })
 const message = useMessage() // 消息弹窗
 const { t } = useI18n() // 国际化
 
+// 添加 selectedRowData 响应式变量
+const selectedRowData = ref<Record<string, any> | null>(null)
+
 const loading = ref(true) // 列表的加载中
 const list = ref<IotRhDailyReportVO[]>([]) // 列表的数据
 const total = ref(0) // 列表的总页数
@@ -215,6 +219,7 @@ const columnWidths = ref({
   taskName: '120px',
   constructionStatus: '110px',
   relocationDays: '120px',
+  designInjection: '120px',
   transitTime: '100px',
   dailyGasInjection: '150px',
   dailyWaterInjection: '150px',
@@ -257,7 +262,7 @@ const percentageFormatter = (row: any, column: any, cellValue: any, index: numbe
 };
 
 // 可伸缩列配置
-const FLEXIBLE_COLUMNS = ['deptName', 'contractName', 'taskName', 'constructionStatus', 'relocationDays',
+const FLEXIBLE_COLUMNS = ['deptName', 'contractName', 'taskName', 'constructionStatus', 'relocationDays', 'designInjection',
   'transitTime', 'dailyGasInjection', 'dailyWaterInjection', 'dailyPowerUsage', 'dailyInjectGasTime',
   'dailyInjectWaterTime', 'nonProductionTime', 'nptReason', 'constructionStartDate',
   'constructionEndDate', 'totalGasInjection', 'totalWaterInjection',
@@ -363,6 +368,7 @@ const calculateColumnWidths = () => {
     return String(row.constructionStatus || '');
   });
   calculateColumnMinWidth('relocationDays', '搬迁安装天数', (row: any) => row.relocationDays);
+  calculateColumnMinWidth('designInjection', '设计注气量(万方)', (row: any) => row.designInjection);
   calculateColumnMinWidth('transitTime', '运行时效', (row: any) => row.transitTime);
   calculateColumnMinWidth('dailyGasInjection', '当日注气量(万方)', (row: any) => row.dailyGasInjection);
   calculateColumnMinWidth('dailyWaterInjection', '当日注水量(方)', (row: any) => row.dailyWaterInjection);
@@ -426,7 +432,18 @@ const resetQuery = () => {
 
 /** 添加/修改操作 */
 const formRef = ref()
-const openForm = (type: string, id?: number) => {
+const openForm = (type: string, id?: number, row?: any) => {
+  // 保存当前行数据
+  if (row) {
+    selectedRowData.value = {
+      deptName: row.deptName,
+      contractName: row.contractName,
+      taskName: row.taskName
+    }
+  } else {
+    selectedRowData.value = null
+  }
+
   formRef.value.open(type, id)
 }