import { defHttp } from '/@/utils/http/axios';

import { message } from 'ant-design-vue';

import { useGlobSetting } from '/@/hooks/setting';

const globSetting = useGlobSetting();

const baseUploadUrl = globSetting.uploadUrl;

enum Api {

  positionList = '/sys/position/list',

  userList = '/sys/user/list',

  roleList = '/sys/role/list',

  queryDepartTreeSync = '/sys/sysDepart/queryDepartTreeSync',

  queryTreeList = '/sys/sysDepart/queryTreeList',

  loadTreeData = '/sys/category/loadTreeData',

  loadDictItem = '/sys/category/loadDictItem/',

  getDictItems = '/sys/dict/getDictItems/',

  getTableList = '/sys/user/queryUserComponentData',

  getCategoryData = '/sys/category/loadAllData',

  refreshDragCache = '/drag/page/refreshCache',

}



/**

 * 上传父路径

 */

export const uploadUrl = `${baseUploadUrl}/sys/oss/file/upload`;



/**

 * 职务列表

 * @param params

 */

export const getPositionList = (params) => {

  return defHttp.get({ url: Api.positionList, params });

};



/**

 * 用户列表

 * @param params

 */

export const getUserList = (params) => {

  return defHttp.get({ url: Api.userList, params });

};



/**

 * 角色列表

 * @param params

 */

export const getRoleList = (params) => {

  return defHttp.get({ url: Api.roleList, params });

};



/**

 * 异步获取部门树列表

 */

export const queryDepartTreeSync = (params?) => {

  return defHttp.get({ url: Api.queryDepartTreeSync, params });

};

/**

 * 获取部门树列表

 */

export const queryTreeList = (params?) => {

  return defHttp.get({ url: Api.queryTreeList, params });

};



/**

 * 分类字典树控件 加载节点

 */

export const loadTreeData = (params?) => {

  return defHttp.get({ url: Api.loadTreeData, params });

};



/**

 * 根据字典code加载字典text

 */

export const loadDictItem = (params?) => {

  return defHttp.get({ url: Api.loadDictItem, params });

};



/**

 * 根据字典code加载字典text

 */

export const getDictItems = (dictCode) => {

  return defHttp.get({ url: Api.getDictItems + dictCode }, { joinTime: false });

};

/**

 * 部门用户modal选择列表加载list

 */

export const getTableList = (params) => {

  return defHttp.get({ url: Api.getTableList, params });

};

/**

 * 加载全部分类字典数据

 */

export const loadCategoryData = (params) => {

  return defHttp.get({ url: Api.getCategoryData, params });

};

/**

 * 文件上传

 */

export const uploadFile = (params, success) => {

  return defHttp.uploadFile({ url: uploadUrl }, params, { success });

};

/**

 * 下载文件

 * @param url 文件路径

 * @param fileName 文件名

 * @param parameter

 * @returns {*}

 */

export const downloadFile = (url, fileName?, parameter?) => {

  return getFileblob(url, parameter).then((data) => {

    if (!data || data.size === 0) {

      message.warning('文件下载失败');

      return;

    }

    if (typeof window.navigator.msSaveBlob !== 'undefined') {

      window.navigator.msSaveBlob(new Blob([data]), fileName);

    } else {

      let url = window.URL.createObjectURL(new Blob([data]));

      let link = document.createElement('a');

      link.style.display = 'none';

      link.href = url;

      link.setAttribute('download', fileName);

      document.body.appendChild(link);

      link.click();

      document.body.removeChild(link); //下载完成移除元素

      window.URL.revokeObjectURL(url); //释放掉blob对象

    }

  });

};



/**

 * 下载文件 用于excel导出

 * @param url

 * @param parameter

 * @returns {*}

 */

export const getFileblob = (url, parameter) => {

  return defHttp.get(

    {

      url: url,

      params: parameter,

      responseType: 'blob',

    },

    { isTransformResponse: false }

  );

};



/**

 * 【用于评论功能】自定义文件上传-方法

 */

export const uploadMyFile = (url, data) => {

  return defHttp.uploadMyFile(url, data);

};

/**

 * 刷新仪表盘缓存

 * @param params

 */

export const refreshDragCache = () => defHttp.get({ url: Api.refreshDragCache }, { isTransformResponse: false });