看板问题修改
parent
861dba3309
commit
bf61506e69
@ -0,0 +1,133 @@
|
||||
import request from '@/utils/request';
|
||||
import { getDataSourceList, querySql, querySql1 } from '@/views/boardGenerate/api/dataSource.js';
|
||||
import { options } from '@/views/boardGenerate/tool.js';
|
||||
import axios from 'axios';
|
||||
import { ref } from 'vue';
|
||||
|
||||
let apiList = [];
|
||||
|
||||
let getDataFlag = false;
|
||||
const waitReq = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let times = null;
|
||||
times = setInterval(() => {
|
||||
if (apiList.length > 0) {
|
||||
clearInterval(times);
|
||||
times = null;
|
||||
resolve(true);
|
||||
}
|
||||
}, 100);
|
||||
})
|
||||
};
|
||||
const getApiList = async () => {
|
||||
if (!getDataFlag) {
|
||||
getDataFlag = true;
|
||||
await getDataSourceList({
|
||||
pageNum: 1,
|
||||
pageSize: 9999999
|
||||
}).then((res) => {
|
||||
apiList = res.rows.map((e) => {
|
||||
return {
|
||||
id: e.dataSourceId,
|
||||
name: e.dataSourceName,
|
||||
url: e.requestUrl,
|
||||
method: e.requestMethod,
|
||||
outputData: e.designDataFieldList,
|
||||
type: e.responseType,
|
||||
db: e.fieldOne,
|
||||
SQL: e.fieldTwo,
|
||||
isPage: e.fieldThree === 'true'
|
||||
};
|
||||
});
|
||||
return true;
|
||||
});
|
||||
} else {
|
||||
await waitReq();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
const anyFun = (data, fun, key) => {
|
||||
switch (fun) {
|
||||
case 'map':
|
||||
return data.map((e) => e[key]);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
};
|
||||
const parseData = (data, rule) => {
|
||||
let resData = data;
|
||||
let step = rule.split(',');
|
||||
step.forEach((item) => {
|
||||
if (resData) {
|
||||
let fun = item.split('%');
|
||||
if (fun.length === 1) {
|
||||
resData = resData[fun[0]];
|
||||
}
|
||||
if (fun.length === 2) {
|
||||
resData = anyFun(resData, fun[0], fun[1]);
|
||||
}
|
||||
}
|
||||
});
|
||||
return resData;
|
||||
};
|
||||
const formulaFun = (formula, inputData) => {
|
||||
let data = formula.replace(/\$\{\s*([^}]+?)\s*\}/g, (_, key) => {
|
||||
let infos = key.split(',');
|
||||
if (infos.length === 1) {
|
||||
return inputData[infos[0]] || '%%';
|
||||
}
|
||||
if (infos.length === 2) {
|
||||
return `AND ${infos[0]} = ${inputData[infos[1]] || '%%'}`;
|
||||
}
|
||||
});
|
||||
return data;
|
||||
};
|
||||
|
||||
export const getData = async (res) => {
|
||||
await getApiList();
|
||||
|
||||
let outputData = {};
|
||||
|
||||
const tasks = (res.request||[]).map(async (e) => {
|
||||
let api = apiList.find((v) => v.id === e.dataSource);
|
||||
let params = { ...res.inputData };
|
||||
|
||||
if (api.type === '1' || !api.type) {
|
||||
const result = await (options.isD ? request : axios.request)({
|
||||
method: api.method,
|
||||
url: api.url,
|
||||
params: api.method === 'get' ? params : undefined,
|
||||
data: api.method === 'post' ? params : undefined
|
||||
});
|
||||
|
||||
let data = options.isD ? result : result.data || result.rows;
|
||||
|
||||
api.outputData.forEach((item) => {
|
||||
outputData[item.fieldOne] = parseData(data, item.fieldTwo);
|
||||
});
|
||||
}
|
||||
|
||||
if (api.type === '2') {
|
||||
let data;
|
||||
|
||||
if (api.isPage) {
|
||||
data = await querySql1({
|
||||
sql: formulaFun(api.SQL, res.inputData),
|
||||
linkId: api.db,
|
||||
pageSize: res.inputData.pageSize,
|
||||
pageNum: res.inputData.pageNum
|
||||
});
|
||||
} else {
|
||||
data = await querySql(formulaFun(api.SQL, res.inputData), api.db);
|
||||
}
|
||||
|
||||
api.outputData.forEach((item) => {
|
||||
outputData[item.fieldOne] = parseData(data, item.fieldTwo);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(tasks);
|
||||
return outputData;
|
||||
};
|
||||
Loading…
Reference in New Issue