YangYuGang
2025-04-14 6a7257f9d8f659c508cf826726126c0fa4363eef
src/api/tigerapi/system.ts
@@ -1,4 +1,3 @@
import { UserConfigFn } from 'vite';
import { useGlobSetting } from '/@/hooks/setting';
import { buildUUID } from '../../utils/uuid';
import { DateFormat } from '../../utils/dataformat';
@@ -28,9 +27,15 @@
  iSYS_ROLE_WH,
  EntityParams,
  EntityList,
  iSYS_ROLE_PROD,
  pParams,
  ImportEntityValidate,
  ImportInput,
} from './model/systemModel';
import { defHttp } from '/@/utils/http/axios';
import { isNullOrEmpty } from '/@/utils/is';
import { isArray, isNullOrEmpty, isTimeViaRegExp8601 } from '/@/utils/is';
import { isNumber } from 'xe-utils';
import { useUserStore } from '/@/store/modules/user';
export enum Api {
  QueryUrl = '/Base/Query',
@@ -38,10 +43,14 @@
  EntitySqlList = '/Base/QuerySQL',
  EntityPageList = '/Base/QueryCustomPage',
  IsAccountExist = '/Base/IsExist',
  AddAfterDelete = '/Base/AddAfterDelete',
  ImportExcel = '/Base/ImportExcel',
  BaseValidateTableImport = '/Base/ValidateTableImport',
  setRoleStatus = '/system/setRoleStatus',
  MenuList = '/SYS/getMenuListAll',
  SaveMenu = '/SYS/SaveMenu',
  SaveRole = '/SYS/SaveRole',
  getSysParam = '/SYS/getSysParam',
  AddEntity = '/Base/Add',
  AddListEntity = '/Base/AddList',
  UpdateEntity = '/Base/Update',
@@ -50,6 +59,7 @@
  DeleteList = '/Base/DeleteList',
  DeleteWhere = '/Base/DeleteWhere',
  GetOrgTreeList = '/SYS/getOrgTreeList',
  GetProdTreeList = '/SYS/getProdTreeList',
  GetHouseTreeList = '/WMS/GetHouseModel',
  GetHouseOrgTreeList = '/WMS/GetHouseModelOrg',
  GetCreateBillCode = '/WMS/CreateBillCode',
@@ -60,7 +70,11 @@
  StartJob = '/Tsk/StartJob',
  StopJob = '/Tsk/PauseJob',
  AddJob = '/Tsk/AddJob',
  AddTskJob = '/Tsk/AddTskJob',
  ImmediateRun = '/Tsk/ImmediateRun',
  RemoveTskJob = '/Tsk/RemoveTskJob',
  UpdateJob = '/Tsk/UpdateJob',
  SaveTskJob = '/Tsk/SaveTskJob',
  urlQueryEnum = '/Base/QueryEnum',
  DeleteWareHouse = '/WMS/DelWareHouseModel',
  AddLocation = '/WMS/AddLoctionModel',
@@ -128,7 +142,7 @@
/*
 * 生成Action
 */
export function genAction<T>(datatype: string, data: T, option?: object) {
export function genAction<T>(datatype: string, data: T, option?: object, NeedInclude?: boolean) {
  const time = new Date();
  const params: ApiAction<T> = {
    ID: buildUUID(),
@@ -142,7 +156,23 @@
    StatusCode: 0,
    Data: data,
    LocaleMsg: undefined,
    NeedInclude: isNullOrEmpty(NeedInclude) ? false : NeedInclude,
  };
  return params;
}
/**
 * @desc 生成Action
 */
export function generateAction<T>(
  datatype: string,
  DataAssembly: string,
  data: T,
  option?: object,
  NeedInclude?: boolean,
) {
  const params = genAction(datatype, data, option, NeedInclude);
  params.DataAssembly = DataAssembly;
  return params;
}
export function genActionjob<sting>(
@@ -276,6 +306,56 @@
    }
  }
  return result;
}
/**
 * @description: 树形表结构转树形Json
 * @param {T} data
 * @param {string} parentField 父字段名
 * @param {string} idField 唯一key字段名
 * @param {string} pid 父id值
 * @return {*}
 */
export function convertToTree<T>(data: T[], parentField: string, idField: string, pid?: string) {
  const result: T[] = [];
  let temp: T[] = [];
  const _pid = isNullOrEmpty(pid) ? '' : pid;
  for (let i = 0; i < data.length; i++) {
    const currPid = data[i][parentField] == null ? '' : data[i][parentField];
    if (currPid === _pid) {
      const obj = data[i] as T;
      temp = convertToTree(data, parentField, idField, data[i][idField]);
      if (temp.length > 0) {
        obj['children'] = temp;
      }
      result.push(obj);
    }
  }
  return result;
}
/**
 * @description: 获取父项
 * @param {any} nodes
 * @param {string} childId
 * @return {*}
 */
