Ver código fonte

任务查看瑞都日报,添加生成日报按钮

Zimo 12 horas atrás
pai
commit
66d3ea55d0

+ 11 - 0
src/api/pms/iotprojecttask/index.ts

@@ -13,6 +13,12 @@ export interface IotProjectTaskVO {
   userId: number // 用户id
   remark: string // 备注
   deptIds: []
+  deptId?: number // 施工队伍id
+}
+
+export interface GenerateReportParams {
+  id: number
+  reportDate: number
 }
 
 // 项目信息任务拆分 API
@@ -39,6 +45,11 @@ export const IotProjectTaskApi = {
     return await request.put({ url: `/rq/iot-project-task/update`, data })
   },
 
+  // 生成日报
+  generateReport: async (data: GenerateReportParams) => {
+    return await request.post({ url: `/rq/iot-project-task/generateReport`, data })
+  },
+
   // 删除项目信息任务拆分
   deleteIotProjectTask: async (id: number) => {
     return await request.delete({ url: `/rq/iot-project-task/delete?id=` + id })

+ 82 - 3
src/views/pms/iotprojecttask/index.vue

@@ -208,6 +208,14 @@
             >
               计划
             </el-button>
+            <el-button
+              v-if="Number(scope.row.deptId) === REPORT_DEPT_ID"
+              link
+              type="primary"
+              @click="openGenerateReportDialog(scope.row)"
+            >
+              生成日报
+            </el-button>
             <el-button
               link
               type="primary"
@@ -312,6 +320,36 @@
       </span>
     </template>
   </el-dialog>
+
+  <!-- 生成日报 Dialog -->
+  <el-dialog v-model="generateReportDialogVisible" title="生成日报" width="420px">
+    <el-form size="default" label-width="80px">
+      <el-form-item label="日报日期" required>
+        <el-date-picker
+          v-model="reportDate"
+          type="date"
+          placeholder="请选择日期"
+          value-format="YYYY-MM-DD"
+          format="YYYY-MM-DD"
+          class="w-full!"
+        />
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button size="default" @click="generateReportDialogVisible = false">取消</el-button>
+        <el-button
+          size="default"
+          type="primary"
+          @click="submitGenerateReport"
+          :loading="generateReportLoading"
+        >
+          确定
+        </el-button>
+      </span>
+    </template>
+  </el-dialog>
 </template>
 
 <script setup lang="ts">
@@ -366,6 +404,7 @@ const exportLoading = ref(false) // 导出的加载中
 const { push } = useRouter() // 路由跳转
 
 const COMPLETED_STATUS = 'wg'
+const REPORT_DEPT_ID = 163
 
 // 表格引用
 const tableRef = ref()
@@ -385,7 +424,7 @@ const columnWidths = ref({
   technique: '100px',
   workloadDesign: '100px',
   createTime: '150px',
-  operation: '200px'
+  operation: '260px'
 })
 
 // 计算文本宽度
@@ -418,6 +457,12 @@ const companyDeptList = ref<any[]>([]) // 在公司级部门列表
 const wellTypeDictOptions = ref<any[]>([]) // 井型字典选项
 const technologyDictOptions = ref<any[]>([]) // 施工工艺字典选项
 
+// 生成日报相关状态
+const generateReportDialogVisible = ref(false)
+const generateReportLoading = ref(false)
+const generateReportRow = ref<IotProjectTaskVO | null>(null)
+const reportDate = ref('')
+
 /** 获取井型字典数据 */
 const getWellTypeDictOptions = async () => {
   try {
@@ -571,6 +616,40 @@ const savePlan = async () => {
   }
 }
 
+/** 打开生成日报对话框 */
+const openGenerateReportDialog = (row: IotProjectTaskVO) => {
+  generateReportRow.value = row
+  reportDate.value = ''
+  generateReportDialogVisible.value = true
+}
+
+/** 生成日报 */
+const submitGenerateReport = async () => {
+  if (!generateReportRow.value?.id) {
+    message.error('未找到任务信息')
+    return
+  }
+  if (!reportDate.value) {
+    message.error('请选择日报日期')
+    return
+  }
+
+  try {
+    generateReportLoading.value = true
+    await IotProjectTaskApi.generateReport({
+      id: generateReportRow.value.id,
+      reportDate: dayjs(reportDate.value).valueOf()
+    })
+    message.success('生成日报成功')
+    generateReportDialogVisible.value = false
+  } catch (error) {
+    message.error('生成日报失败')
+    console.error('生成日报失败:', error)
+  } finally {
+    generateReportLoading.value = false
+  }
+}
+
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -663,8 +742,8 @@ const calculateColumnWidths = () => {
   )
 
   // 操作列固定宽度
-  minWidths.operation = 200
-  totalMinWidth += 200
+  minWidths.operation = 260
+  totalMinWidth += 260
 
   // 2. 计算可伸缩列最终宽度
   const newWidths: Record<string, string> = {}