Skip to content

Commit b0ed1bb

Browse files
committed
feat:更新form
1 parent 88e1564 commit b0ed1bb

File tree

3 files changed

+76
-22
lines changed

3 files changed

+76
-22
lines changed

packages/core/src/canvas/canvas.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6956,6 +6956,9 @@ export class Canvas {
69566956
activePen.copyIndex = this.store.data.pens.findIndex(
69576957
(pen) => pen.id === activePen.id
69586958
);
6959+
if(activePen.followers?.length){
6960+
activePen.followers = undefined;
6961+
}
69596962
if(activePen.pathId){
69606963
//复制svgpath
69616964
activePen.path = this.store.data.paths[activePen.pathId];

packages/core/src/core.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4002,11 +4002,12 @@ export class Meta2d {
40024002
this.doEvent(e, eventName);
40034003
break;
40044004
case 'change':
4005-
e.pen && updateFormData(e.pen);
40064005
if(e.pen){
4006+
updateFormData(e.pen);
40074007
this.store.data.locked &&!e.pen.disabled &&
40084008
this.doEvent(e.pen, eventName);
40094009
}else{
4010+
updateFormData(e);
40104011
this.store.data.locked &&
40114012
e &&
40124013
!e.disabled &&

packages/core/src/diagrams/form.ts

Lines changed: 71 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ export function form(pen: Pen, ctx?: CanvasRenderingContext2D): Path2D {
88
const path = !ctx ? new Path2D() : ctx;
99
if (!pen.onDestroy) {
1010
pen.onDestroy = destory;
11-
pen.onMove = move;
12-
pen.onRotate = move;
13-
pen.onMouseEnter = mouseEnter;
11+
// pen.onMove = move;
12+
// pen.onRotate = move;
13+
// pen.onMouseEnter = mouseEnter;
1414
pen.onMouseLeave = mouseLeave;
15-
pen.onMouseMove = mouseMove;
15+
// pen.onMouseMove = mouseMove;
1616
pen.onMouseUp = mouseUp;
17-
pen.onInput = input;
17+
// pen.onInput = input;
1818
}
1919
pen.formId = pen.id;
2020
let wr = pen.calculative.borderRadius || 0,
@@ -70,7 +70,15 @@ function input(pen: Pen, text: string) {
7070
// this.store.emitter.emit('valueUpdate', pen);
7171
}
7272

73-
function destory(pen: Pen) {}
73+
function destory(pen: Pen) {
74+
pen.followers.forEach((id: string) =>{
75+
let fpen = pen.calculative.canvas.store.pens[id];
76+
fpen.formKey = undefined;
77+
fpen.formValue = undefined;
78+
fpen.formType = undefined;
79+
fpen.formId = undefined;
80+
})
81+
}
7482

7583
function move(pen: Pen) {}
7684

@@ -115,6 +123,9 @@ function mouseLeave(pen: Pen) {
115123
);
116124
if (!isIn) {
117125
pen.followers.splice(idx, 1);
126+
delete activePen.formKey;
127+
delete activePen.formValue;
128+
delete activePen.formType;
118129
delete activePen.formId;
119130
}
120131
}
@@ -128,8 +139,11 @@ function mouseUp(pen: Pen) {
128139
const activePens = pen.calculative.canvas.store.active;
129140
if (activePens && activePens.length) {
130141
activePens.forEach((activePen: Pen) => {
131-
const movingPen =
142+
let movingPen =
132143
pen.calculative.canvas.store.pens[activePen.id + movingSuffix];
144+
if (!movingPen) {
145+
movingPen = pen.calculative.canvas.store.pens[activePen.id];
146+
}
133147
if (movingPen && movingPen.calculative) {
134148
let inRect = deepClone(pen.calculative.worldRect);
135149
inRect.x -= 1;
@@ -144,6 +158,7 @@ function mouseUp(pen: Pen) {
144158
pen.followers.push(activePen.id);
145159
}
146160
activePen.formId = pen.id;
161+
predictFormValue(activePen);
147162
}
148163
}
149164
});
@@ -155,12 +170,12 @@ function mouseMove(pen: Pen, e: Point) {
155170
}
156171

157172
//更新表单数据
158-
export function updateFormData(pen, key?:string){
159-
if(pen.formId && pen.formKey && pen.formValue){
173+
export function updateFormData(pen, key?: string) {
174+
if (pen.formId && pen.formKey && pen.formValue) {
160175
//表单图元更新值
161176
const leaderPen = pen.calculative.canvas.store.pens[pen.formId];
162-
if(leaderPen){
163-
if(!leaderPen.formData){
177+
if (leaderPen) {
178+
if (!leaderPen.formData) {
164179
leaderPen.formData = {};
165180
}
166181
leaderPen.formData[pen.formKey] = pen[pen.formValue];
@@ -169,25 +184,60 @@ export function updateFormData(pen, key?:string){
169184
}
170185

171186
//提交表单
172-
export function submit(pen:Pen){
173-
}
187+
export function submit(pen: Pen) {}
174188

175189
//重置表单
176-
export function reset(pen:Pen){
190+
export function reset(pen: Pen) {
177191
const formPen = pen.calculative.canvas.store.pens[pen.formId];
178-
formPen.followers.forEach((id:string)=>{
192+
// formPen.followers.forEach((id:string,index:number)=>{
193+
for (let i = formPen.followers.length - 1; i >= 0; i--) {
194+
let id = formPen.followers[i];
179195
const follower = pen.calculative.canvas.store.pens[id];
180-
if(follower.formId && follower.formKey && formPen.formData[follower.formKey]){
196+
if (
197+
follower &&
198+
follower.formId &&
199+
follower.formKey &&
200+
formPen.formData[follower.formKey]
201+
) {
181202
const value = follower[follower.formValue];
182-
let data:any = '';
183-
if(Array.isArray(value)){
203+
let data: any = '';
204+
if (Array.isArray(value)) {
184205
data = [];
185206
}
186207
// follower[follower.formValue] = data;
187208
// follower.calculative[follower.formValue] = data;
188-
pen.calculative.canvas.parent.setValue({id:follower.id,[follower.formValue]:data},{render:false,doEvent:false,history:false});
209+
pen.calculative.canvas.parent.setValue(
210+
{ id: follower.id, [follower.formValue]: data },
211+
{ render: false, doEvent: false, history: false }
212+
);
189213
}
190-
});
214+
if (!follower) {
215+
formPen.followers.splice(i, 1);
216+
}
217+
}
191218
formPen.formData = {};
192219
pen.calculative.canvas.parent.render();
193-
}
220+
}
221+
222+
const formValueMap = {
223+
progress: 'progress',
224+
cascadeFilterDom: 'checked',
225+
treeFilterDom: 'checked',
226+
dateRangePickerDom: 'pickerTimes',
227+
datePickerDom: 'pickerTimes',
228+
slider: 'value',
229+
switch: 'checked',
230+
inputDom: 'text',
231+
checkbox: 'selectedKeys',
232+
radio: 'selectKey',
233+
rectangle: 'text',
234+
};
235+
236+
function predictFormValue(pen: Pen) {
237+
if (pen.name === 'rectangle') {
238+
if (!pen.input && !pen.dropdownList) {
239+
return;
240+
}
241+
}
242+
pen.formValue = formValueMap[pen.name];
243+
}

0 commit comments

Comments
 (0)