fix: get and set control property in table #323

This commit is contained in:
Hufe921
2023-11-14 21:27:03 +08:00
parent 9ab9cb80f0
commit 17cd6ccd09
+80 -49
View File
@@ -419,54 +419,71 @@ export class Control {
payload: IGetControlValueOption payload: IGetControlValueOption
): IGetControlValueResult { ): IGetControlValueResult {
const { conceptId } = payload const { conceptId } = payload
const result: IGetControlValueResult = []
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
) {
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
}
}
const elementList = [ const elementList = [
...this.draw.getHeaderElementList(), ...this.draw.getHeaderElementList(),
...this.draw.getOriginalMainElementList(), ...this.draw.getOriginalMainElementList(),
...this.draw.getFooterElementList() ...this.draw.getFooterElementList()
] ]
const result: IGetControlValueResult = [] getValue(elementList)
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
) {
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) {
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
}
return result return result
} }
@@ -575,16 +592,22 @@ export class Control {
const isReadonly = this.draw.isReadonly() const isReadonly = this.draw.isReadonly()
if (isReadonly) return if (isReadonly) return
const { conceptId, extension } = payload const { conceptId, extension } = payload
const data = [ const setExtension = (elementList: IElement[]) => {
this.draw.getHeaderElementList(),
this.draw.getOriginalMainElementList(),
this.draw.getFooterElementList()
]
for (const elementList of data) {
let i = 0 let i = 0
while (i < elementList.length) { while (i < elementList.length) {
const element = elementList[i] const element = elementList[i]
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 if (element?.control?.conceptId !== conceptId) continue
element.control.extension = extension element.control.extension = extension
// 修改后控件结束索引 // 修改后控件结束索引
@@ -597,5 +620,13 @@ export class Control {
i = newEndIndex i = newEndIndex
} }
} }
const data = [
this.draw.getHeaderElementList(),
this.draw.getOriginalMainElementList(),
this.draw.getFooterElementList()
]
for (const elementList of data) {
setExtension(elementList)
}
} }
} }