Browse Source

fix: 制度员工选择按企业过滤;修状态常量错误;scope modify EMPLOYEE_SELECT加企业验证

alphah 1 tuần trước cách đây
mục cha
commit
596c51d2fe

+ 10 - 1
backend/app/plugin/module_payment/expense/institution/controller.py

@@ -567,7 +567,16 @@ async def modify_scope_controller(
                     new_employee_ids.add(row[0])
     else:
         raw_new = data.get("add_owner_id_list") or []
-        new_employee_ids = set(str(i) for i in raw_new if i is not None and str(i).strip())
+        # EMPLOYEE_SELECT 模式:验证员工属于当前企业
+        from sqlalchemy import select as _sa_select
+        emp_verify = await auth.db.execute(
+            _sa_select(EmployeeModel.employee_id).where(
+                EmployeeModel.enterprise_id == enterprise_id,
+                EmployeeModel.employee_id.in_([str(i) for i in raw_new if i]),
+            )
+        )
+        validated = [row[0] for row in emp_verify.fetchall() if row[0]]
+        new_employee_ids = set(validated)
 
     # ====== 3. 计算员工级差异(用于配额联动) ======
     add_emp_ids = list(new_employee_ids - old_employee_ids)

+ 1 - 1
backend/app/plugin/module_payment/expense/institution/service.py

@@ -445,7 +445,7 @@ class InstitutionService:
             emp_all = await auth.db.execute(
                 select(EmployeeModel).where(
                     EmployeeModel.enterprise_id == enterprise_id,
-                    EmployeeModel.status == "EMPLOYEE_ACTIVATED",
+                    EmployeeModel.status == "ACTIVATED",
                 )
             )
             emp_by_dept: dict[str, list[str]] = {}

BIN
frontend/dist.zip


+ 2 - 2
frontend/src/views/module_payment/institution/components/EmployeeSelector.vue

@@ -105,6 +105,7 @@ async function fetchEmployees() {
   const params: Record<string, unknown> = {
     page_no: pagination.value.page_no, page_size: pagination.value.page_size,
     enterprise_id: props.enterpriseId,
+    status: "ACTIVATED",
   };
   if (searchForm.value.name) params.employee_name = searchForm.value.name;
   if (searchForm.value.phone) params.employee_mobile = searchForm.value.phone;
@@ -113,13 +114,12 @@ async function fetchEmployees() {
     const data = res?.data?.data || res?.data;
     const list = data?.items || data?.list || [];
     allEmployees.value = list
-      .filter((item: any) => item.status === "ACTIVATED")
       .map((item: any) => ({
         id: item.employee_id || item.id,
         name: item.employee_name || "-",
         phone: item.employee_mobile || "-",
       }));
-    pagination.value.total = allEmployees.value.length;
+    pagination.value.total = data?.total || allEmployees.value.length;
   } catch (e) { console.error(e); }
 }