import request from '@/utils/request'

export function getList(params) {
  return request({
    url: '/api/workteam/departmentleader/list-api',
    method: 'get',
    params
  })
}
export function getItem(params) {
  return request({
    url: '/api/workteam/departmentleader/get-item',
    method: 'get',
    params
  })
}

export function createDepartmentleader(data) {
  return request({
    url: '/api/workteam/departmentleader/create-departmentleader',
    method: 'post',
    data
  })
}

export function deleteDepartmentleader(data) {
  return request({
    url: '/api/workteam/departmentleader/delete-departmentleader',
    method: 'delete',
    data
  })
}
