ME 1 týždeň pred
rodič
commit
3d6f82aefa

+ 99 - 25
src/views/emergency/inspection-add-or-update.vue

@@ -6,23 +6,36 @@
               <el-option :label="item.dictLabel" :value="item.dictValue" v-for="item in state.getDictByKey('inspectionType')"></el-option>
           </el-select>
       </el-form-item>
-          <el-form-item label="开始日期" prop="startDate">
-            <el-date-picker
-            v-model="dataForm.startDate"
-            type="datetime"        
-            placeholder="选择开始日期"
-            value-format="YYYY-MM-DD HH:mm:ss" 
-            style="width: 100%;"
-          ></el-date-picker>
+      <el-form-item label="日巡检-巡检日期" prop="startDate">
+        <el-date-picker
+          v-model="dataForm.startDate"
+          type="date"
+          placeholder="选择日期(日巡检)"
+          value-format="YYYY-MM-DD"
+          style="width: 100%;"
+        />
       </el-form-item>
-          <el-form-item label="结束日期" prop="endDate">
-            <el-date-picker
-            v-model="dataForm.endDate"
-            type="datetime"        
-            placeholder="选择结束日期"
-            value-format="YYYY-MM-DD HH:mm:ss" 
-            style="width: 100%;"
-          ></el-date-picker>
+
+      <!-- 月+周 -->
+      <el-form-item label="周巡检-选择月份">
+        <el-date-picker
+          v-model="selectedMonth"
+          type="month"
+          placeholder="选择月份(周巡检)"
+          value-format="YYYY-MM"
+          @change="updateWeekOptions"
+          style="width: 100%;"
+        />
+      </el-form-item>
+      <el-form-item label="周巡检-选择周次">
+        <el-select v-model="selectedWeek" placeholder="选择周次(周巡检)" clearable>
+          <el-option
+            v-for="(week, index) in weekOptions"
+            :key="index"
+            :label="week.label"
+            :value="week.value"
+          />
+        </el-select>
       </el-form-item>
           <el-form-item label="巡检照片" prop="filePath">
             <el-upload
@@ -57,7 +70,7 @@
 import app from "@/constants/app";
 import { getToken } from "@/utils/cache";
 import { parseTime } from '@/utils/ruoyi'
-import { reactive, ref } from "vue";
+import { reactive, ref, watch } from "vue";
 import baseService from "@/service/baseService";
 import { ElMessage } from "element-plus";
 import { Plus } from '@element-plus/icons-vue'
@@ -66,6 +79,13 @@ const emit = defineEmits(["refreshDataList"]);
 import useView from "@/hooks/useView";
 const state = reactive({ ...useView({}) });
 
+import dayjs from 'dayjs'
+import isoWeek from 'dayjs/plugin/isoWeek'
+dayjs.extend(isoWeek)
+const selectedMonth = ref('');
+const selectedWeek = ref('');
+const weekOptions = ref<{ label: string; value: string }[]>([]);
+
 const action = `${app.api}/sys/oss/upload`;
 const headers = {token:  getToken() }
 const imageUrl = ref('');
@@ -75,15 +95,10 @@ const dataFormRef = ref();
 const dataForm = reactive({
   id: '',  inspectionType: '',  startDate: '',  endDate: '',  filePath: '',  status: '',  creator: '',  createDate: '',  updater: '',  updateDate: '',  remark: ''});
 
