fix: get and set control property in table #323
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user