export function findParent(tree: any[], nodeId: string): any | undefined {
  for (const node of tree) {
    if (node.children) {
      for (const child of node.children) {
        if (child.tid === nodeId) {
          return node;
        }
        // 递归查找子树
        const potentialParent = findParent(node.children, nodeId);
        if (potentialParent) {
          return potentialParent;
        }
      }
    }
  }
  return undefined; // 没有找到对应的父亲节点
}
/*
@@ -421,6 +501,24 @@
}
async function getRoleOrg(params: ApiAction<string>) {
  const data = await defHttp.post<ApiAction<iSYS_ROLE_ORG[]>>(
    {
      url: Api.EntityList,
      params,
    },
    {
      errorMessageMode: 'modal',
      isTransformResponse: false,
    },
  );
  return data.Data;
}
export function getProdList(params: string) {
  const rmParams = genAction('SYS_ROLE_PROD', " ROLE_CODE = '" + params + "'");
  return getRoleProd(rmParams);
}
async function getRoleProd(params: ApiAction<string>) {
  const data = await defHttp.post<ApiAction<iSYS_ROLE_PROD[]>>(
    {
      url: Api.EntityList,
      params,
@@ -652,40 +750,100 @@
  );
};
/* 通用查询分页 */
/**
 * @description: 通用查询分页
 * @param {T} params
 * @return {*}
 */
export async function getListByPage<T>(params: T) {
  const sqlcmd = ReturnSqlcmd(params);
  let order = '';
  if (!isNullOrEmpty(params['order'])) {
    order = params['order'] == 'descend' ? params['field'] + ' desc' : params['field'];
  }
  const rParams = genAction(
    params['TABLE_NAME'],
    !isNullOrEmpty(params['apiUrl'])
      ? params
      : {
          QueryAble_T: '',
          where: sqlcmd,
          order: order,
          page: {
            pageAble_T: 'string',
            draw: 1,
            pageIndex: params['page'],
            pageSize: params['pageSize'],
          },
        },
    params['option'],
    params['NeedInclude'],
  );
  return getListByPageAsync(rParams, params['apiUrl']); //如果不想用默认的基础方法获取分页数据,可以换其他的api
}
async function getListByPageAsync(params: any, apiUrl: string | null | undefined) {
  const data = await defHttp.post(
    { url: !isNullOrEmpty(apiUrl) ? apiUrl : Api.QueryUrl, params, timeout: 50000 },
    {
      isTransformResponse: false,
    },
  );
  const model = {
    items: data.Data.page.data,
    total: data.Data.page.totals,
  };
  return model;
}
/**
 * @description: 根据查询条件参数拼接查询条件
 * @param {T} params
 * @return {*}
 */
export function ReturnSqlcmd<T>(params: T) {
  const Keys = Object.getOwnPropertyNames(params);
  let sqlcmd = '';
  let sqlcmd = '1=1 ';
  for (const k in Keys) {
    console.log(`${k}:${Keys[k]}`);
    if (
      !isNullOrEmpty(params[Keys[k]]) &&
      Keys[k] != 'page' &&
      Keys[k] != 'pageSize' &&
      Keys[k] != 'TABLE_NAME'
      Keys[k] != 'TABLE_NAME' &&
      Keys[k] != 'order' &&
      Keys[k] != 'field' &&
      Keys[k] != 'option' &&
      Keys[k] != '0' &&
      Keys[k] != 'apiUrl' &&
      Keys[k] != 'NeedInclude' &&
      Keys[k] != 'nolike' &&
      !Keys[k].toString().endsWith('PSelect_0')
    ) {
      sqlcmd += `And ${Keys[k]} like '%${params[Keys[k]]}%'`;
      if (!isNullOrEmpty(params[Keys[k]].length) && isArray(params[Keys[k]])) {
        if (isTimeViaRegExp8601(params[Keys[k]][0])) {
          sqlcmd += ` And ${Keys[k]} > '${params[Keys[k]][0]}'`;
          sqlcmd += ` And ${Keys[k]} < '${params[Keys[k]][1]}'`;
        } else {
          sqlcmd += `And '${params[Keys[k]].join(',')}' like '%'+${Keys[k]}+'%'`;
        }
      } else if (isNumber(params[Keys[k]])) {
        sqlcmd += `And ${Keys[k]} = ${params[Keys[k]]}`;
      } else if(Keys[k].toString().startsWith('IFEMPTY_')){
        sqlcmd +=params[Keys[k]]=='Y'? `And (${Keys[k].split('IFEMPTY_')[1]} != '' OR ${Keys[k].split('IFEMPTY_')[1]} is not NULL)`: `And (${Keys[k].split('IFEMPTY_')[1]} = '' OR ${Keys[k].split('IFEMPTY_')[1]} is NULL)`;
      } else {
        sqlcmd +=
          params['nolike'] == 'Y'
            ? `And ${Keys[k]} = '${params[Keys[k]]}'`
            : `And ${Keys[k]} like '%${params[Keys[k]]}%'`;
      }
    }
  }
  const rParams = genActionPage(params['TABLE_NAME'], sqlcmd, params['page'], params['pageSize']);
  return getListByPageAsync(rParams);
}
async function getListByPageAsync(params: ApiActionPage) {
  const data = await defHttp.post<ApiActionPage>(
    { url: Api.EntityPageList, params },
    {
      isTransformResponse: false,
    },
  );
  const model = {
    items: data.Data.data,
    total: data.Data.totals,
  };
  return model;
  return sqlcmd;
}
export async function SaveEntity<T>(params: T, isUpdate: boolean, entityName: string) {
export async function SaveEntity<T>(params: T, isUpdate: boolean, entityName: string, ...args) {
  let data;
  params['AUTH_ORG'] = useUserStore().getUserInfo.orgCode as string;
  if (isUpdate) {
    data = await defHttp.post(
      { url: Api.UpdateEntity, params: genAction(entityName, params) },
@@ -695,7 +853,13 @@
      },
    );
  } else {
    params.ID = buildUUID(); //生成GUID
    const check = await isExist(genAction(entityName, args[0]));
    if (check.Data) {
      check.IsSuccessed = false;
      check.Message = '记录已经存在,不能新增!';
      return check;
    }
    params['ID'] = args[1] == true ? params['ID'] : buildUUID(); //生成GUID
    data = await defHttp.post(
      { url: Api.AddEntity, params: genAction(entityName, params) },
      {
@@ -704,6 +868,17 @@
      },
    );
  }
  return data;
}
export async function AddListEntity<T>(params: T, entityName: string) {
  const data = await defHttp.post(
    { url: Api.AddListEntity, params: genAction(entityName, params) },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
    },
  );
  return data;
}
@@ -718,7 +893,53 @@
  );
}
//获取服务器Json文件返回Json数据
/**
 * @description: 先删除后添加Api
 * @param {T} params
 * @param {string} entityName
 * @param {*} items
 * @return {*}
 */
