import request from '@/utils/request'

export function getList(params) {
  return request({
    url: '/api/procedures/node/list-api',
    method: 'get',
    params
  })
}
export function getAllList(params) {
  return request({
    url: '/api/procedures/node/all-list',
    method: 'get',
    params
  })
}
export function getItem(params) {
  return request({
    url: '/api/procedures/node/get-item',
    method: 'get',
    params
  })
}

export function createNode(data) {
  return request({
    url: '/api/procedures/node/create-node',
    method: 'post',
    data
  })
}

export function deleteNode(data) {
  return request({
    url: '/api/procedures/node/delete-node',
    method: 'delete',
    data
  })
}

export function getUser(params) {
  return request({
    url: '/api/procedures/node/get-user',
    method: 'get',
    params
  })
}

export function getAuditorList(params) {
  return request({
    url: '/api/procedures/node/auditor-list',
    method: 'get',
    params
  })
}

export function createNodeAuditor(data) {
  return request({
    url: '/api/procedures/node/create-node-auditor',
    method: 'post',
    data
  })
}

export function deleteNodeAuditor(data) {
  return request({
    url: '/api/procedures/node/delete-node-auditor',
    method: 'delete',
    data
  })
}

export function getPrincipalList(params) {
  return request({
    url: '/api/procedures/node/principal-list',
    method: 'get',
    params
  })
}

export function createNodePrincipal(data) {
  return request({
    url: '/api/procedures/node/create-node-principal',
    method: 'post',
    data
  })
}

export function deleteNodePrincipal(data) {
  return request({
    url: '/api/procedures/node/delete-node-principal',
    method: 'delete',
    data
  })
}
