看板问题修改
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