+  
 const rules = ref({
           inspectionType: [
       { required: true, message: '必填项不能为空', trigger: 'blur' }
-    ],
-          startDate: [
-      { required: true, message: '必填项不能为空', trigger: 'blur' }
-    ],
-          endDate: [
-      { required: true, message: '必填项不能为空', trigger: 'blur' }
     ],
           status: [
       { required: true, message: '必填项不能为空', trigger: 'blur' }
@@ -97,6 +112,9 @@ const init = (id?: number) => {
   // 重置表单数据
   if (dataFormRef.value) {
     dataFormRef.value.resetFields();
+    selectedMonth.value = '';
+    selectedWeek.value = '';
+    weekOptions.value = [];
     imageUrl.value = '';
   }
 
@@ -131,6 +149,15 @@ const getInfo = (id: number) => {
     dataForm.inspectionType = dataForm.inspectionType + '';
     dataForm.status = dataForm.status + '';
     imageUrl.value = dataForm.filePath;
+    
+    // if (dataForm.inspectionType === 'weekly' && dataForm.endDate) {
+    // const match = dataForm.endDate.match(/^(\d{4}-\d{2}) 第(\d+)周/);
+    // if (match) {
+    //   selectedMonth.value = match[1];
+    //   updateWeekOptions(match[1]);
+    //   selectedWeek.value = weekOptions.value[Number(match[2]) - 1]?.value || '';
+    // }
+
   });
 };
 
@@ -140,10 +167,32 @@ const dataFormSubmitHandle = () => {
     if (!valid) {
       return false;
     }
+    // 判断巡检类型
+    if (dataForm.inspectionType === 'daily') {
+      if (!dataForm.startDate) {
+        return ElMessage.error('日巡检需要选择日期');
+      }
+      // 日巡检只需要 startDate
+      dataForm.startDate = dataForm.startDate ? parseTime(new Date(dataForm.startDate), '{yy}-{mm}-{dd}') : null;
+      dataForm.endDate = '';
+    }
+
+    if (dataForm.inspectionType === 'weekly') {
+      if (!selectedMonth.value || !selectedWeek.value) {
+        return ElMessage.error('周巡检需要选择月份和周次');
+      }
+
+      // 组装格式字符串,例如 "2025-08 第5周"
+      const monthLabel = dayjs(selectedMonth.value).format('YYYY-MM');
+      const weekIndex = weekOptions.value.findIndex(item => item.value === selectedWeek.value);
+      const label = `${monthLabel} 第${weekIndex + 1}周`;
+
+      dataForm.endDate = label;
+      dataForm.startDate = ''; 
+    }
     if(!imageUrl.value) return ElMessage.error('请上传图片');
-    dataForm.startDate = dataForm.startDate ? parseTime(new Date(dataForm.startDate), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
-    dataForm.endDate = dataForm.endDate ? parseTime(new Date(dataForm.endDate), '{yy}-{mm}-{dd} {hh}:{ii}:{ss}') : null;
     dataForm.filePath = imageUrl.value;
+
     (!dataForm.id ? baseService.post : baseService.put)("/emergency/inspection", dataForm).then((res) => {
       ElMessage.success({
         message: '成功',
@@ -157,6 +206,31 @@ const dataFormSubmitHandle = () => {
   });
 };
 
+
+const updateWeekOptions = (val: string) => {
+  if (!val) return;
+
+  const firstDay = dayjs(val + '-01');
+  const totalDays = firstDay.daysInMonth();
+  const weeks: { label: string; value: string }[] = [];
+
+  for (let d = 1; d <= totalDays; d++) {
+    const current = dayjs(`${val}-${String(d).padStart(2, '0')}`);
+    const week = current.isoWeek();
+    const startOfWeek = current.startOf('week').format('YYYY-MM-DD');
+    const endOfWeek = current.endOf('week').format('YYYY-MM-DD');
+
+    if (!weeks.some(w => w.value === String(week))) {
+      weeks.push({
+        label: `第 ${week - dayjs(`${val}-01`).startOf('month').isoWeek() + 1} 周(${startOfWeek} ~ ${endOfWeek})`,
+        value: week.toString(),
+      });
+    }
+  }
+
+  weekOptions.value = weeks;
+};
+
 defineExpose({
   init
 });

+ 12 - 2
src/views/emergency/inspection.vue

@@ -33,8 +33,18 @@
                   {{ state.getDictLabel("inspectionType", scope.row.inspectionType) }}
                 </template>
               </el-table-column>
-              <el-table-column prop="startDate" label="开始日期" header-align="center" align="center"></el-table-column>
-              <el-table-column prop="endDate" label="结束日期" header-align="center" align="center"></el-table-column>
+                <el-table-column label="巡检日期" header-align="center" align="center">
+                  <template v-slot="scope">
+                    <span v-if="scope.row.inspectionType === 'daily'">
+                      {{ scope.row.startDate }}
+                    </span>
+                    <span v-else-if="scope.row.inspectionType === 'weekly'">
+                      {{ scope.row.endDate }}
+                    </span>
+                    <span v-else>-</span>
+                  </template>
+                </el-table-column>
+              <!-- <el-table-column prop="endDate" label="结束日期" header-align="center" align="center"></el-table-column> -->
               <!-- <el-table-column prop="filePath" label="用户上传文件路径" header-align="center" align="center"></el-table-column> -->
               <el-table-column prop="status" label="审阅状态" header-align="center" align="center">
                 <template v-slot="scope">