longz
2026-06-29 9d4cbff7464ebfd7803c2ce53ded49d0f73fe011
frontend-admin/src/views/StaffEmployeesView.vue
@@ -62,12 +62,6 @@
              />
            </el-select>
          </el-form-item>
          <el-form-item label="职位">
            <el-select v-model="filters.position" placeholder="请选择" clearable>
              <el-option label="部门负责人" value="LEADER" />
              <el-option label="员工" value="STAFF" />
            </el-select>
          </el-form-item>
          <el-form-item label="状态">
            <el-select v-model="filters.status" placeholder="请选择" clearable>
              <el-option label="启用" :value="1" />
@@ -117,7 +111,6 @@
          <el-table-column prop="staffNo" label="员工编号" width="120" show-overflow-tooltip />
          <el-table-column prop="mobileMasked" label="联系方式" width="130" />
          <el-table-column prop="deptName" label="所属部门" min-width="120" show-overflow-tooltip />
          <el-table-column prop="positionLabel" label="所属职位" width="120" />
          <el-table-column prop="groupDisplay" label="所属分组" min-width="170" show-overflow-tooltip />
          <el-table-column label="状态" width="92">
            <template #default="{ row }">
@@ -208,12 +201,6 @@
              class="fullw"
            />
          </el-form-item>
          <el-form-item label="职位" required>
            <el-radio-group v-model="form.deptLeader">
              <el-radio :label="false">员工</el-radio>
              <el-radio :label="true">部门负责人</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item v-if="detailGroupNames.length" label="所属分组">
            <div class="group-tags">
              <el-tag v-for="g in detailGroupNames" :key="g" size="small" class="g-tag">{{ g }}</el-tag>
@@ -242,6 +229,7 @@
import { Refresh, Search } from "@element-plus/icons-vue";
import type { UploadRequestOptions } from "element-plus";
import http from "../api/http";
import { normalizeFormData } from "../utils/formHelper";
type DeptTree = { id: number; label: string; children?: DeptTree[] };
type StaffRow = {
@@ -276,7 +264,6 @@
  realName: "",
  staffNo: "",
  mobile: "",
  position: "" as string,
  status: undefined as number | undefined,
  staffGroupId: undefined as number | undefined,
});
@@ -384,7 +371,6 @@
    realName: filters.realName?.trim() || undefined,
    staffNo: filters.staffNo?.trim() || undefined,
    mobile: filters.mobile?.trim() || undefined,
    position: filters.position || undefined,
    status: filters.status,
    staffGroupId: filters.staffGroupId,
  };
@@ -412,7 +398,6 @@
  filters.realName = "";
  filters.staffNo = "";
  filters.mobile = "";
  filters.position = "";
  filters.status = undefined;
  filters.staffGroupId = undefined;
  page.value = 1;
@@ -478,14 +463,14 @@
  }
  saving.value = true;
  try {
    const body = {
    const body = normalizeFormData({
      nickName: form.nickName.trim(),
      staffNo: form.staffNo.trim() || undefined,
      avatarUrl: form.avatarUrl.trim() || undefined,
      mobile: form.mobile.trim(),
      deptId: form.deptId,
      deptLeader: form.deptLeader,
    };
      deptLeader: false,
    });
    if (editingId.value == null) {
      await http.post("/sys/staff", body);
      ElMessage.success("已添加");
@@ -627,6 +612,9 @@
.dept-panel {
  padding: 14px 12px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.content-panel {
@@ -642,14 +630,18 @@
  font-size: 18px;
  font-weight: 700;
  margin-bottom: 14px;
  flex-shrink: 0;
}
.dept-search {
  margin-bottom: 14px;
  flex-shrink: 0;
}
.dept-tree-wrap {
  min-height: 520px;
  flex: 1;
  overflow-y: auto;
  min-height: 0;
}
.dept-all {