From f9eb1a419834f97a3ab0124b132de4f977b1973b Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期六, 28 十二月 2024 21:00:56 +0800 Subject: [PATCH] 通用导入Excel更新 --- src/api/tigerapi/system.ts | 281 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 230 insertions(+), 51 deletions(-) diff --git a/src/api/tigerapi/system.ts b/src/api/tigerapi/system.ts index 7711f3b..6ba9e68 100644 --- a/src/api/tigerapi/system.ts +++ b/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'; @@ -29,10 +28,13 @@ EntityParams, EntityList, iSYS_ROLE_PROD, + pParams, + ImportEntityValidate, + ImportInput, } from './model/systemModel'; import { defHttp } from '/@/utils/http/axios'; -import { isArray, isDate, isNullOrEmpty, isTimeType } from '/@/utils/is'; -import { MES_ROUTE_EDGE, MES_ROUTE_NODE } from './model/router'; +import { isArray, isNullOrEmpty, isTimeViaRegExp8601 } from '/@/utils/is'; +import { isNumber } from 'xe-utils'; export enum Api { QueryUrl = '/Base/Query', @@ -40,10 +42,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', @@ -63,7 +69,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', @@ -131,7 +141,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(), @@ -145,7 +155,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>( @@ -281,15 +307,23 @@ return result; } -export function convertToTree(data: [], parentId: string, id: string, pid?: string) { - const result: any[] = []; - let temp: any[] = []; +/** + * @description: 鏍戝舰琛ㄧ粨鏋勮浆鏍戝舰Json + * @param {T} data + * @param {string} parentField 鐖跺瓧娈靛悕 + * @param {string} idField 鍞竴key瀛楁鍚� + * @param {string} pid 鐖秈d鍊� + * @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][parentId] == null ? '' : data[i][parentId]; + const currPid = data[i][parentField] == null ? '' : data[i][parentField]; if (currPid === _pid) { - const obj = data[i] as {}; - temp = convertToTree(data, parentId, id, data[i][id]); + const obj = data[i] as T; + temp = convertToTree(data, parentField, idField, data[i][idField]); if (temp.length > 0) { obj['children'] = temp; } @@ -297,6 +331,30 @@ } } 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; // 娌℃湁鎵惧埌瀵瑰簲鐨勭埗浜茶妭鐐� } /* @@ -697,48 +755,34 @@ * @return {*} */ export async function getListByPage<T>(params: T) { - const Keys = Object.getOwnPropertyNames(params); - let sqlcmd = '1=1 '; + const sqlcmd = ReturnSqlcmd(params); let order = ''; - 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] != 'order' && - Keys[k] != 'field' && - Keys[k] != '0' && - !Keys[k].toString().endsWith('PSelect_0') - ) { - if (!isNullOrEmpty(params[Keys[k]].length) && isDate(params[Keys[k]][0])) { - sqlcmd += ` And ${Keys[k]} > '${params[Keys[k]][0]}'`; - sqlcmd += ` And ${Keys[k]} < '${params[Keys[k]][1]}'`; - } else { - sqlcmd += `And ${Keys[k]} like '%${params[Keys[k]]}%'`; - } - } - } if (!isNullOrEmpty(params['order'])) { order = params['order'] == 'descend' ? params['field'] + ' desc' : params['field']; } - const rParams = genAction(params['TABLE_NAME'], { - QueryAble_T: '', - where: sqlcmd, - order: order, - page: { - pageAble_T: 'string', - draw: 1, - pageIndex: params['page'], - pageSize: params['pageSize'], - }, - }); - return getListByPageAsync(rParams); + 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']); //濡傛灉涓嶆兂鐢ㄩ粯璁ょ殑鍩虹鏂规硶鑾峰彇鍒嗛〉鏁版嵁锛屽彲浠ユ崲鍏朵粬鐨刟pi } -async function getListByPageAsync(params: any) { +async function getListByPageAsync(params: any, apiUrl: string | null | undefined) { const data = await defHttp.post( - { url: Api.QueryUrl, params }, + { url: !isNullOrEmpty(apiUrl) ? apiUrl : Api.QueryUrl, params, timeout: 50000 }, { isTransformResponse: false, }, @@ -750,7 +794,53 @@ return model; } -export async function SaveEntity<T>(params: T, isUpdate: boolean, entityName: string) { +/** + * @description: 鏍规嵁鏌ヨ鏉′欢鍙傛暟鎷兼帴鏌ヨ鏉′欢 + * @param {T} params + * @return {*} + */ +export function ReturnSqlcmd<T>(params: T) { + const Keys = Object.getOwnPropertyNames(params); + 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] != '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') + ) { + 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]]}%'`; + } + } + } + return sqlcmd; +} + +export async function SaveEntity<T>(params: T, isUpdate: boolean, entityName: string, ...args) { let data; if (isUpdate) { data = await defHttp.post( @@ -761,7 +851,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) }, { @@ -770,6 +866,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; } @@ -782,6 +889,31 @@ isTransformResponse: false, }, ); +} + +/** + * @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; } /** @@ -860,11 +992,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 }, @@ -883,9 +1015,56 @@ export function formatValues(values: any) { const Keys = Object.getOwnPropertyNames(values); for (const k in Keys) { - if(isArray(values[Keys[k]])){ + 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; +} -- Gitblit v1.9.3