Browse Source

矩阵填充设置效果实现

lwx_v12
liwenxuan 2 weeks ago
parent
commit
4f19667f9b
  1. 307
      src/components/formTable/index.vue

307
src/components/formTable/index.vue

@ -1641,12 +1641,25 @@ function showOrHide(data: any) {
let tby=getLastColonAfterString(element.tby)
/* console.log(tbx)
console.log(tby) */
//console.log(element.name)
let rowValue = model.value[tbx]
//console.log(rowValue)
let columnValue = model.value[tby]
let cellValue = getTableCellValueV2(element.tableData, rowValue, columnValue)
//console.log(cellValue);
//console.log(element.name)
//console.log(columnValue)
if(tbx!=""&&tby!=""){
let cellValue = getTableCellValue(element.tableData, rowValue, columnValue)
model.value[element.name] = cellValue*1
}else if(tbx!=""&&tby==""){
//console.log("")
let cellValue = getTableCellValue(element.tableData, rowValue, 'default')
//console.log(cellValue)
model.value[element.name] = cellValue*1
}else if(tbx==""&&tby!=""){
//console.log("")
let cellValue = getTableCellValue(element.tableData, 'any', columnValue)
//console.log(cellValue)
model.value[element.name] = cellValue*1
}
@ -1655,16 +1668,16 @@ function showOrHide(data: any) {
//console.log(getTableCellValueV2(element.tableData, 3, 2));
});
})
}
//
function isEmptyPlainObject(obj) {
// 0
return Object.prototype.toString.call(obj) === '[object Object]'
&& Object.keys(obj).length === 0;
return Object.prototype.toString.call(obj) === '[object Object]'
&& Object.keys(obj).length === 0;
}
@ -1676,7 +1689,7 @@ function isEmptyPlainObject(obj) {
function getLastColonAfterString(str) {
// 1.
if (typeof str !== 'string') {
console.warn('输入必须为字符串类型');
//console.warn('');
return '';
}
@ -1693,8 +1706,20 @@ function getLastColonAfterString(str) {
}
//
function getTableCellValueV2(tableData, rowValue, columnValue) {
/**
* 获取表格单元格值兼容多种tableData结构
* 支持三种结构
* 1. 标准行列结构{列号: {行号: , ...}, ...}
* 2. 仅一行结构{default: {列号: , ...}}
* 3. 仅一列结构{列号: {default: }, ...}
*
* @param {Object} tableData - 表格数据
* @param {String|Number} rowValue - 行标识
* @param {String|Number} columnValue - 列标识
* @returns {String|undefined} - 返回对应的单元格值如果未找到则返回undefined
*/
function getTableCellValueV3(tableData, rowValue, columnValue) {
try {
//
if (!tableData || typeof tableData !== 'object' || Array.isArray(tableData)) {
@ -1710,8 +1735,59 @@ function getTableCellValueV2(tableData, rowValue, columnValue) {
const rowStr = String(rowValue);
const columnStr = String(columnValue);
// 使访
return tableData?.[columnStr]?.[rowStr];
// 1. default
if (tableData.default && typeof tableData.default === 'object') {
// {default: {: , ...}}
// 使
return tableData.default?.[columnStr];
}
// 2.
const columnObj = tableData[columnStr];
if (columnObj && typeof columnObj === 'object') {
// 2.1
const cellValue = columnObj[rowStr];
if (cellValue !== undefined) {
return cellValue; //
}
// 2.2 default
if (columnObj.default !== undefined) {
// {: {default: }, ...}
// default
return columnObj.default;
}
}
// 3.
// 3.1 default
if (!columnObj) {
//
for (const colKey in tableData) {
if (String(colKey) === columnStr) {
const colData = tableData[colKey];
if (colData && typeof colData === 'object' && colData.default !== undefined) {
return colData.default;
}
}
}
}
// 3.2 default"default"
for (const key in tableData) {
const data = tableData[key];
if (data && typeof data === 'object') {
//
if (data[columnStr] !== undefined) {
//
return data[columnStr];
}
}
}
// 4. undefined
return undefined;
} catch (error) {
// undefined
console.error('获取表格单元格值时发生错误:', error);
@ -1719,6 +1795,215 @@ function getTableCellValueV2(tableData, rowValue, columnValue) {
}
}
/**
* 增强版自动检测tableData结构并获取值
* 支持动态结构检测
*/
function getTableCellValueEnhanced(tableData, rowValue, columnValue) {
try {
if (!tableData || typeof tableData !== 'object') {
return undefined;
}
if (rowValue == null || columnValue == null) {
return undefined;
}
const rowStr = String(rowValue);
const columnStr = String(columnValue);
//
const directValue = tableData?.[columnStr]?.[rowStr];
if (directValue !== undefined) {
return directValue;
}
//
const tableStructure = detectTableStructure(tableData);
switch (tableStructure) {
case 'standard':
//
break;
case 'singleRow':
//
return getFromSingleRowStructure(tableData, columnStr);
case 'singleColumn':
//
return getFromSingleColumnStructure(tableData, columnStr);
case 'mixed':
//
return getFromMixedStructure(tableData, rowStr, columnStr);
default:
// undefined
return undefined;
}
return undefined;
} catch (error) {
console.error('获取表格单元格值时发生错误:', error);
return undefined;
}
}
/**
* 检测tableData的结构
* @returns {string} - 结构类型'standard', 'singleRow', 'singleColumn', 'mixed', 'unknown'
*/
function detectTableStructure(tableData) {
if (!tableData || typeof tableData !== 'object') {
return 'unknown';
}
const keys = Object.keys(tableData);
if (keys.length === 0) {
return 'empty';
}
// default
if (keys.length === 1 && keys[0] === 'default') {
const defaultData = tableData.default;
if (defaultData && typeof defaultData === 'object') {
// default
const hasNestedObjects = Object.values(defaultData).some(
value => value && typeof value === 'object'
);
if (!hasNestedObjects) {
return 'singleRow';
}
}
}
//
let isSingleColumn = true;
for (const key of keys) {
const colData = tableData[key];
if (!colData || typeof colData !== 'object') {
isSingleColumn = false;
break;
}
// default
const colKeys = Object.keys(colData);
if (colKeys.length !== 1 || (colKeys.length === 1 && colKeys[0] !== 'default')) {
// default
if (colKeys.length > 1 || (colKeys.length === 1 && !colKeys[0].match(/^\d+$/))) {
isSingleColumn = false;
break;
}
}
}
if (isSingleColumn) {
return 'singleColumn';
}
//
let isStandard = true;
for (const key of keys) {
const colData = tableData[key];
if (!colData || typeof colData !== 'object') {
isStandard = false;
break;
}
//
const colKeys = Object.keys(colData);
if (colKeys.length === 0) {
isStandard = false;
break;
}
// default
const hasNonNumericKeys = colKeys.some(k => k !== 'default' && !k.match(/^\d+$/));
if (hasNonNumericKeys) {
isStandard = false;
break;
}
}
if (isStandard) {
return 'standard';
}
//
return 'mixed';
}
/**
* 从仅一行结构中获取值
*/
function getFromSingleRowStructure(tableData, columnStr) {
return tableData.default?.[columnStr];
}
/**
* 从仅一列结构中获取值
*/
function getFromSingleColumnStructure(tableData, columnStr) {
const colData = tableData[columnStr];
if (colData && typeof colData === 'object') {
// default
return colData.default !== undefined ? colData.default : Object.values(colData)[0];
}
return undefined;
}
/**
* 从混合结构中获取值
*/
function getFromMixedStructure(tableData, rowStr, columnStr) {
//
// 1.
const standardValue = tableData?.[columnStr]?.[rowStr];
if (standardValue !== undefined) {
return standardValue;
}
// 2. default
const columnData = tableData[columnStr];
if (columnData && typeof columnData === 'object') {
if (columnData.default !== undefined) {
return columnData.default;
}
}
// 3. default
if (tableData.default && typeof tableData.default === 'object') {
return tableData.default[columnStr];
}
// 4.
for (const key in tableData) {
const data = tableData[key];
if (data && typeof data === 'object') {
//
if (data[columnStr] !== undefined) {
return data[columnStr];
}
//
if (key === columnStr && data[rowStr] !== undefined) {
return data[rowStr];
}
}
}
return undefined;
}
/**
* 统一方法推荐使用这个
*/
function getTableCellValue(tableData, rowValue, columnValue) {
return getTableCellValueEnhanced(tableData, rowValue, columnValue);
}
interface hideFieldConditionArritem {

Loading…
Cancel
Save