From 17cd6ccd09e7c368e2ef98c0be2b8de526e8a4c3 Mon Sep 17 00:00:00 2001 From: Hufe921 Date: Tue, 14 Nov 2023 21:27:03 +0800 Subject: [PATCH] fix: get and set control property in table #323 --- src/editor/core/draw/control/Control.ts | 129 +++++++++++++++--------- 1 file changed, 80 insertions(+), 49 deletions(-) diff --git a/src/editor/core/draw/control/Control.ts b/src/editor/core/draw/control/Control.ts index c448495..18f0c4a 100644 --- a/src/editor/core/draw/control/Control.ts +++ b/src/editor/core/draw/control/Control.ts @@ -419,54 +419,71 @@ export class Control { payload: IGetControlValueOption ): IGetControlValueResult { const { conceptId } = payload - const elementList = [ - ...this.draw.getHeaderElementList(), - ...this.draw.getOriginalMainElementList(), - ...this.draw.getFooterElementList() - ] const result: IGetControlValueResult = [] - let i = 0 - while (i < elementList.length) { - const element = elementList[i] - i++ - if (element?.control?.conceptId !== conceptId) continue - const { type, code, valueSets } = element.control! - let j = i - let textControlValue = '' - while (j < elementList.length) { - const nextElement = elementList[j] - if (nextElement.controlId !== element.controlId) break - if ( - type === ControlType.TEXT && - nextElement.controlComponent === ControlComponent.VALUE + const getValue = (elementList: IElement[]) => { + let i = 0 + while (i < elementList.length) { + const element = elementList[i] + i++ + // 表格下钻处理 + if (element.type === ElementType.TABLE) { + const trList = element.trList! + for (let r = 0; r < trList.length; r++) { + const tr = trList[r] + for (let d = 0; d < tr.tdList.length; d++) { + const td = tr.tdList[d] + getValue(td.value) + } + } + } + if (element?.control?.conceptId !== conceptId) continue + const { type, code, valueSets } = element.control! + let j = i + let textControlValue = '' + while (j < elementList.length) { + const nextElement = elementList[j] + if (nextElement.controlId !== element.controlId) break + if ( + type === ControlType.TEXT && + nextElement.controlComponent === ControlComponent.VALUE + ) { + textControlValue += nextElement.value + } + j++ + } + if (type === ControlType.TEXT) { + result.push({ + ...element.control, + value: textControlValue || null, + innerText: textControlValue || null + }) + } else if ( + type === ControlType.SELECT || + type === ControlType.CHECKBOX ) { - textControlValue += nextElement.value + const innerText = code + ?.split(',') + .map( + selectCode => + valueSets?.find(valueSet => valueSet.code === selectCode)?.value + ) + .filter(Boolean) + .join('') + result.push({ + ...element.control, + value: code || null, + innerText: innerText || null + }) } - j++ - } - if (type === ControlType.TEXT) { - result.push({ - ...element.control, - value: textControlValue || null, - innerText: textControlValue || null - }) - } else if (type === ControlType.SELECT || type === ControlType.CHECKBOX) { - const innerText = code - ?.split(',') - .map( - selectCode => - valueSets?.find(valueSet => valueSet.code === selectCode)?.value - ) - .filter(Boolean) - .join('') - result.push({ - ...element.control, - value: code || null, - innerText: innerText || null - }) + i = j } - i = j } + const elementList = [ + ...this.draw.getHeaderElementList(), + ...this.draw.getOriginalMainElementList(), + ...this.draw.getFooterElementList() + ] + getValue(elementList) return result } @@ -575,16 +592,22 @@ export class Control { const isReadonly = this.draw.isReadonly() if (isReadonly) return const { conceptId, extension } = payload - const data = [ - this.draw.getHeaderElementList(), - this.draw.getOriginalMainElementList(), - this.draw.getFooterElementList() - ] - for (const elementList of data) { + const setExtension = (elementList: IElement[]) => { let i = 0 while (i < elementList.length) { const element = elementList[i] i++ + // 表格下钻处理 + if (element.type === ElementType.TABLE) { + const trList = element.trList! + for (let r = 0; r < trList.length; r++) { + const tr = trList[r] + for (let d = 0; d < tr.tdList.length; d++) { + const td = tr.tdList[d] + setExtension(td.value) + } + } + } if (element?.control?.conceptId !== conceptId) continue element.control.extension = extension // 修改后控件结束索引 @@ -597,5 +620,13 @@ export class Control { i = newEndIndex } } + const data = [ + this.draw.getHeaderElementList(), + this.draw.getOriginalMainElementList(), + this.draw.getFooterElementList() + ] + for (const elementList of data) { + setExtension(elementList) + } } }