export async function AddAfterDelete(entityName: string, items: [], where: string) {
  const data = await defHttp.post(
    {
      url: Api.AddAfterDelete,
      params: genAction(entityName, {
        QueryAble_T: '',
        where: where,
        Items: items,
      }),
    },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
    },
  );
  return data;
}
/**
 * @description: 根据条件删除
 * @param {string} sqlcmd
 * @param {string} entityName
 * @return {*}
 */
export const DeleteWhere = async (sqlcmd: string, entityName: string) => {
  const usParams = genAction(entityName, sqlcmd);
  return await defHttp.post(
    { url: Api.DeleteWhere, params: usParams },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
    },
  );
};
/**
 * @description: 获取服务器Json文件返回Json数据
 * @param {string} url
 * @return {*}
 */
export async function fetchJson(url: string) {
  try {
    const response = await fetch(url);
@@ -773,11 +994,11 @@
}
/* 通用获取实体记录 */
export const getEntity = async (params: { sqlcmd: string; entityName: string }) => {
export const getEntity = async (params: { sqlcmd: string; entityName: string; order: string }) => {
  const usParams = genAction(params.entityName, {
    QueryAble_T: '',
    where: params.sqlcmd,
    order: '',
    order: params.order,
  });
  return await defHttp.post(
    { url: Api.QueryUrl, params: usParams },
@@ -787,3 +1008,65 @@
    },
  );
};
/**
 * @description: 判断保存的值如果是[]数组的,就直接取[0]第一个值,一般针对上传模板的地址
 * @param {any} values
 * @return {*}
 */
export function formatValues(values: any) {
  const Keys = Object.getOwnPropertyNames(values);
  for (const k in Keys) {
    if (isArray(values[Keys[k]])) {
      values[Keys[k]] = values[Keys[k]][0];
    }
  }
  return values;
}
/**
 * @description: 获取参数
 * @param {pParams} params
 * @return {*}
 */
export const getSysParam = (params?: pParams) =>
  defHttp.get<ApiAction<treeParamsListItem[]>>(
    { url: Api.getSysParam, params },
    {
      isTransformResponse: false,
    },
  );
  /**
   * @desc 导入Excel
   */
export async function ImportExcel(entityName: string, items: ImportInput) {
  const data = await defHttp.post(
    {
      url: Api.ImportExcel,
      params: genAction(entityName, items),
    },
    {
      errorMessageMode: 'none',
      isTransformResponse: false,
    },
  );
  return data;
}
/**
 * @desc 导入Excel
 */
export async function ValidateTableImport(entityName: string, items: ImportEntityValidate) {
const data = await defHttp.post(
  {
    url: Api.BaseValidateTableImport,
    params: genAction(entityName, items),
  },
  {
    errorMessageMode: 'none',
    isTransformResponse: false,
  },
);
return data;
}