fix: checkbox cannot be selected #382

This commit is contained in:
Hufe921
2023-12-29 22:32:56 +08:00
parent bdb981d242
commit 3fb8435706
4 changed files with 40 additions and 10 deletions
+4
View File
@@ -703,6 +703,10 @@ export class Draw {
return this.listParticle
}
public getCheckboxParticle(): CheckboxParticle {
return this.checkboxParticle
}
public getControl(): Control {
return this.control
}
@@ -1,15 +1,33 @@
import { DeepRequired } from '../../../interface/Common'
import { IEditorOption } from '../../../interface/Editor'
import { IElement } from '../../../interface/Element'
import { IRowElement } from '../../../interface/Row'
import { Draw } from '../Draw'
export class CheckboxParticle {
private draw: Draw
private options: DeepRequired<IEditorOption>
constructor(draw: Draw) {
this.draw = draw
this.options = draw.getOptions()
}
public setSelect(element: IElement) {
const { checkbox } = element
if (checkbox) {
checkbox.value = !checkbox.value
} else {
element.checkbox = {
value: true
}
}
this.draw.render({
isCompute: false,
isSetCursor: false
})
}
public render(
ctx: CanvasRenderingContext2D,
element: IRowElement,
+15 -10
View File
@@ -68,18 +68,23 @@ export function mousedown(evt: MouseEvent, host: CanvasEvent) {
const isSetCheckbox = isDirectHitCheckbox && !isReadonly
if (isSetCheckbox) {
const { checkbox, control } = curElement
const codes = control?.code?.split(',') || []
if (checkbox?.value) {
const codeIndex = codes.findIndex(c => c === checkbox.code)
codes.splice(codeIndex, 1)
// 复选框不在控件内独立控制
if (!control) {
draw.getCheckboxParticle().setSelect(curElement)
} else {
if (checkbox?.code) {
codes.push(checkbox.code)
const codes = control?.code?.split(',') || []
if (checkbox?.value) {
const codeIndex = codes.findIndex(c => c === checkbox.code)
codes.splice(codeIndex, 1)
} else {
if (checkbox?.code) {
codes.push(checkbox.code)
}
}
const activeControl = draw.getControl().getActiveControl()
if (activeControl instanceof CheckboxControl) {
activeControl.setSelect(codes)
}
}
const activeControl = draw.getControl().getActiveControl()
if (activeControl instanceof CheckboxControl) {
activeControl.setSelect(codes)
}
} else {
draw.render({