diff --git a/src/components/contract.vue b/src/components/contract.vue index 97a85d3..b863aa0 100644 --- a/src/components/contract.vue +++ b/src/components/contract.vue @@ -12,7 +12,7 @@ import { getSimpleCustomerList } from '../api/customer' import { getEmployeeList } from '../api/employee' import { getSimpleSupplierList } from '../api/suppliers' import { formatDateTime, formatDate } from "../utils/date" -import { hasPermission, getUserInfo } from '../store/user' +import { hasPermission, getUserInfo, getRoleLevel } from '../store/user' const search = ref('') const select = ref('1') @@ -42,6 +42,18 @@ const isFranchiseManager = computed(() => getUserInfo()?.departmentName === 'fra //是否是管理员 const isAdmin = computed(() => getUserInfo()?.departmentName === 'admin') +// 是否是一般专员(role_level === 4) +const isGeneralStaff = computed(() => getRoleLevel() === 4) + +// 招商部专员:锁定业务员为自己 +const isFranchiseStaff = computed(() => isFranchiseManager.value && isGeneralStaff.value) + +// 采购部专员:锁定业务员为自己 +const isProcurementStaff = computed(() => isProcurementManager.value && isGeneralStaff.value) + +// 业务员字段是否锁定 +const isEmployeeLocked = computed(() => isFranchiseStaff.value || isProcurementStaff.value) + const getDefaultType = () => { if (isProcurementManager.value) return 'supply' if (isFranchiseManager.value) return 'franchise' @@ -544,9 +556,10 @@ const canDeleteRow = (row) => { - + +
专员无法修改业务员,已锁定为自己
@@ -673,4 +686,11 @@ const canDeleteRow = (row) => { .detail-content { padding: 10px 0; } + +.field-hint { + font-size: 12px; + color: #909399; + margin-top: 4px; + line-height: 1.4; +} \ No newline at end of file diff --git a/src/components/employee.vue b/src/components/employee.vue index ea6a326..ddac0e4 100644 --- a/src/components/employee.vue +++ b/src/components/employee.vue @@ -11,7 +11,7 @@ import { getDepartmentList, getSimpleEmployeeList } from '../api/employee' -import { hasPermission, getUserInfo } from '../store/user' +import { hasPermission, getUserInfo, getRoleLevel } from '../store/user' import { formatDateTime, formatDate } from '../utils/date' import { createUser } from '../api/user' import { DEPARTMENT_NAME_LIST, DEPARTMENT_LIST } from '../constants/departments' @@ -28,7 +28,8 @@ const form = reactive({ phone: '', email: '', status: 1, - remark: '' + remark: '', + role_level: 4 // 默认一般专员 }) const search = ref('') @@ -60,7 +61,22 @@ const userForm = reactive({ name: '', department_id: 2, is_active: 1, - employee_id: null + employee_id: null, + role_level: 4 +}) + +// 角色级别选项 +const roleLevelOptions = computed(() => { + if (form.department === '总经理办公室') { + // 总经理办公室只能选择副总经理 + return [{ value: 2, label: '副总经理' }] + } + // 一般部门没有总经理,只有部门经理以下三级 + return [ + { value: 2, label: '部门经理' }, + { value: 3, label: '部门副经理' }, + { value: 4, label: '一般专员' } + ] }) // 部门列表 @@ -69,6 +85,18 @@ const departmentOptions = ref([...DEPARTMENT_NAME_LIST]) // 学历列表 const educationOptions = ['高中', '专科', '本科', '硕士', '博士'] +// 职务选项(根据部门动态变化) +const positionOptions = computed(() => { + if (form.department === '总经理办公室') { + // 总经理办公室只能选择副总经理,总经理是系统预设的 + return ['副总经理'] + } + return [] // 其他部门自由输入 +}) + +// 是否锁定职务选择 +const isPositionLocked = computed(() => form.department === '总经理办公室') + // 分页后的数据(服务端已分页,searchResults 即为当前页数据) const paginatedData = computed(() => searchResults.value) @@ -80,6 +108,16 @@ watch([filterStatus, filterDepartment], () => { handleSearch() }) +// 监听部门变化:总经理办公室自动锁定职位为副总经理,重置角色级别 +watch(() => form.department, (val) => { + if (val === '总经理办公室') { + form.position = '副总经理' + form.role_level = 2 // 副总经理 + } else { + form.role_level = 4 // 默认一般专员 + } +}) + // 监听筛选变化时重置页码(服务端分页:已由 filterStatus watch 处理) // watch(searchResults 不再重置页码,避免翻页后被重置回第 1 页 @@ -175,6 +213,7 @@ const resetForm = () => { form.email = '' form.status = 1 form.remark = '' + form.role_level = 4 isEditMode.value = false currentEmployeeId.value = null } @@ -220,7 +259,8 @@ const saveEmployee = async () => { phone: form.phone, email: form.email, status: form.status, - remark: form.remark + remark: form.remark, + role_level: form.role_level } try { @@ -355,7 +395,8 @@ const saveUserFromEmployee = async () => { password: userForm.password, department_id: userForm.department_id, employee_id: empId, - is_active: userForm.is_active + is_active: userForm.is_active, + role_level: userForm.role_level } await createUser(payload) ElMessage.success('用户创建成功') @@ -377,6 +418,7 @@ const cancelCreateUser = () => { userForm.department_id = 2 userForm.is_active = 1 userForm.employee_id = null + userForm.role_level = 4 showSearchResults.value = true } @@ -387,6 +429,38 @@ const canDelete = computed(() => hasPermission('employee', 'delete')) const canOperate = computed(() => canUpdate.value || canDelete.value) const showSalary = computed(() => ['总经理办公室', '财务部'].includes(getUserInfo()?.departmentDesc)) +// 获取当前用户角色级别 +const currentRoleLevel = computed(() => getRoleLevel()) + +// 过滤后的部门列表(一般专员不能选择总经理办公室) +const filteredDeptListForUser = computed(() => { + if (currentRoleLevel.value === 4) { + // 一般专员不能选择总经理办公室 + return DEPARTMENT_LIST.filter(d => d.name !== 'general_manager') + } + return DEPARTMENT_LIST +}) + +// 是否是总经理办公室部门(用于用户创建表单) +const isGeneralManagerDeptForUser = computed(() => { + const dept = DEPARTMENT_LIST.find(d => d.id === userForm.department_id) + return dept?.name === 'general_manager' +}) + +// 角色级别选项(根据部门动态变化,用于用户创建表单) +const roleLevelOptionsForUser = computed(() => { + if (isGeneralManagerDeptForUser.value) { + // 总经理办公室只能选择副总经理 + return [{ value: 2, label: '副总经理' }] + } + // 一般部门没有总经理,只有部门经理以下三级 + return [ + { value: 2, label: '部门经理' }, + { value: 3, label: '部门副经理' }, + { value: 4, label: '一般专员' } + ] +}) + + + +