@hailin-zheng/editor-core 2.2.6 → 2.2.7
Sign up to get free protection for your applications and to get access to all the features.
- package/editor.css +1 -1
- package/index-cjs.js +128 -54
- package/index-cjs.js.map +1 -1
- package/index.js +128 -54
- package/index.js.map +1 -1
- package/med_editor/doc-editor.d.ts +1 -1
- package/med_editor/framework/element-define.d.ts +7 -4
- package/med_editor/framework/element-props.d.ts +6 -5
- package/med_editor/framework/impl/data-element/data-element-base-impl.d.ts +17 -1
- package/med_editor/framework/impl/data-element/data-element-text-impl.d.ts +2 -2
- package/med_editor/framework/vnode/editor-calendar-vnode.d.ts +1 -0
- package/package.json +2 -2
package/index.js
CHANGED
@@ -1717,7 +1717,7 @@ class ViewOptions {
|
|
1717
1717
|
showCharRect;
|
1718
1718
|
//数据元交互修饰模式
|
1719
1719
|
dataEleDecoratorMode = 'outline';
|
1720
|
-
dataEleDecoratorColor = '#
|
1720
|
+
dataEleDecoratorColor = '#ddd';
|
1721
1721
|
showTabChar;
|
1722
1722
|
showSpaceChar;
|
1723
1723
|
showLineBreak;
|
@@ -2499,6 +2499,10 @@ class DataEleListProps extends DataEleBaseTextProps {
|
|
2499
2499
|
super();
|
2500
2500
|
}
|
2501
2501
|
options = [];
|
2502
|
+
/**
|
2503
|
+
* 是否保存选项到病历文件里面
|
2504
|
+
*/
|
2505
|
+
saveOptions = true;
|
2502
2506
|
dropDownStyle;
|
2503
2507
|
/**
|
2504
2508
|
* 是否允许多选
|
@@ -2829,28 +2833,14 @@ class ValidateProps {
|
|
2829
2833
|
return clone;
|
2830
2834
|
}
|
2831
2835
|
}
|
2832
|
-
class DataElementGroupProps extends
|
2833
|
-
id;
|
2834
|
-
name;
|
2835
|
-
hidden;
|
2836
|
+
class DataElementGroupProps extends DataEleBaseProps {
|
2836
2837
|
clone(dest) {
|
2837
|
-
|
2838
|
-
|
2839
|
-
dest.name = this.name;
|
2840
|
-
dest.hidden = this.hidden;
|
2838
|
+
const clone = dest ?? new DataElementGroupProps();
|
2839
|
+
super.cloneBaseProps(clone);
|
2841
2840
|
}
|
2842
|
-
getSerializeProps() {
|
2841
|
+
getSerializeProps(options) {
|
2843
2842
|
const props = {};
|
2844
|
-
|
2845
|
-
props.id = this.id;
|
2846
|
-
}
|
2847
|
-
if (this.name) {
|
2848
|
-
props.name = this.name;
|
2849
|
-
}
|
2850
|
-
if (this.hidden) {
|
2851
|
-
props.hidden = this.hidden;
|
2852
|
-
}
|
2853
|
-
return props;
|
2843
|
+
return this.getBaseProps(props, options);
|
2854
2844
|
}
|
2855
2845
|
}
|
2856
2846
|
class DataElementBarcodeProps {
|
@@ -2933,6 +2923,9 @@ class DataDecorateRenderObject extends LeafRenderObject {
|
|
2933
2923
|
if (event.mode === 'print') {
|
2934
2924
|
return null;
|
2935
2925
|
}
|
2926
|
+
// if(this.element.parent.parent.type==='data-group'){
|
2927
|
+
// return null;
|
2928
|
+
// }
|
2936
2929
|
const element = this.element;
|
2937
2930
|
const lineWidth = 3;
|
2938
2931
|
let path = '';
|
@@ -3933,19 +3926,83 @@ class DataElementInlineGroup extends InlineGroupInputElement {
|
|
3933
3926
|
expressFn;
|
3934
3927
|
beginMeasure(data) {
|
3935
3928
|
super.beginMeasure(data);
|
3936
|
-
if (!this.props.expression || !data.
|
3929
|
+
// if (!this.props.expression || !data.options.enableDyExpression) {
|
3930
|
+
// return;
|
3931
|
+
// }
|
3932
|
+
// try {
|
3933
|
+
// if (!this.expressFn) {
|
3934
|
+
// const code = parser(this.props.expression);
|
3935
|
+
// this.expressFn = new Function(`with(this){ ${code} }`);
|
3936
|
+
// }
|
3937
|
+
// this.expressFn.bind(data.execute)();
|
3938
|
+
// //this.expressFn();
|
3939
|
+
// } catch (e) {
|
3940
|
+
// this.expressFn = new Function();
|
3941
|
+
// }
|
3942
|
+
}
|
3943
|
+
parserExpress;
|
3944
|
+
/**
|
3945
|
+
* 解析可见性表达式
|
3946
|
+
* @param ele
|
3947
|
+
* @param execute
|
3948
|
+
* @private
|
3949
|
+
*/
|
3950
|
+
parseEleExpression(data) {
|
3951
|
+
const execute = data.execute;
|
3952
|
+
//不存在表达式,或者不启用表达式,不做处理
|
3953
|
+
if (!this.props.expression || !data.options.enableDyExpression)
|
3937
3954
|
return;
|
3938
|
-
|
3955
|
+
//存在表达式,并且已经解析过,不再做处理
|
3956
|
+
if (this.parserExpress)
|
3957
|
+
return;
|
3958
|
+
const reactiveMode = data.renderCtx.drawMode !== 'print';
|
3939
3959
|
try {
|
3940
|
-
|
3941
|
-
|
3942
|
-
|
3960
|
+
const depIdItems = [];
|
3961
|
+
const depEleMap = new Map();
|
3962
|
+
let compliedCode = parser(this.props.expression, depIdItems);
|
3963
|
+
compliedCode = addReturn(compliedCode);
|
3964
|
+
if (depIdItems.length) {
|
3965
|
+
depIdItems.forEach(dep => {
|
3966
|
+
const refCtx = execute.getObject(dep);
|
3967
|
+
if (refCtx.ref) {
|
3968
|
+
const refEle = refCtx.ref.item;
|
3969
|
+
depEleMap.set(dep, refCtx);
|
3970
|
+
//当前有可能是checkbox数组
|
3971
|
+
const refEles = Array.isArray(refEle) ? refEle : [refEle];
|
3972
|
+
reactiveMode && refEles.forEach(item => {
|
3973
|
+
//求值依赖元素更改的时候,发布当前元素重新计算的指令
|
3974
|
+
item.onChangeSubject.subscribe(() => {
|
3975
|
+
this.pubOnChange('self');
|
3976
|
+
});
|
3977
|
+
});
|
3978
|
+
}
|
3979
|
+
});
|
3943
3980
|
}
|
3944
|
-
this.
|
3945
|
-
//this.expressFn();
|
3981
|
+
this.parserExpress = { compliedCode, func: new Function(`with(this){ ${compliedCode} }`), depItems: depEleMap };
|
3946
3982
|
}
|
3947
3983
|
catch (e) {
|
3948
|
-
this.
|
3984
|
+
console.error('解析表达式出错,parseEleExpression', this.props.expression);
|
3985
|
+
}
|
3986
|
+
}
|
3987
|
+
/**
|
3988
|
+
* 元素可见行求值
|
3989
|
+
* @param ele
|
3990
|
+
* @param executeCtx
|
3991
|
+
* @private
|
3992
|
+
*/
|
3993
|
+
evalEleExpr(executeCtx) {
|
3994
|
+
if (this.parserExpress && this.parserExpress.func) {
|
3995
|
+
try {
|
3996
|
+
executeCtx.setCurrentCtx(this, this.parserExpress.depItems);
|
3997
|
+
const func = this.parserExpress.func.bind(executeCtx);
|
3998
|
+
func();
|
3999
|
+
}
|
4000
|
+
catch (e) {
|
4001
|
+
console.error(e, "表达式执行出错:evalVisibleExpr", this.parserExpress.compliedCode);
|
4002
|
+
}
|
4003
|
+
finally {
|
4004
|
+
executeCtx.clearCurrentCtx();
|
4005
|
+
}
|
3949
4006
|
}
|
3950
4007
|
}
|
3951
4008
|
/**
|
@@ -8580,7 +8637,7 @@ class DataElementGroupElement extends InlineGroupInputElement {
|
|
8580
8637
|
return {
|
8581
8638
|
type: this.type,
|
8582
8639
|
props: {
|
8583
|
-
...this.props.getSerializeProps()
|
8640
|
+
...this.props.getSerializeProps(viewOptions)
|
8584
8641
|
}
|
8585
8642
|
};
|
8586
8643
|
}
|
@@ -8602,9 +8659,7 @@ class DataElementGroupFactory extends DataElementBaseFactory {
|
|
8602
8659
|
createElement(data) {
|
8603
8660
|
const props = data.props;
|
8604
8661
|
const ele = new DataElementGroupElement();
|
8605
|
-
ele.props
|
8606
|
-
ele.props.name = props.name;
|
8607
|
-
ele.props.hidden = Boolean(props.hidden);
|
8662
|
+
ElementUtil.readEleBaseProps(ele.props, props);
|
8608
8663
|
return ele;
|
8609
8664
|
}
|
8610
8665
|
}
|
@@ -8909,7 +8964,11 @@ class DataElementText extends DataElementInlineGroup {
|
|
8909
8964
|
super('data-ele-text');
|
8910
8965
|
this.props = new DataEleBaseTextProps();
|
8911
8966
|
}
|
8912
|
-
createRenderObject() {
|
8967
|
+
createRenderObject(data) {
|
8968
|
+
if (data.options.enableDyExpression) {
|
8969
|
+
this.parseEleExpression(data);
|
8970
|
+
this.evalEleExpr(data.execute);
|
8971
|
+
}
|
8913
8972
|
return new DataElementTextRenderObject(this);
|
8914
8973
|
}
|
8915
8974
|
serialize(viewOptions) {
|
@@ -13867,7 +13926,7 @@ class ParagraphMeasure {
|
|
13867
13926
|
}
|
13868
13927
|
}
|
13869
13928
|
arrangeInlineGroupElement(parentLine, ele) {
|
13870
|
-
const { options, renderCtx } = this;
|
13929
|
+
const { options, renderCtx, execute } = this;
|
13871
13930
|
let render = this.createRenderObject(ele);
|
13872
13931
|
//记录多行情况下的渲染对象,用于计算总长度,生成fill-null-space
|
13873
13932
|
const inlineGroupRenders = [];
|
@@ -13903,7 +13962,7 @@ class ParagraphMeasure {
|
|
13903
13962
|
isCloseToBody: parentLine.isCloseToBody,
|
13904
13963
|
applyNewLine() {
|
13905
13964
|
parentLine.applyNewLine();
|
13906
|
-
render = ele.createRenderObject({ options, renderCtx });
|
13965
|
+
render = ele.createRenderObject({ options, renderCtx, execute });
|
13907
13966
|
parentLine.add(render);
|
13908
13967
|
inlineGroupRenders.push(render);
|
13909
13968
|
},
|
@@ -14238,7 +14297,8 @@ class ParagraphMeasure {
|
|
14238
14297
|
}
|
14239
14298
|
return element.createRenderObject({
|
14240
14299
|
options: this.options,
|
14241
|
-
renderCtx: this.renderCtx
|
14300
|
+
renderCtx: this.renderCtx,
|
14301
|
+
execute: this.execute
|
14242
14302
|
});
|
14243
14303
|
}
|
14244
14304
|
}
|
@@ -14397,8 +14457,9 @@ class DocumentArrange {
|
|
14397
14457
|
this.pMeasure = new ParagraphMeasure(this.options, this.renderCtx, this.execute);
|
14398
14458
|
const data = {
|
14399
14459
|
doc,
|
14400
|
-
|
14460
|
+
options: this.options,
|
14401
14461
|
execute: this.execute,
|
14462
|
+
renderCtx: this.renderCtx,
|
14402
14463
|
createParaFn: () => this.createDefaultPara()
|
14403
14464
|
};
|
14404
14465
|
this.reset(data);
|
@@ -14601,7 +14662,7 @@ class DocumentArrange {
|
|
14601
14662
|
if (this.options.textRowLineMode && ele instanceof TableElement && ele.cacheRender) {
|
14602
14663
|
const cacheRender = ele.cacheRender;
|
14603
14664
|
clearChildrenRenderCache(ele);
|
14604
|
-
textLineRenderMode(cacheRender, { options: this.options, renderCtx: this.renderCtx });
|
14665
|
+
textLineRenderMode(cacheRender, { options: this.options, renderCtx: this.renderCtx, execute: this.execute });
|
14605
14666
|
}
|
14606
14667
|
}
|
14607
14668
|
getDocInnerRect(documentRender) {
|
@@ -19419,7 +19480,7 @@ class EditorCalendarVNode {
|
|
19419
19480
|
data: {
|
19420
19481
|
style: {
|
19421
19482
|
position: 'absolute',
|
19422
|
-
left: (position.x
|
19483
|
+
left: (position.x) + 'px',
|
19423
19484
|
top: position.y + 5 + position.height + 'px',
|
19424
19485
|
'min-width': '100px',
|
19425
19486
|
'background-color': 'white',
|
@@ -19555,6 +19616,9 @@ class EditorCalendarVNode {
|
|
19555
19616
|
on: {
|
19556
19617
|
click: () => {
|
19557
19618
|
this.onClickDayItem(day.date);
|
19619
|
+
},
|
19620
|
+
dblclick: () => {
|
19621
|
+
this.onSave();
|
19558
19622
|
}
|
19559
19623
|
}
|
19560
19624
|
},
|
@@ -19612,12 +19676,7 @@ class EditorCalendarVNode {
|
|
19612
19676
|
data: {
|
19613
19677
|
on: {
|
19614
19678
|
click: () => {
|
19615
|
-
|
19616
|
-
this.onSetValue.next(new Date());
|
19617
|
-
}
|
19618
|
-
else {
|
19619
|
-
this.onSetValue.next(moment(this.selectedDate.value + ' ' + this.selectedTime.value).toDate());
|
19620
|
-
}
|
19679
|
+
this.onSave();
|
19621
19680
|
}
|
19622
19681
|
}
|
19623
19682
|
},
|
@@ -19637,6 +19696,14 @@ class EditorCalendarVNode {
|
|
19637
19696
|
]
|
19638
19697
|
};
|
19639
19698
|
}
|
19699
|
+
onSave() {
|
19700
|
+
if (!this.selectedDate.value) {
|
19701
|
+
this.onSetValue.next(new Date());
|
19702
|
+
}
|
19703
|
+
else {
|
19704
|
+
this.onSetValue.next(moment(this.selectedDate.value + ' ' + this.selectedTime.value).toDate());
|
19705
|
+
}
|
19706
|
+
}
|
19640
19707
|
navigateToToday() {
|
19641
19708
|
this.currYear.value = new Date().getFullYear();
|
19642
19709
|
this.currMonth.value = new Date().getMonth();
|
@@ -20349,7 +20416,6 @@ class DocEditor {
|
|
20349
20416
|
beforeRenderSubject = new Subject();
|
20350
20417
|
afterRenderSubject = new Subject();
|
20351
20418
|
onBeforeSetCursorSubject = new Subject();
|
20352
|
-
contentChanged = new Subject();
|
20353
20419
|
onPatchVNodeSubject = new Subject();
|
20354
20420
|
selectionState;
|
20355
20421
|
onDblClickEvent = new Subject();
|
@@ -20641,10 +20707,12 @@ class DocEditor {
|
|
20641
20707
|
}
|
20642
20708
|
loadDoc(data) {
|
20643
20709
|
suppressTracking(() => {
|
20644
|
-
this.
|
20645
|
-
|
20646
|
-
|
20647
|
-
|
20710
|
+
this.noEffectChange(() => {
|
20711
|
+
this.adjustPageLayout();
|
20712
|
+
this.elementReader.read(data);
|
20713
|
+
this.refreshDocument();
|
20714
|
+
this.historyMange.clear();
|
20715
|
+
});
|
20648
20716
|
});
|
20649
20717
|
}
|
20650
20718
|
/**
|
@@ -20662,7 +20730,6 @@ class DocEditor {
|
|
20662
20730
|
suppressTracking(() => {
|
20663
20731
|
this.documentPaginator.rePages();
|
20664
20732
|
});
|
20665
|
-
this.contentChanged.next();
|
20666
20733
|
}
|
20667
20734
|
this.updateSelection();
|
20668
20735
|
this.setCursor();
|
@@ -21565,7 +21632,7 @@ class DocEditor {
|
|
21565
21632
|
const scaleFitContainer = {
|
21566
21633
|
sel: 'div#scale-fit-container',
|
21567
21634
|
data: {
|
21568
|
-
style: {
|
21635
|
+
style: { height: '0px', }
|
21569
21636
|
},
|
21570
21637
|
children: [docContent]
|
21571
21638
|
};
|
@@ -21727,7 +21794,7 @@ class DocEditor {
|
|
21727
21794
|
data: {
|
21728
21795
|
style: {
|
21729
21796
|
position: 'absolute',
|
21730
|
-
left: (position.x
|
21797
|
+
left: (position.x) + 'px',
|
21731
21798
|
top: position.y + 5 + position.height + 'px',
|
21732
21799
|
},
|
21733
21800
|
hook: {
|
@@ -21893,7 +21960,7 @@ class DocEditor {
|
|
21893
21960
|
rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
|
21894
21961
|
}
|
21895
21962
|
version() {
|
21896
|
-
return "2.2.
|
21963
|
+
return "2.2.7";
|
21897
21964
|
}
|
21898
21965
|
switchPageHeaderEditor() {
|
21899
21966
|
this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
|
@@ -22196,6 +22263,13 @@ class DocEditor {
|
|
22196
22263
|
this.documentChange.appendText(text, this.docCtx.suggestions.currentMatchedText);
|
22197
22264
|
}
|
22198
22265
|
}
|
22266
|
+
parser(code, returnProcess = false) {
|
22267
|
+
const res = parser(code);
|
22268
|
+
if (returnProcess) {
|
22269
|
+
return addReturn(res);
|
22270
|
+
}
|
22271
|
+
return res;
|
22272
|
+
}
|
22199
22273
|
}
|
22200
22274
|
|
22201
22275
|
/**
|