|
@@ -3229,39 +3229,45 @@ const curveLine3 = () => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-// 可视化页数据
|
|
|
-const curveLine4 = () => {
|
|
|
- const params = {
|
|
|
- transCode: 'MDO0021',
|
|
|
- pid: pid.value,
|
|
|
- type: 1,
|
|
|
- }
|
|
|
- request(params)
|
|
|
- .then((res) => {
|
|
|
- // curvedata.value = JSON.stringify(res.rows);
|
|
|
- // console.log('数据形式:',curvedata.value);
|
|
|
-
|
|
|
- // echartLineref.value.getshuju(curvedata.value);
|
|
|
- // scatterref.value.getshuju(curvedata.value);
|
|
|
-
|
|
|
- if (res.rows && res.rows.length > 0) {
|
|
|
- // 清空数据
|
|
|
- datatotabledata.value = [];
|
|
|
- datatotableheader.value = [];
|
|
|
-
|
|
|
- // 遍历返回的所有行数据
|
|
|
- res.rows.forEach((row) => {
|
|
|
- const { vars, vals } = row; // 解析 vars 和 vals
|
|
|
+const curveLine4 = async () => {
|
|
|
+ try {
|
|
|
+ const params = {
|
|
|
+ transCode: 'MDO0021',
|
|
|
+ pid: pid.value,
|
|
|
+ type: 1,
|
|
|
+ };
|
|
|
+
|
|
|
+ const res = await request(params);
|
|
|
+
|
|
|
+ if (!res) {
|
|
|
+ throw new Error('响应数据为空');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.rows && res.rows.length > 0) {
|
|
|
+ // 清空数据
|
|
|
+ datatotabledata.value = [];
|
|
|
+ datatotableheader.value = [];
|
|
|
+
|
|
|
+ // 遍历返回的所有行数据
|
|
|
+ res.rows.forEach((row) => {
|
|
|
+ try {
|
|
|
+ const { vars, vals } = row;
|
|
|
datatotable(vars, vals);
|
|
|
- });
|
|
|
- }
|
|
|
- console.log("表格数据:", datatotabledata.value);
|
|
|
- console.log("表头数据:", datatotableheader.value);
|
|
|
- })
|
|
|
- .catch((err) => {
|
|
|
- ElMessage.error(err.returnMsg)
|
|
|
- })
|
|
|
-}
|
|
|
+ } catch (e) {
|
|
|
+ console.error('处理行数据时出错:', e);
|
|
|
+ ElMessage.error(`处理数据时出错: ${e.message}`);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log("表格数据:", datatotabledata.value);
|
|
|
+ console.log("表头数据:", datatotableheader.value);
|
|
|
+
|
|
|
+ } catch (err) {
|
|
|
+ console.error('请求出错:', err);
|
|
|
+ ElMessage.error(err.message || err.returnMsg || '操作失败,请重试');
|
|
|
+ }
|
|
|
+};
|
|
|
|
|
|
const initListSe = () => {
|
|
|
emitter.emit('update:datatotableheader', datatotableheader.value);
|
|
@@ -3272,65 +3278,71 @@ let datatotableheader = ref([]);
|
|
|
let datatotabledata = ref([]);
|
|
|
// 解析数据到表格
|
|
|
const datatotable = (vars, vals) => {
|
|
|
- console.log("表格更新");
|
|
|
-
|
|
|
- // 解析列名,vars 以空格分隔
|
|
|
- let headers = vars.split(" ");
|
|
|
+ try {
|
|
|
+ // 1. 安全解析输入数据
|
|
|
+ const headers = vars ? vars.trim().split(/\s+/) : [];
|
|
|
+ const values = vals ? vals.trim().split(/\s+/) : [];
|
|
|
+
|
|
|
+ // 2. 检查数据有效性
|
|
|
+ if (headers.length === 0 || values.length === 0) {
|
|
|
+ console.warn('无效输入数据', { vars, vals });
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- // 解析 vals 数据
|
|
|
- let values = vals.split(" ");
|
|
|
+ // 3. 构造表格数据对象
|
|
|
+ const rowData = {};
|
|
|
+ const newHeaders = [];
|
|
|
|
|
|
- // 构造表格数据对象
|
|
|
- let rowData = {};
|
|
|
- let newHeaders = [];
|
|
|
-
|
|
|
- headers.forEach((key, index) => {
|
|
|
- let val = values[index];
|
|
|
-
|
|
|
- // 处理数组数据,解析为 JSON 或直接填充
|
|
|
- if (val.startsWith("[") && val.endsWith("]")) {
|
|
|
- try {
|
|
|
- let parsedArray = JSON.parse(val); // 解析数组
|
|
|
- // 解析数组数据并拆分为多个列
|
|
|
- parsedArray.forEach((item, subIndex) => {
|
|
|
- let newKey = `${key}_${subIndex + 1}`; // 生成列名:原列名_1, _2, _3...
|
|
|
- rowData[newKey] = item;
|
|
|
- // 只在第一次时添加新列
|
|
|
- if (
|
|
|
- datatotableheader.value.length === 0 ||
|
|
|
- !datatotableheader.value.some((h) => h.prop === newKey)
|
|
|
- ) {
|
|
|
- newHeaders.push({ label: newKey, prop: newKey });
|
|
|
+ headers.forEach((key, index) => {
|
|
|
+ // 4. 安全获取值
|
|
|
+ const val = values[index] !== undefined ? values[index] : "";
|
|
|
+
|
|
|
+ // 5. 安全处理数组数据
|
|
|
+ if (typeof val === 'string' && val.startsWith("[") && val.endsWith("]")) {
|
|
|
+ try {
|
|
|
+ const parsedArray = JSON.parse(val);
|
|
|
+ parsedArray.forEach((item, subIndex) => {
|
|
|
+ const newKey = `${key}_${subIndex + 1}`;
|
|
|
+ rowData[newKey] = item;
|
|
|
+
|
|
|
+ // 6. 安全更新表头
|
|
|
+ if (!datatotableheader.value.some(h => h.prop === newKey)) {
|
|
|
+ newHeaders.push({ label: newKey, prop: newKey });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (e) {
|
|
|
+ console.warn('数组解析失败,使用原始值:', val);
|
|
|
+ rowData[key] = val;
|
|
|
+ if (!datatotableheader.value.some(h => h.prop === key)) {
|
|
|
+ newHeaders.push({ label: key, prop: key });
|
|
|
}
|
|
|
- });
|
|
|
- } catch (e) {
|
|
|
- rowData[key] = val; // 解析失败,保留原始字符串
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 7. 处理普通值
|
|
|
+ rowData[key] = val;
|
|
|
+ if (!datatotableheader.value.some(h => h.prop === key)) {
|
|
|
+ newHeaders.push({ label: key, prop: key });
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- rowData[key] = val !== undefined ? val : ""; // 处理数据长度不匹配情况
|
|
|
- // 只在第一次时添加原始列
|
|
|
- if (
|
|
|
- datatotableheader.value.length === 0 ||
|
|
|
- !datatotableheader.value.some((h) => h.prop === key)
|
|
|
- ) {
|
|
|
- newHeaders.push({ label: key, prop: key });
|
|
|
+ });
|
|
|
+
|
|
|
+ // 8. 批量更新表头(性能优化)
|
|
|
+ if (newHeaders.length > 0) {
|
|
|
+ const existingProps = datatotableheader.value.map(h => h.prop);
|
|
|
+ const headersToAdd = newHeaders.filter(
|
|
|
+ h => !existingProps.includes(h.prop)
|
|
|
+ );
|
|
|
+ if (headersToAdd.length > 0) {
|
|
|
+ datatotableheader.value = [...datatotableheader.value, ...headersToAdd];
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
|
|
|
- // 更新表头:防止重复添加
|
|
|
- if (datatotableheader.value.length === 0) {
|
|
|
- datatotableheader.value = newHeaders;
|
|
|
- } else {
|
|
|
- newHeaders.forEach((header) => {
|
|
|
- if (!datatotableheader.value.some((h) => h.prop === header.prop)) {
|
|
|
- datatotableheader.value.push(header);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ // 9. 更新表格数据
|
|
|
+ datatotabledata.value = [...datatotabledata.value, rowData];
|
|
|
|
|
|
- // 更新表格数据
|
|
|
- datatotabledata.value.push(rowData);
|
|
|
+ } catch (error) {
|
|
|
+ console.error('datatotable处理出错:', error);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
let listcbval = ref([]);
|