Skip to content

Commit 99c2838

Browse files
committed
feat: add form mode rule option #1143
1 parent 68da503 commit 99c2838

File tree

7 files changed

+27
-4
lines changed

7 files changed

+27
-4
lines changed

docs/en/guide/option.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ interface IEditorOption {
7575
lineNumber?: ILineNumberOption // LineNumber option. {size?:number; font?:string; color?:string; disabled?:boolean; right?:number}
7676
pageBorder?: IPageBorderOption // PageBorder option. {color?:string; lineWidth:number; padding?:IPadding; disabled?:boolean;}
7777
badge?: IBadgeOption // Badge option. {top?:number; left?:number}
78-
modeRule?: IModeRule // mode rule option. {print:{imagePreviewerDisabled?: boolean}; readonly:{imagePreviewerDisabled?: boolean}}
78+
modeRule?: IModeRule // mode rule option. {print:{imagePreviewerDisabled?: boolean}; readonly:{imagePreviewerDisabled?: boolean}; form:{controlDeletableDisabled?: boolean}}
7979
}
8080
```
8181

docs/guide/option.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ interface IEditorOption {
7575
lineNumber?: ILineNumberOption // 行号配置。{size?:number; font?:string; color?:string; disabled?:boolean; right?:number}
7676
pageBorder?: IPageBorderOption // 页面边框配置。{color?:string; lineWidth:number; padding?:IPadding; disabled?:boolean;}
7777
badge?: IBadgeOption // 徽章配置。{top?:number; left?:number}
78-
modeRule?: IModeRule // 编辑器模式规则配置。{print:{imagePreviewerDisabled?: boolean}; readonly:{imagePreviewerDisabled?: boolean}}
78+
modeRule?: IModeRule // 编辑器模式规则配置。{print:{imagePreviewerDisabled?: boolean}; readonly:{imagePreviewerDisabled?: boolean}; form:{controlDeletableDisabled?: boolean}}
7979
}
8080
```
8181

src/editor/core/draw/Draw.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,7 @@ export class Draw {
784784
options?: ISpliceElementListOption
785785
) {
786786
const { isIgnoreDeletedRule = false } = options || {}
787-
const { group } = this.options
787+
const { group, modeRule } = this.options
788788
if (deleteCount > 0) {
789789
// 当最后元素与开始元素列表信息不一致时:清除当前列表信息
790790
const endIndex = start + deleteCount
@@ -824,6 +824,9 @@ export class Draw {
824824
deleteElement?.area?.hide ||
825825
(tdDeletable !== false &&
826826
deleteElement?.control?.deletable !== false &&
827+
(!deleteElement.controlId ||
828+
this.mode !== EditorMode.FORM ||
829+
!modeRule[this.mode].controlDeletableDisabled) &&
827830
deleteElement?.title?.deletable !== false &&
828831
(group.deletable !== false || !deleteElement.groupIds?.length) &&
829832
(deleteElement?.area?.deletable !== false ||

src/editor/core/draw/control/Control.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
ControlState,
44
ControlType
55
} from '../../../dataset/enum/Control'
6-
import { EditorZone } from '../../../dataset/enum/Editor'
6+
import { EditorMode, EditorZone } from '../../../dataset/enum/Editor'
77
import { ElementType } from '../../../dataset/enum/Element'
88
import { DeepRequired } from '../../../interface/Common'
99
import {
@@ -643,6 +643,14 @@ export class Control {
643643
) {
644644
const { deletable = true } = startElement.control!
645645
if (!deletable) return null
646+
// 表单模式控件删除权限验证
647+
const mode = this.draw.getMode()
648+
if (
649+
mode === EditorMode.FORM &&
650+
this.options.modeRule[mode].controlDeletableDisabled
651+
) {
652+
return null
653+
}
646654
}
647655
let leftIndex = -1
648656
let rightIndex = -1

src/editor/dataset/constant/Editor.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@ export const defaultModeRuleOption: Readonly<DeepRequired<IModeRule>> = {
1111
},
1212
readonly: {
1313
imagePreviewerDisabled: false
14+
},
15+
form: {
16+
controlDeletableDisabled: false
1417
}
1518
}

src/editor/interface/Editor.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,12 @@ export interface IReadonlyModeRule {
145145
imagePreviewerDisabled?: boolean
146146
}
147147

148+
export interface IFormModeRule {
149+
controlDeletableDisabled?: boolean
150+
}
151+
148152
export interface IModeRule {
149153
[EditorMode.PRINT]?: IPrintModeRule
150154
[EditorMode.READONLY]?: IReadonlyModeRule
155+
[EditorMode.FORM]?: IFormModeRule
151156
}

src/editor/utils/option.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ export function mergeOption(
141141
readonly: {
142142
...defaultModeRuleOption.readonly,
143143
...options.modeRule?.readonly
144+
},
145+
form: {
146+
...defaultModeRuleOption.form,
147+
...options.modeRule?.form
144148
}
145149
}
146150

0 commit comments

Comments
 (0)