From 021f2421448ce16e2c6331caac0d2300683a36bd Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期五, 06 三月 2026 16:56:06 +0800
Subject: [PATCH] Merge branch 'dev_New' of http://114.132.189.42:9002/r/product-inventory-management into dev_New

---
 src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue |   70 +++++++++++++++++++++++++++++++----
 1 files changed, 62 insertions(+), 8 deletions(-)

diff --git a/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue b/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
index 39eacda..a410be0 100644
--- a/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
+++ b/src/views/personnelManagement/attendanceCheckin/checkinRules/components/form.vue
@@ -18,7 +18,7 @@
                         placeholder="璇烽�夋嫨閮ㄩ棬"
                         check-strictly
                         style="width: 100%"
-                        :disabled="operationType === 'view'" />
+                        :disabled="['edit', 'view'].includes(operationType)" />
       </el-form-item>
       <!-- 鍦扮偣淇℃伅 -->
       <!-- <el-form-item label="鍦扮偣鍚嶇О"
@@ -28,6 +28,18 @@
                   :disabled="operationType === 'view'" />
       </el-form-item> -->
       <!-- 鎵撳崱鑼冨洿 -->
+      <el-form-item label="鐝"
+                    prop="shift">
+        <el-select v-model="form.shift"
+                   placeholder="璇烽�夋嫨鐝"
+                   :disabled="operationType === 'view'"
+                   style="width: 100%">
+          <el-option v-for="item in shifts_list"
+                     :key="item.value"
+                     :label="item.label"
+                     :value="item.value" />
+        </el-select>
+      </el-form-item>
       <el-form-item label="鎵撳崱鑼冨洿(m)"
                     prop="radius">
         <el-input-number v-model="form.radius"
@@ -43,13 +55,13 @@
         <div class="map-container">
           <div class="map-header"
                style="margin-bottom: 10px">
-            <el-button @click="getCurrentLocation">
+            <!-- <el-button @click="getCurrentLocation">
               <el-icon>
                 <Position />
               </el-icon>
               褰撳墠浣嶇疆
-            </el-button>
-            <span style="margin-left: 10px; color: #909399;font-size: 12px;">鐐瑰嚮鍦板浘閫夋嫨浣嶇疆</span>
+            </el-button> -->
+            <!-- <span style="margin-left: 10px; color: #909399;font-size: 12px;">鐐瑰嚮鍦板浘閫夋嫨浣嶇疆</span> -->
           </div>
           <div id="map-container"
                class="map"
@@ -89,6 +101,9 @@
         <el-time-picker v-model="form.endAt"
                         format="HH:mm"
                         value-format="HH:mm"
+                        :picker-options="{
+      minTime: form.startAt
+    }"
                         placeholder="璇烽�夋嫨涓嬬彮鏃堕棿"
                         :disabled="operationType === 'view'" />
       </el-form-item>
@@ -112,6 +127,7 @@
   import { Position } from "@element-plus/icons-vue";
   import { deptTreeSelect } from "@/api/system/user.js";
   import { addAttendanceRule } from "@/api/personnelManagement/attendanceRules.js";
+  import { useDict } from "@/utils/dict";
 
   const props = defineProps({
     modelValue: {
@@ -127,6 +143,7 @@
       default: () => ({}),
     },
   });
+  // const pickerOptions = ref({ minTime: form.value.startAt });
 
   const emit = defineEmits(["update:modelValue", "close"]);
 
@@ -136,10 +153,13 @@
   });
 
   const dialogTitle = computed(() => {
-    if (props.operationType === "add") return "鏂板鎵撳崱瑙勫垯";
-    if (props.operationType === "edit") return "缂栬緫鎵撳崱瑙勫垯";
-    return "鏌ョ湅鎵撳崱瑙勫垯";
+    if (props.operationType === "add") return "鏂板鐝";
+    if (props.operationType === "edit") return "缂栬緫鐝";
+    return "鏌ョ湅鐝";
   });
+
+  // 鑾峰彇鐝瀛楀吀鍊�
+  const { shifts_list } = useDict("shifts_list");
 
   // 琛ㄥ崟鏁版嵁
   const formRef = ref();
@@ -152,6 +172,7 @@
     radius: 100,
     startAt: "09:00",
     endAt: "18:00",
+    shift: "",
   });
 
   // 琛ㄥ崟楠岃瘉瑙勫垯
@@ -162,9 +183,31 @@
     ],
     longitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
     latitude: [{ required: true, message: "璇烽�夋嫨鎵撳崱浣嶇疆", trigger: "blur" }],
+    shift: [{ required: true, message: "璇烽�夋嫨鐝", trigger: "change" }],
     radius: [{ required: true, message: "璇疯緭鍏ユ墦鍗¤寖鍥�", trigger: "blur" }],
     startAt: [{ required: true, message: "璇烽�夋嫨涓婄彮鏃堕棿", trigger: "change" }],
-    endAt: [{ required: true, message: "璇烽�夋嫨涓嬬彮鏃堕棿", trigger: "change" }],
+    endAt: [
+      { required: true, message: "璇烽�夋嫨涓嬬彮鏃堕棿", trigger: "change" },
+      {
+        validator: (rule, value, callback) => {
+          if (form.startAt && value) {
+            const startParts = form.startAt.split(":");
+            const endParts = value.split(":");
+            const startTime =
+              parseInt(startParts[0]) * 60 + parseInt(startParts[1]);
+            const endTime = parseInt(endParts[0]) * 60 + parseInt(endParts[1]);
+            if (endTime <= startTime) {
+              callback(new Error("涓嬬彮鏃堕棿涓嶈兘鏃╀簬涓婄彮鏃堕棿"));
+            } else {
+              callback();
+            }
+          } else {
+            callback();
+          }
+        },
+        trigger: "change",
+      },
+    ],
   };
 
   // 閮ㄩ棬閫夐」
@@ -355,6 +398,16 @@
     }
   );
 
+  // 鐩戝惉涓婄彮鏃堕棿鍙樺寲锛岃Е鍙戜笅鐝椂闂存牎楠�
+  watch(
+    () => form.startAt,
+    () => {
+      if (formRef.value && form.endAt) {
+        formRef.value.validateField("endAt");
+      }
+    }
+  );
+
   // 鐩戝惉寮圭獥鏄剧ず
   watch(
     () => dialogVisible.value,
@@ -370,6 +423,7 @@
           radius: 100,
           startAt: "09:00",
           endAt: "18:00",
+          shift: "",
         });
 
         // 濡傛灉鏄紪杈戞垨鏌ョ湅锛屽~鍏呮暟鎹�

--
Gitblit v1.9.3