From bf61506e69ca2d8b06da37f42f734cf53d21ef85 Mon Sep 17 00:00:00 2001 From: yesg <2277317060@qq.com> Date: Mon, 9 Feb 2026 04:44:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/boardGenerate/api/getData.js | 133 ++++++++ .../boardGenerate/nodes/board/annularNode.vue | 93 ++++-- .../boardGenerate/nodes/board/barNode.vue | 288 ++++++++++-------- .../boardGenerate/nodes/board/lineNode.vue | 105 +++++-- .../nodes/board/multiBarsNode.vue | 15 +- .../boardGenerate/nodes/board/pieNode.vue | 21 +- .../boardGenerate/nodes/board/radarNode.vue | 25 +- .../nodes/form/digitalFlopNode.vue | 78 +++-- .../nodes/form/scrollTableNode.vue | 32 +- .../boardGenerate/nodes/form/textNode.vue | 48 ++- 10 files changed, 593 insertions(+), 245 deletions(-) create mode 100644 src/views/boardGenerate/api/getData.js diff --git a/src/views/boardGenerate/api/getData.js b/src/views/boardGenerate/api/getData.js new file mode 100644 index 0000000..7f5b797 --- /dev/null +++ b/src/views/boardGenerate/api/getData.js @@ -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; +}; diff --git a/src/views/boardGenerate/nodes/board/annularNode.vue b/src/views/boardGenerate/nodes/board/annularNode.vue index f074b2c..f2a43fb 100644 --- a/src/views/boardGenerate/nodes/board/annularNode.vue +++ b/src/views/boardGenerate/nodes/board/annularNode.vue @@ -1,11 +1,16 @@