ngx-rs-ant 2.2.2 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/data-grid/data-grid.component.mjs +3 -3
- package/esm2020/data-grid/instance-link-template/instance-link-template.component.mjs +3 -3
- package/esm2020/form/form.component.mjs +4 -4
- package/esm2020/public-api.mjs +11 -1
- package/esm2020/types/component/mark-item-component-base.mjs +8 -0
- package/esm2020/types/config/mark-item-config-base.mjs +4 -0
- package/esm2020/types/config/modal-config-base.mjs +1 -1
- package/esm2020/util/utils.mjs +17 -17
- package/esm2020/word/section/color.pipe.mjs +19 -0
- package/esm2020/word/section/mark.pipe.mjs +20 -0
- package/esm2020/word/section/node/node.component.mjs +31 -0
- package/esm2020/word/section/node/paragraph/paragraph.component.mjs +44 -0
- package/esm2020/word/section/node/paragraph/run/run.component.mjs +84 -0
- package/esm2020/word/section/node/paragraph-for-input/item/item.component.mjs +64 -0
- package/esm2020/word/section/node/paragraph-for-input/paragraph-for-input.component.mjs +46 -0
- package/esm2020/word/section/pt.pipe.mjs +22 -0
- package/esm2020/word/section/section.component.mjs +44 -0
- package/esm2020/word/section/section.module.mjs +50 -0
- package/esm2020/word/section/section.service.mjs +48 -0
- package/esm2020/word/word-designer/mark-config/mark-config.component.mjs +77 -0
- package/esm2020/word/word-designer/word-designer.component.mjs +207 -0
- package/esm2020/word/word-designer/word-designer.module.mjs +35 -0
- package/esm2020/word/word-designer/word-designer.service.mjs +69 -0
- package/esm2020/word/word-editor/word-editor.component.mjs +154 -0
- package/esm2020/word/word-editor/word-editor.module.mjs +32 -0
- package/esm2020/word/word-editor/word-editor.service.mjs +67 -0
- package/fesm2015/ngx-rs-ant.mjs +1038 -22
- package/fesm2015/ngx-rs-ant.mjs.map +1 -1
- package/fesm2020/ngx-rs-ant.mjs +1031 -22
- package/fesm2020/ngx-rs-ant.mjs.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +10 -0
- package/types/component/mark-item-component-base.d.ts +21 -0
- package/types/config/mark-item-config-base.d.ts +17 -0
- package/types/config/modal-config-base.d.ts +8 -0
- package/util/utils.d.ts +10 -10
- package/word/section/color.pipe.d.ts +7 -0
- package/word/section/mark.pipe.d.ts +10 -0
- package/word/section/node/node.component.d.ts +12 -0
- package/word/section/node/paragraph/paragraph.component.d.ts +35 -0
- package/word/section/node/paragraph/run/run.component.d.ts +21 -0
- package/word/section/node/paragraph-for-input/item/item.component.d.ts +27 -0
- package/word/section/node/paragraph-for-input/paragraph-for-input.component.d.ts +35 -0
- package/word/section/pt.pipe.d.ts +7 -0
- package/word/section/section.component.d.ts +22 -0
- package/word/section/section.module.d.ts +16 -0
- package/word/section/section.service.d.ts +24 -0
- package/word/word-designer/mark-config/mark-config.component.d.ts +21 -0
- package/word/word-designer/word-designer.component.d.ts +48 -0
- package/word/word-designer/word-designer.module.d.ts +11 -0
- package/word/word-designer/word-designer.service.d.ts +13 -0
- package/word/word-editor/word-editor.component.d.ts +41 -0
- package/word/word-editor/word-editor.module.d.ts +10 -0
- package/word/word-editor/word-editor.service.d.ts +14 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EventEmitter, Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SectionService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.scale = 1;
|
|
6
|
+
this.marks = [];
|
|
7
|
+
this.readonly = false;
|
|
8
|
+
this.activeMark = { name: '未定义书签' };
|
|
9
|
+
this.copiedMark = {};
|
|
10
|
+
this.readyPasteMarkNames = [];
|
|
11
|
+
this.lastClickToPasteMarkName = '';
|
|
12
|
+
this.valueUpdated = new EventEmitter();
|
|
13
|
+
}
|
|
14
|
+
switchMark(type) {
|
|
15
|
+
let index = this.marks.indexOf(this.activeMark);
|
|
16
|
+
if (index + type === -1) {
|
|
17
|
+
this.activeMark = this.marks[this.marks.length - 1];
|
|
18
|
+
}
|
|
19
|
+
else if (index + type === this.marks.length) {
|
|
20
|
+
this.activeMark = this.marks[0];
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.activeMark = this.marks[index + type];
|
|
24
|
+
}
|
|
25
|
+
document.getElementById('mark-setting_' + this.activeMark.name)?.scrollIntoView({
|
|
26
|
+
block: 'center',
|
|
27
|
+
inline: 'center'
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
getMark(name) {
|
|
31
|
+
if (!name) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return this.marks.find(m => m.name === name);
|
|
35
|
+
}
|
|
36
|
+
getMarkIndex(name) {
|
|
37
|
+
if (!name) {
|
|
38
|
+
return -1;
|
|
39
|
+
}
|
|
40
|
+
return this.marks.findIndex(m => m.name === name);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
SectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
44
|
+
SectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SectionService });
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SectionService, decorators: [{
|
|
46
|
+
type: Injectable
|
|
47
|
+
}] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvd29yZC9zZWN0aW9uL3NlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHdkQsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFTRSxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFVBQUssR0FBVSxFQUFFLENBQUM7UUFDbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixlQUFVLEdBQVEsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQix3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFDbkMsNkJBQXdCLEdBQVcsRUFBRSxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQThCekM7SUE1QkMsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUM7WUFDOUUsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVM7UUFDZixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7OzRHQTVDVSxjQUFjO2dIQUFkLGNBQWM7NEZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlY3Rpb25TZXJ2aWNlIHtcbiAgdGVuYW50OiBhbnk7XG4gIHRlbXBsYXRlQ2xhc3NOYW1lOiBhbnk7XG4gIGluc3RhbmNlQ2xhc3NOYW1lOiBhbnk7XG4gIHRlbXBsYXRlT2lkOiBhbnk7XG4gIGluc3RhbmNlT2lkOiBhbnk7XG4gIHBhcmFtczogYW55O1xuICB0YWJWaWV3Q29udGFpbmVyUmVmOiBhbnk7XG4gIHNjYWxlOiBudW1iZXIgPSAxO1xuICBtYXJrczogYW55W10gPSBbXTtcbiAgcmVhZG9ubHkgPSBmYWxzZTtcbiAgYWN0aXZlTWFyazogYW55ID0ge25hbWU6ICfmnKrlrprkuYnkuabnrb4nfTtcbiAgY29waWVkTWFyazogYW55ID0ge307XG4gIHJlYWR5UGFzdGVNYXJrTmFtZXM6IHN0cmluZ1tdID0gW107XG4gIGxhc3RDbGlja1RvUGFzdGVNYXJrTmFtZTogc3RyaW5nID0gJyc7XG4gIHZhbHVlVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBzd2l0Y2hNYXJrKHR5cGU6IG51bWJlcikge1xuICAgIGxldCBpbmRleCA9IHRoaXMubWFya3MuaW5kZXhPZih0aGlzLmFjdGl2ZU1hcmspO1xuICAgIGlmIChpbmRleCArIHR5cGUgPT09IC0xKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1hcmsgPSB0aGlzLm1hcmtzW3RoaXMubWFya3MubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIGlmIChpbmRleCArIHR5cGUgPT09IHRoaXMubWFya3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1hcmsgPSB0aGlzLm1hcmtzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZU1hcmsgPSB0aGlzLm1hcmtzW2luZGV4ICsgdHlwZV07XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXJrLXNldHRpbmdfJyArIHRoaXMuYWN0aXZlTWFyay5uYW1lKT8uc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnY2VudGVyJ1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWFyayhuYW1lOiBhbnkpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hcmtzLmZpbmQobSA9PiBtLm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgZ2V0TWFya0luZGV4KG5hbWU6IGFueSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYXJrcy5maW5kSW5kZXgobSA9PiBtLm5hbWUgPT09IG5hbWUpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { MarkItemFactory } from "coast-plugin-register";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "devextreme-angular/ui/nested";
|
|
5
|
+
import * as i2 from "devextreme-angular/ui/select-box";
|
|
6
|
+
import * as i3 from "devextreme-angular/ui/text-box";
|
|
7
|
+
import * as i4 from "devextreme-angular/ui/validator";
|
|
8
|
+
export class MarkConfigComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.changeMark = false;
|
|
11
|
+
}
|
|
12
|
+
get mark() {
|
|
13
|
+
return this._mark;
|
|
14
|
+
}
|
|
15
|
+
set mark(mark) {
|
|
16
|
+
if (!mark) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
this._mark = mark;
|
|
20
|
+
this.changeMark = true;
|
|
21
|
+
this.loadMarkConfig();
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.markTypes = MarkItemFactory.getMarkItems(...this.filterCategories || '');
|
|
25
|
+
}
|
|
26
|
+
loadMarkConfig() {
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
this.markItemConfigRef.clear();
|
|
29
|
+
let config = MarkItemFactory.getConfig(this.mark.type);
|
|
30
|
+
if (!config) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const componentRef = this.markItemConfigRef.createComponent(config.component);
|
|
34
|
+
const instance = componentRef.instance;
|
|
35
|
+
instance.tenant = this.tenant;
|
|
36
|
+
instance.templateClassName = this.templateClassName;
|
|
37
|
+
instance.templateOid = this.templateOid;
|
|
38
|
+
instance.instanceClassName = this.instanceClassName;
|
|
39
|
+
instance.mark = this.mark;
|
|
40
|
+
instance.marks = this.marks;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
changeMarkType() {
|
|
44
|
+
if (this.changeMark) {
|
|
45
|
+
this.changeMark = false;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.mark.pickerCode = null;
|
|
49
|
+
this.mark.generatorCode = null;
|
|
50
|
+
}
|
|
51
|
+
this.loadMarkConfig();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
MarkConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MarkConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
+
MarkConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MarkConfigComponent, selector: "rs-mark-config", inputs: { tenant: "tenant", templateClassName: "templateClassName", templateOid: "templateOid", instanceClassName: "instanceClassName", filterCategories: "filterCategories", mark: "mark", marks: "marks" }, viewQueries: [{ propertyName: "markItemConfigRef", first: true, predicate: ["markItemConfigRef"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u4E66\u7B7E\u6807\u8BC6</span>\n <span class=\"required-mark\"> *</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-text-box [(value)]=\"mark.name\" [readOnly]=\"true\">\n <dx-validator>\n <dxi-validation-rule type=\"required\" message=\"\u503C\u4E0D\u80FD\u4E3A\u7A7A\"></dxi-validation-rule>\n </dx-validator>\n </dx-text-box>\n </div>\n</div>\n<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u4E66\u7B7E\u540D\u79F0</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-text-box [(value)]=\"mark.display\"></dx-text-box>\n </div>\n</div>\n<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u7EC4\u4EF6\u7C7B\u578B</span>\n <span class=\"required-mark\"> *</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-select-box [dataSource]=\"markTypes\"\n valueExpr=\"name\"\n displayExpr=\"caption\"\n [(value)]=\"mark.type\"\n (onSelectionChanged)=\"changeMarkType()\">\n <dx-validator>\n <dxi-validation-rule type=\"required\" message=\"\u503C\u4E0D\u80FD\u4E3A\u7A7A\"></dxi-validation-rule>\n </dx-validator>\n </dx-select-box>\n </div>\n</div>\n<ng-container #markItemConfigRef></ng-container>\n", styles: [":host .dx-field{margin-bottom:8px;display:flex;flex-flow:row nowrap}:host .dx-field .dx-field-label{flex:0 0 80px}:host .dx-field .dx-field-value{flex:1}\n"], dependencies: [{ kind: "component", type: i1.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: i2.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i3.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i4.DxValidatorComponent, selector: "dx-validator", inputs: ["adapter", "elementAttr", "height", "name", "validationGroup", "validationRules", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onValidated", "adapterChange", "elementAttrChange", "heightChange", "nameChange", "validationGroupChange", "validationRulesChange", "widthChange"] }] });
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MarkConfigComponent, decorators: [{
|
|
57
|
+
type: Component,
|
|
58
|
+
args: [{ selector: 'rs-mark-config', template: "<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u4E66\u7B7E\u6807\u8BC6</span>\n <span class=\"required-mark\"> *</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-text-box [(value)]=\"mark.name\" [readOnly]=\"true\">\n <dx-validator>\n <dxi-validation-rule type=\"required\" message=\"\u503C\u4E0D\u80FD\u4E3A\u7A7A\"></dxi-validation-rule>\n </dx-validator>\n </dx-text-box>\n </div>\n</div>\n<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u4E66\u7B7E\u540D\u79F0</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-text-box [(value)]=\"mark.display\"></dx-text-box>\n </div>\n</div>\n<div class=\"dx-field\">\n <div class=\"dx-field-label\">\n <span>\u7EC4\u4EF6\u7C7B\u578B</span>\n <span class=\"required-mark\"> *</span>\n </div>\n <div class=\"dx-field-value\">\n <dx-select-box [dataSource]=\"markTypes\"\n valueExpr=\"name\"\n displayExpr=\"caption\"\n [(value)]=\"mark.type\"\n (onSelectionChanged)=\"changeMarkType()\">\n <dx-validator>\n <dxi-validation-rule type=\"required\" message=\"\u503C\u4E0D\u80FD\u4E3A\u7A7A\"></dxi-validation-rule>\n </dx-validator>\n </dx-select-box>\n </div>\n</div>\n<ng-container #markItemConfigRef></ng-container>\n", styles: [":host .dx-field{margin-bottom:8px;display:flex;flex-flow:row nowrap}:host .dx-field .dx-field-label{flex:0 0 80px}:host .dx-field .dx-field-value{flex:1}\n"] }]
|
|
59
|
+
}], propDecorators: { tenant: [{
|
|
60
|
+
type: Input
|
|
61
|
+
}], templateClassName: [{
|
|
62
|
+
type: Input
|
|
63
|
+
}], templateOid: [{
|
|
64
|
+
type: Input
|
|
65
|
+
}], instanceClassName: [{
|
|
66
|
+
type: Input
|
|
67
|
+
}], filterCategories: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], mark: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], marks: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], markItemConfigRef: [{
|
|
74
|
+
type: ViewChild,
|
|
75
|
+
args: ['markItemConfigRef', { static: true, read: ViewContainerRef }]
|
|
76
|
+
}] } });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyay1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvd29yZC93b3JkLWRlc2lnbmVyL21hcmstY29uZmlnL21hcmstY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ycy1hbnQvc3JjL3dvcmQvd29yZC1kZXNpZ25lci9tYXJrLWNvbmZpZy9tYXJrLWNvbmZpZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFPdEQsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQW1DVSxlQUFVLEdBQUcsS0FBSyxDQUFDO0tBa0M1QjtJQXBEQyxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQVM7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBU0QsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsY0FBYztRQUNaLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1gsT0FBTzthQUNSO1lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUUsTUFBTSxRQUFRLEdBQVEsWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUM1QyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDOUIsUUFBUSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNwRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNwRCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDMUIsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7aUhBL0RVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLHVXQStCdUIsZ0JBQWdCLDJDQ3ZDdkUsdTFDQXVDQTs0RkQvQmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjs4QkFNMUIsTUFBTTtzQkFETCxLQUFLO2dCQUdOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFHTixXQUFXO3NCQURWLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSztnQkFnQk4sS0FBSztzQkFESixLQUFLO2dCQUlrRSxpQkFBaUI7c0JBQXhGLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWFya0l0ZW1GYWN0b3J5fSBmcm9tIFwiY29hc3QtcGx1Z2luLXJlZ2lzdGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JzLW1hcmstY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcmstY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFyay1jb25maWcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYXJrQ29uZmlnQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgdGVuYW50OiBhbnk7XG4gIEBJbnB1dCgpXG4gIHRlbXBsYXRlQ2xhc3NOYW1lOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHRlbXBsYXRlT2lkOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGluc3RhbmNlQ2xhc3NOYW1lOiBhbnk7XG4gIEBJbnB1dCgpXG4gIGZpbHRlckNhdGVnb3JpZXM/OiBzdHJpbmdbXTtcblxuICBASW5wdXQoKVxuICBnZXQgbWFyaygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFyaztcbiAgfVxuXG4gIHNldCBtYXJrKG1hcms6IGFueSkge1xuICAgIGlmICghbWFyaykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tYXJrID0gbWFyaztcbiAgICB0aGlzLmNoYW5nZU1hcmsgPSB0cnVlO1xuICAgIHRoaXMubG9hZE1hcmtDb25maWcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX21hcms6IGFueTtcbiAgQElucHV0KClcbiAgbWFya3M6IGFueTtcbiAgcHJvdGVjdGVkIG1hcmtUeXBlczogYW55O1xuICBwcml2YXRlIGNoYW5nZU1hcmsgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZCgnbWFya0l0ZW1Db25maWdSZWYnLCB7c3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSkgbWFya0l0ZW1Db25maWdSZWYhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubWFya1R5cGVzID0gTWFya0l0ZW1GYWN0b3J5LmdldE1hcmtJdGVtcyguLi50aGlzLmZpbHRlckNhdGVnb3JpZXMgfHwgJycpO1xuICB9XG5cbiAgbG9hZE1hcmtDb25maWcoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hcmtJdGVtQ29uZmlnUmVmLmNsZWFyKCk7XG4gICAgICBsZXQgY29uZmlnID0gTWFya0l0ZW1GYWN0b3J5LmdldENvbmZpZyh0aGlzLm1hcmsudHlwZSk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLm1hcmtJdGVtQ29uZmlnUmVmLmNyZWF0ZUNvbXBvbmVudChjb25maWcuY29tcG9uZW50KTtcbiAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICBpbnN0YW5jZS50ZW5hbnQgPSB0aGlzLnRlbmFudDtcbiAgICAgIGluc3RhbmNlLnRlbXBsYXRlQ2xhc3NOYW1lID0gdGhpcy50ZW1wbGF0ZUNsYXNzTmFtZTtcbiAgICAgIGluc3RhbmNlLnRlbXBsYXRlT2lkID0gdGhpcy50ZW1wbGF0ZU9pZDtcbiAgICAgIGluc3RhbmNlLmluc3RhbmNlQ2xhc3NOYW1lID0gdGhpcy5pbnN0YW5jZUNsYXNzTmFtZTtcbiAgICAgIGluc3RhbmNlLm1hcmsgPSB0aGlzLm1hcms7XG4gICAgICBpbnN0YW5jZS5tYXJrcyA9IHRoaXMubWFya3M7XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VNYXJrVHlwZSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VNYXJrKSB7XG4gICAgICB0aGlzLmNoYW5nZU1hcmsgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXJrLnBpY2tlckNvZGUgPSBudWxsO1xuICAgICAgdGhpcy5tYXJrLmdlbmVyYXRvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmxvYWRNYXJrQ29uZmlnKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtbGFiZWxcIj5cbiAgICA8c3Bhbj7kuabnrb7moIfor4Y8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1tYXJrXCI+Jm5ic3A7Kjwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkeC1maWVsZC12YWx1ZVwiPlxuICAgIDxkeC10ZXh0LWJveCBbKHZhbHVlKV09XCJtYXJrLm5hbWVcIiBbcmVhZE9ubHldPVwidHJ1ZVwiPlxuICAgICAgPGR4LXZhbGlkYXRvcj5cbiAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGUgdHlwZT1cInJlcXVpcmVkXCIgbWVzc2FnZT1cIuWAvOS4jeiDveS4uuepulwiPjwvZHhpLXZhbGlkYXRpb24tcnVsZT5cbiAgICAgIDwvZHgtdmFsaWRhdG9yPlxuICAgIDwvZHgtdGV4dC1ib3g+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLWxhYmVsXCI+XG4gICAgPHNwYW4+5Lmm562+5ZCN56ewPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLXZhbHVlXCI+XG4gICAgPGR4LXRleHQtYm94IFsodmFsdWUpXT1cIm1hcmsuZGlzcGxheVwiPjwvZHgtdGV4dC1ib3g+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgPGRpdiBjbGFzcz1cImR4LWZpZWxkLWxhYmVsXCI+XG4gICAgPHNwYW4+57uE5Lu257G75Z6LPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWQtbWFya1wiPiZuYnNwOyo8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHgtZmllbGQtdmFsdWVcIj5cbiAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJtYXJrVHlwZXNcIlxuICAgICAgICAgICAgICAgICAgIHZhbHVlRXhwcj1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwiY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibWFyay50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2VkKT1cImNoYW5nZU1hcmtUeXBlKClcIj5cbiAgICAgIDxkeC12YWxpZGF0b3I+XG4gICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlIHR5cGU9XCJyZXF1aXJlZFwiIG1lc3NhZ2U9XCLlgLzkuI3og73kuLrnqbpcIj48L2R4aS12YWxpZGF0aW9uLXJ1bGU+XG4gICAgICA8L2R4LXZhbGlkYXRvcj5cbiAgICA8L2R4LXNlbGVjdC1ib3g+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctY29udGFpbmVyICNtYXJrSXRlbUNvbmZpZ1JlZj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { WordDesignerService } from "./word-designer.service";
|
|
3
|
+
import { deepClone, notifySuccess } from "../../util/utils";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../section/section.service";
|
|
6
|
+
import * as i2 from "./word-designer.service";
|
|
7
|
+
import * as i3 from "../../modal/modal.service";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i5 from "devextreme-angular/ui/nested";
|
|
10
|
+
import * as i6 from "devextreme-angular/ui/button";
|
|
11
|
+
import * as i7 from "devextreme-angular/ui/load-panel";
|
|
12
|
+
import * as i8 from "../section/section.component";
|
|
13
|
+
import * as i9 from "./mark-config/mark-config.component";
|
|
14
|
+
export class WordDesignerComponent {
|
|
15
|
+
handleKeyDown($event) {
|
|
16
|
+
switch ($event.code) {
|
|
17
|
+
case 'ArrowUp':
|
|
18
|
+
if ($event.altKey) {
|
|
19
|
+
this.service.switchMark(-1);
|
|
20
|
+
}
|
|
21
|
+
break;
|
|
22
|
+
case 'ArrowDown':
|
|
23
|
+
if ($event.altKey) {
|
|
24
|
+
this.service.switchMark(1);
|
|
25
|
+
}
|
|
26
|
+
break;
|
|
27
|
+
case 'KeyC':
|
|
28
|
+
if ($event.ctrlKey) {
|
|
29
|
+
const selection = window.getSelection();
|
|
30
|
+
if (selection?.toString()) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this.copyMarkConfig();
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'KeyV':
|
|
37
|
+
if ($event.ctrlKey) {
|
|
38
|
+
this.pasteMarkConfig();
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
case 'Escape':
|
|
42
|
+
this.exitPasteMode();
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (this.mouseInViewer && $event.ctrlKey && $event.key === '0') {
|
|
46
|
+
$event.preventDefault();
|
|
47
|
+
this.scale(0);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
constructor(service, wordDesignerService, viewContainerRef, modalService) {
|
|
51
|
+
this.service = service;
|
|
52
|
+
this.wordDesignerService = wordDesignerService;
|
|
53
|
+
this.viewContainerRef = viewContainerRef;
|
|
54
|
+
this.modalService = modalService;
|
|
55
|
+
this.needUpload = false;
|
|
56
|
+
this.pasteMode = false;
|
|
57
|
+
this.mouseInViewer = false;
|
|
58
|
+
this.loading = false;
|
|
59
|
+
this.retainMarkConfig = false;
|
|
60
|
+
}
|
|
61
|
+
ngOnInit() {
|
|
62
|
+
this.service.tenant = this.tenant;
|
|
63
|
+
this.service.templateClassName = this.className;
|
|
64
|
+
this.service.templateOid = this.oid;
|
|
65
|
+
this.service.instanceClassName = this.instanceClassName;
|
|
66
|
+
this.service.params = this.params;
|
|
67
|
+
this.service.tabViewContainerRef = this.tabViewContainerRef;
|
|
68
|
+
this.loading = true;
|
|
69
|
+
this.wordDesignerService.loadTemplate(this.tenant, this.className, this.oid).subscribe(response => {
|
|
70
|
+
this.loadTemplateAndConfig(response);
|
|
71
|
+
this.loading = false;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
loadTemplateAndConfig(response) {
|
|
75
|
+
this.sections = response.sections || [];
|
|
76
|
+
if (this.sections.length === 0) {
|
|
77
|
+
this.needUpload = true;
|
|
78
|
+
this.loading = false;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
this.needUpload = false;
|
|
82
|
+
this.service.marks = response.marks.map((mark) => {
|
|
83
|
+
mark.config = mark.config || {};
|
|
84
|
+
return mark;
|
|
85
|
+
});
|
|
86
|
+
if (this.service.marks.length > 0) {
|
|
87
|
+
this.service.activeMark = this.service.marks[0];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
scaleByMouse($event) {
|
|
91
|
+
if ($event.ctrlKey) {
|
|
92
|
+
$event.preventDefault();
|
|
93
|
+
this.scale($event.deltaY < 0 ? 0.1 : -0.1);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
scale(type) {
|
|
97
|
+
if (type === 0) {
|
|
98
|
+
this.service.scale = 1;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.service.scale += type;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
upload() {
|
|
105
|
+
this.loading = true;
|
|
106
|
+
this.wordDesignerService.uploadTemplateFile(this.tenant, this.className, this.oid, this.retainMarkConfig, this.uploadInput.nativeElement.files[0]).subscribe(response => {
|
|
107
|
+
this.uploadInput.nativeElement.value = '';
|
|
108
|
+
this.loadTemplateAndConfig(response);
|
|
109
|
+
this.loading = false;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
openReplaceTemplateFileModal() {
|
|
113
|
+
this.replaceFileModal = this.modalService.open(this.tabViewContainerRef, '替换文件', 'default', this.replaceFileModalTemplate, {});
|
|
114
|
+
}
|
|
115
|
+
replaceTemplateFile(retainMarkConfig) {
|
|
116
|
+
this.retainMarkConfig = retainMarkConfig;
|
|
117
|
+
this.uploadInput.nativeElement.click();
|
|
118
|
+
this.replaceFileModal?.hide();
|
|
119
|
+
}
|
|
120
|
+
downloadTemplateFile() {
|
|
121
|
+
this.loading = true;
|
|
122
|
+
this.wordDesignerService.downloadTemplateFile(this.tenant, this.className, this.oid, () => {
|
|
123
|
+
this.loading = false;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
preview() {
|
|
127
|
+
for (let mark of this.service.marks) {
|
|
128
|
+
mark.value = undefined;
|
|
129
|
+
}
|
|
130
|
+
this.previewModal = this.modalService.open(this.tabViewContainerRef, '预览', 'full', this.previewTemplate, {}, this.previewFooterTemplate);
|
|
131
|
+
}
|
|
132
|
+
saveConfig() {
|
|
133
|
+
this.loading = true;
|
|
134
|
+
this.service.marks.map(mark => {
|
|
135
|
+
delete mark.value;
|
|
136
|
+
});
|
|
137
|
+
this.wordDesignerService.save(this.tenant, this.className, this.oid, {
|
|
138
|
+
templateConfig: JSON.stringify({
|
|
139
|
+
sections: this.sections,
|
|
140
|
+
marks: this.service.marks
|
|
141
|
+
})
|
|
142
|
+
}).subscribe(response => {
|
|
143
|
+
if (response.success) {
|
|
144
|
+
notifySuccess('保存成功');
|
|
145
|
+
this.loading = false;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
copyMarkConfig() {
|
|
150
|
+
this.service.copiedMark = deepClone(this.service.activeMark);
|
|
151
|
+
this.pasteMode = true;
|
|
152
|
+
}
|
|
153
|
+
exitPasteMode() {
|
|
154
|
+
this.service.copiedMark = {};
|
|
155
|
+
this.service.readyPasteMarkNames = [];
|
|
156
|
+
this.service.lastClickToPasteMarkName = '';
|
|
157
|
+
this.pasteMode = false;
|
|
158
|
+
}
|
|
159
|
+
pasteMarkConfig() {
|
|
160
|
+
let readyPasteMark;
|
|
161
|
+
for (let readyPasteMarkName of this.service.readyPasteMarkNames) {
|
|
162
|
+
readyPasteMark = this.service.getMark(readyPasteMarkName);
|
|
163
|
+
const display = readyPasteMark.display;
|
|
164
|
+
Object.assign(readyPasteMark, deepClone(this.service.copiedMark));
|
|
165
|
+
readyPasteMark.name = readyPasteMarkName;
|
|
166
|
+
readyPasteMark.display = display;
|
|
167
|
+
}
|
|
168
|
+
this.service.activeMark = readyPasteMark || this.service.activeMark;
|
|
169
|
+
this.exitPasteMode();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
WordDesignerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerComponent, deps: [{ token: i1.SectionService }, { token: i2.WordDesignerService }, { token: i0.ViewContainerRef }, { token: i3.ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
173
|
+
WordDesignerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WordDesignerComponent, selector: "rs-word-designer", inputs: { tenant: "tenant", className: "className", oid: "oid", instanceClassName: "instanceClassName", filterCategories: "filterCategories", params: "params", tabViewContainerRef: "tabViewContainerRef" }, host: { listeners: { "window:keydown": "handleKeyDown($event)" } }, providers: [WordDesignerService], viewQueries: [{ propertyName: "uploadInput", first: true, predicate: ["uploadInput"], descendants: true, static: true }, { propertyName: "replaceFileModalTemplate", first: true, predicate: ["replaceFileModalTemplate"], descendants: true, static: true }, { propertyName: "previewTemplate", first: true, predicate: ["previewTemplate"], descendants: true, static: true }, { propertyName: "previewFooterTemplate", first: true, predicate: ["previewFooterTemplate"], descendants: true, static: true }], ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\" [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<input #uploadInput type=\"file\" name=\"file\"\n accept=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" (change)=\"upload()\"\n style=\"display: none;\"/>\n<div class=\"coast-card\">\n <div class=\"coast-card-content\">\n <div class=\"content-main\" [class.show-upload-btn]=\"needUpload\">\n <ng-container *ngIf=\"needUpload\">\n <dx-button type=\"success\" text=\"\u4E0A\u4F20\u6587\u4EF6\" (onClick)=\"uploadInput.click()\"></dx-button>\n </ng-container>\n <div *ngIf=\"!needUpload\" class=\"left-panel\">\n <div *ngIf=\"pasteMode\" class=\"paste-mode-bar\">\n <span\n class=\"message\">\u5DF2\u8FDB\u5165\u6279\u91CF\u7C98\u8D34\u914D\u7F6E\u6A21\u5F0F\uFF0C\u652F\u6301Ctrl\u3001Shift\u952E\u5FEB\u6377\u9009\u62E9\uFF0C\u6309Ctrl+V\u7EC4\u5408\u952E\u7C98\u8D34\u914D\u7F6E\uFF0C\u6309Esc\u952E\u53D6\u6D88\u64CD\u4F5C\u5E76\u9000\u51FA\u8BE5\u6A21\u5F0F</span>\n <dx-button [width]=\"48\" text=\"\u9000\u51FA\" (onClick)=\"exitPasteMode()\"></dx-button>\n </div>\n <div class=\"content\"\n (mouseenter)=\"mouseInViewer = true;\"\n (mouseleave)=\"mouseInViewer = false;\"\n (mousewheel)=\"scaleByMouse($event)\">\n <div *ngIf=\"!needUpload\" class=\"viewer\">\n <ng-container *ngFor=\"let section of sections\">\n <rs-section [section]=\"section\" [editMode]=\"true\" [pasteMode]=\"pasteMode\"></rs-section>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"!needUpload\" class=\"right-panel\">\n <div class=\"header\">\n <dx-button type=\"default\" text=\"\u66FF\u6362\u6587\u4EF6\" (onClick)=\"openReplaceTemplateFileModal()\"\n [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-download\" hint=\"\u4E0B\u8F7D\u6587\u4EF6\"\n (onClick)=\"downloadTemplateFile()\" [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-direction-up\" hint=\"\u4E0A\u4E00\u4E2A(Alt + \u2191)\"\n (onClick)=\"service.switchMark(-1)\" [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-direction-down\" hint=\"\u4E0B\u4E00\u4E2A(Alt + \u2193)\"\n (onClick)=\"service.switchMark(1)\" [disabled]=\"loading\"></dx-button>\n <dx-button [type]=\"pasteMode ? 'success' : 'default'\" text=\"\u590D\u5236\" hint=\"\u590D\u5236(Ctrl + c)\"\n (onClick)=\"copyMarkConfig()\"></dx-button>\n <dx-button type=\"danger\" text=\"\u7C98\u8D34\" hint=\"\u7C98\u8D34(Ctrl + v)\" (onClick)=\"pasteMarkConfig()\"\n [disabled]=\"loading || !pasteMode\"></dx-button>\n </div>\n <div class=\"config\" *ngIf=\"service.activeMark\">\n <rs-mark-config [tenant]=\"tenant\"\n [templateClassName]=\"className\"\n [templateOid]=\"oid\"\n [instanceClassName]=\"instanceClassName\"\n [filterCategories]=\"filterCategories\"\n [mark]=\"service.activeMark\"\n [marks]=\"service.marks\"></rs-mark-config>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!needUpload\" class=\"footer\">\n <div class=\"left\">\n <dx-button text=\"\u653E\u5927\" (onClick)=\"scale(0.1)\"></dx-button>\n <dx-button text=\"\u8FD8\u539F\" (onClick)=\"scale(0)\"></dx-button>\n <dx-button text=\"\u7F29\u5C0F\" (onClick)=\"scale(-0.1)\"></dx-button>\n </div>\n <div class=\"right\">\n <dx-button type=\"default\" text=\"\u9884\u89C8\" (onClick)=\"preview()\" [disabled]=\"needUpload || loading\"></dx-button>\n <dx-button type=\"success\" text=\"\u4FDD\u5B58\" (onClick)=\"saveConfig()\" [disabled]=\"needUpload || loading\"></dx-button>\n </div>\n </div>\n</div>\n<ng-template #replaceFileModalTemplate>\n <div class=\"confirm-message\">\n <span>\u66FF\u6362\u6587\u4EF6\u53EF\u4EE5\u6309\u7167\u4E66\u7B7E\u6807\u8BC6\u7EE7\u627F\u5DF2\u4FDD\u5B58\u7684\u4E66\u7B7E\u914D\u7F6E\uFF0C\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A</span>\n </div>\n <div class=\"form-buttons\">\n <div class=\"buttons-wrapper\">\n <dx-button type=\"default\" text=\"\u7EE7\u627F\u914D\u7F6E\" (onClick)=\"replaceTemplateFile(true)\"></dx-button>\n <dx-button type=\"danger\" text=\"\u6E05\u9664\u914D\u7F6E\" (onClick)=\"replaceTemplateFile(false)\"></dx-button>\n <dx-button type=\"normal\" text=\"\u53D6\u6D88\" (onClick)=\"replaceFileModal?.hide()\"></dx-button>\n </div>\n </div>\n</ng-template>\n<ng-template #previewTemplate>\n <div class=\"preview-viewer\">\n <div class=\"viewer-container\">\n <div class=\"viewer\">\n <ng-container *ngFor=\"let section of sections\">\n <rs-section [section]=\"section\"></rs-section>\n </ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #previewFooterTemplate>\n <div class=\"form-buttons\">\n <div class=\"buttons-wrapper\">\n <dx-button type=\"normal\" text=\"\u5173\u95ED\" (onClick)=\"previewModal?.hide()\"></dx-button>\n </div>\n </div>\n</ng-template>\n", styles: [":host{flex:1;display:flex;flex-flow:column nowrap}:host .coast-card{flex:1;padding:0}:host .coast-card .content-main{display:flex;flex-flow:row nowrap;padding:16px 0 0 16px;margin:0}:host .coast-card .content-main.show-upload-btn{padding:16px;background-color:var(--coast-empty-color, rgb(229, 229, 229));align-items:center;justify-content:center}:host .coast-card .content-main .left-panel{flex:auto;width:0;overflow-x:auto;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}:host .coast-card .content-main .left-panel .paste-mode-bar{flex:none;padding:8px;background-color:var(--coast-base-bg-color, rgb(255, 255, 255));border:1px solid var(--coast-border-color, rgb(221, 221, 221));display:flex;flex-flow:row nowrap;justify-content:space-between;align-items:center}:host .coast-card .content-main .left-panel .paste-mode-bar .message{font-weight:700}:host .coast-card .content-main .left-panel .content{flex:auto;height:0;overflow-y:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}:host .coast-card .content-main .left-panel .content .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}:host .coast-card .content-main .right-panel{flex:0 0 320px;display:flex;flex-flow:column nowrap;border-left:1px solid var(--coast-border-color, rgb(221, 221, 221))}:host .coast-card .content-main .right-panel .header{flex:none;border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221));padding:0 16px 16px}:host .coast-card .content-main .right-panel .header>dx-button:not(:last-child){margin-right:8px}:host .coast-card .content-main .right-panel .config{flex:auto;height:0;overflow:auto;padding:24px;display:flex;flex-flow:column nowrap}:host .coast-card .footer{flex:none;border-top:1px solid var(--coast-border-color, rgb(221, 221, 221));padding:12px 24px;display:flex;flex-flow:row nowrap;justify-content:space-between}:host .coast-card .footer dx-button{width:80px}:host .coast-card .footer dx-button:not(:last-child){margin-right:8px}.confirm-message{padding:24px;margin-bottom:12px;border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221))}.confirm-message span{font-size:14px}.preview-viewer{flex:auto;height:0;overflow-y:auto;margin:0 16px;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}.preview-viewer .viewer-container{flex:auto;height:0;overflow-x:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}.preview-viewer .viewer-container .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i6.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i7.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i8.SectionComponent, selector: "rs-section", inputs: ["section", "editMode", "pasteMode", "readonly"] }, { kind: "component", type: i9.MarkConfigComponent, selector: "rs-mark-config", inputs: ["tenant", "templateClassName", "templateOid", "instanceClassName", "filterCategories", "mark", "marks"] }] });
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerComponent, decorators: [{
|
|
175
|
+
type: Component,
|
|
176
|
+
args: [{ selector: 'rs-word-designer', providers: [WordDesignerService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\" [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<input #uploadInput type=\"file\" name=\"file\"\n accept=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" (change)=\"upload()\"\n style=\"display: none;\"/>\n<div class=\"coast-card\">\n <div class=\"coast-card-content\">\n <div class=\"content-main\" [class.show-upload-btn]=\"needUpload\">\n <ng-container *ngIf=\"needUpload\">\n <dx-button type=\"success\" text=\"\u4E0A\u4F20\u6587\u4EF6\" (onClick)=\"uploadInput.click()\"></dx-button>\n </ng-container>\n <div *ngIf=\"!needUpload\" class=\"left-panel\">\n <div *ngIf=\"pasteMode\" class=\"paste-mode-bar\">\n <span\n class=\"message\">\u5DF2\u8FDB\u5165\u6279\u91CF\u7C98\u8D34\u914D\u7F6E\u6A21\u5F0F\uFF0C\u652F\u6301Ctrl\u3001Shift\u952E\u5FEB\u6377\u9009\u62E9\uFF0C\u6309Ctrl+V\u7EC4\u5408\u952E\u7C98\u8D34\u914D\u7F6E\uFF0C\u6309Esc\u952E\u53D6\u6D88\u64CD\u4F5C\u5E76\u9000\u51FA\u8BE5\u6A21\u5F0F</span>\n <dx-button [width]=\"48\" text=\"\u9000\u51FA\" (onClick)=\"exitPasteMode()\"></dx-button>\n </div>\n <div class=\"content\"\n (mouseenter)=\"mouseInViewer = true;\"\n (mouseleave)=\"mouseInViewer = false;\"\n (mousewheel)=\"scaleByMouse($event)\">\n <div *ngIf=\"!needUpload\" class=\"viewer\">\n <ng-container *ngFor=\"let section of sections\">\n <rs-section [section]=\"section\" [editMode]=\"true\" [pasteMode]=\"pasteMode\"></rs-section>\n </ng-container>\n </div>\n </div>\n </div>\n <div *ngIf=\"!needUpload\" class=\"right-panel\">\n <div class=\"header\">\n <dx-button type=\"default\" text=\"\u66FF\u6362\u6587\u4EF6\" (onClick)=\"openReplaceTemplateFileModal()\"\n [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-download\" hint=\"\u4E0B\u8F7D\u6587\u4EF6\"\n (onClick)=\"downloadTemplateFile()\" [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-direction-up\" hint=\"\u4E0A\u4E00\u4E2A(Alt + \u2191)\"\n (onClick)=\"service.switchMark(-1)\" [disabled]=\"loading\"></dx-button>\n <dx-button icon=\"coast-icon coast-icon-direction-down\" hint=\"\u4E0B\u4E00\u4E2A(Alt + \u2193)\"\n (onClick)=\"service.switchMark(1)\" [disabled]=\"loading\"></dx-button>\n <dx-button [type]=\"pasteMode ? 'success' : 'default'\" text=\"\u590D\u5236\" hint=\"\u590D\u5236(Ctrl + c)\"\n (onClick)=\"copyMarkConfig()\"></dx-button>\n <dx-button type=\"danger\" text=\"\u7C98\u8D34\" hint=\"\u7C98\u8D34(Ctrl + v)\" (onClick)=\"pasteMarkConfig()\"\n [disabled]=\"loading || !pasteMode\"></dx-button>\n </div>\n <div class=\"config\" *ngIf=\"service.activeMark\">\n <rs-mark-config [tenant]=\"tenant\"\n [templateClassName]=\"className\"\n [templateOid]=\"oid\"\n [instanceClassName]=\"instanceClassName\"\n [filterCategories]=\"filterCategories\"\n [mark]=\"service.activeMark\"\n [marks]=\"service.marks\"></rs-mark-config>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!needUpload\" class=\"footer\">\n <div class=\"left\">\n <dx-button text=\"\u653E\u5927\" (onClick)=\"scale(0.1)\"></dx-button>\n <dx-button text=\"\u8FD8\u539F\" (onClick)=\"scale(0)\"></dx-button>\n <dx-button text=\"\u7F29\u5C0F\" (onClick)=\"scale(-0.1)\"></dx-button>\n </div>\n <div class=\"right\">\n <dx-button type=\"default\" text=\"\u9884\u89C8\" (onClick)=\"preview()\" [disabled]=\"needUpload || loading\"></dx-button>\n <dx-button type=\"success\" text=\"\u4FDD\u5B58\" (onClick)=\"saveConfig()\" [disabled]=\"needUpload || loading\"></dx-button>\n </div>\n </div>\n</div>\n<ng-template #replaceFileModalTemplate>\n <div class=\"confirm-message\">\n <span>\u66FF\u6362\u6587\u4EF6\u53EF\u4EE5\u6309\u7167\u4E66\u7B7E\u6807\u8BC6\u7EE7\u627F\u5DF2\u4FDD\u5B58\u7684\u4E66\u7B7E\u914D\u7F6E\uFF0C\u8BF7\u9009\u62E9\u64CD\u4F5C\uFF1A</span>\n </div>\n <div class=\"form-buttons\">\n <div class=\"buttons-wrapper\">\n <dx-button type=\"default\" text=\"\u7EE7\u627F\u914D\u7F6E\" (onClick)=\"replaceTemplateFile(true)\"></dx-button>\n <dx-button type=\"danger\" text=\"\u6E05\u9664\u914D\u7F6E\" (onClick)=\"replaceTemplateFile(false)\"></dx-button>\n <dx-button type=\"normal\" text=\"\u53D6\u6D88\" (onClick)=\"replaceFileModal?.hide()\"></dx-button>\n </div>\n </div>\n</ng-template>\n<ng-template #previewTemplate>\n <div class=\"preview-viewer\">\n <div class=\"viewer-container\">\n <div class=\"viewer\">\n <ng-container *ngFor=\"let section of sections\">\n <rs-section [section]=\"section\"></rs-section>\n </ng-container>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #previewFooterTemplate>\n <div class=\"form-buttons\">\n <div class=\"buttons-wrapper\">\n <dx-button type=\"normal\" text=\"\u5173\u95ED\" (onClick)=\"previewModal?.hide()\"></dx-button>\n </div>\n </div>\n</ng-template>\n", styles: [":host{flex:1;display:flex;flex-flow:column nowrap}:host .coast-card{flex:1;padding:0}:host .coast-card .content-main{display:flex;flex-flow:row nowrap;padding:16px 0 0 16px;margin:0}:host .coast-card .content-main.show-upload-btn{padding:16px;background-color:var(--coast-empty-color, rgb(229, 229, 229));align-items:center;justify-content:center}:host .coast-card .content-main .left-panel{flex:auto;width:0;overflow-x:auto;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}:host .coast-card .content-main .left-panel .paste-mode-bar{flex:none;padding:8px;background-color:var(--coast-base-bg-color, rgb(255, 255, 255));border:1px solid var(--coast-border-color, rgb(221, 221, 221));display:flex;flex-flow:row nowrap;justify-content:space-between;align-items:center}:host .coast-card .content-main .left-panel .paste-mode-bar .message{font-weight:700}:host .coast-card .content-main .left-panel .content{flex:auto;height:0;overflow-y:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}:host .coast-card .content-main .left-panel .content .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}:host .coast-card .content-main .right-panel{flex:0 0 320px;display:flex;flex-flow:column nowrap;border-left:1px solid var(--coast-border-color, rgb(221, 221, 221))}:host .coast-card .content-main .right-panel .header{flex:none;border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221));padding:0 16px 16px}:host .coast-card .content-main .right-panel .header>dx-button:not(:last-child){margin-right:8px}:host .coast-card .content-main .right-panel .config{flex:auto;height:0;overflow:auto;padding:24px;display:flex;flex-flow:column nowrap}:host .coast-card .footer{flex:none;border-top:1px solid var(--coast-border-color, rgb(221, 221, 221));padding:12px 24px;display:flex;flex-flow:row nowrap;justify-content:space-between}:host .coast-card .footer dx-button{width:80px}:host .coast-card .footer dx-button:not(:last-child){margin-right:8px}.confirm-message{padding:24px;margin-bottom:12px;border-bottom:1px solid var(--coast-border-color, rgb(221, 221, 221))}.confirm-message span{font-size:14px}.preview-viewer{flex:auto;height:0;overflow-y:auto;margin:0 16px;background-color:var(--coast-empty-color, rgb(229, 229, 229));display:flex;flex-flow:column nowrap}.preview-viewer .viewer-container{flex:auto;height:0;overflow-x:auto;padding:8px 16px 0;display:flex;flex-flow:row nowrap}.preview-viewer .viewer-container .viewer{margin:auto;display:flex;flex-flow:column nowrap;align-items:center;z-index:0}\n"] }]
|
|
177
|
+
}], ctorParameters: function () { return [{ type: i1.SectionService }, { type: i2.WordDesignerService }, { type: i0.ViewContainerRef }, { type: i3.ModalService }]; }, propDecorators: { tenant: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], className: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], oid: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], instanceClassName: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], filterCategories: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], params: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], tabViewContainerRef: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], uploadInput: [{
|
|
192
|
+
type: ViewChild,
|
|
193
|
+
args: ['uploadInput', { static: true }]
|
|
194
|
+
}], replaceFileModalTemplate: [{
|
|
195
|
+
type: ViewChild,
|
|
196
|
+
args: ['replaceFileModalTemplate', { static: true }]
|
|
197
|
+
}], previewTemplate: [{
|
|
198
|
+
type: ViewChild,
|
|
199
|
+
args: ['previewTemplate', { static: true }]
|
|
200
|
+
}], previewFooterTemplate: [{
|
|
201
|
+
type: ViewChild,
|
|
202
|
+
args: ['previewFooterTemplate', { static: true }]
|
|
203
|
+
}], handleKeyDown: [{
|
|
204
|
+
type: HostListener,
|
|
205
|
+
args: ['window:keydown', ['$event']]
|
|
206
|
+
}] } });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1kZXNpZ25lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnMtYW50L3NyYy93b3JkL3dvcmQtZGVzaWduZXIvd29yZC1kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnMtYW50L3NyYy93b3JkL3dvcmQtZGVzaWduZXIvd29yZC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWUsU0FBUyxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUVuSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7OztBQVExRCxNQUFNLE9BQU8scUJBQXFCO0lBNkJoQyxhQUFhLENBQUMsTUFBcUI7UUFDakMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUssU0FBUztnQkFDWixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzdCO2dCQUNELE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO29CQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ2xCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7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QUM7Z0JBQ1EscUJBQXFCO3NCQUF4RSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFHbEQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL21vZGFsL21vZGFsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtXb3JkRGVzaWduZXJTZXJ2aWNlfSBmcm9tIFwiLi93b3JkLWRlc2lnbmVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TW9kYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbW9kYWwvbW9kYWwuc2VydmljZVwiO1xuaW1wb3J0IHtTZWN0aW9uU2VydmljZX0gZnJvbSBcIi4uL3NlY3Rpb24vc2VjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge2RlZXBDbG9uZSwgbm90aWZ5U3VjY2Vzc30gZnJvbSBcIi4uLy4uL3V0aWwvdXRpbHNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnMtd29yZC1kZXNpZ25lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JkLWRlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd29yZC1kZXNpZ25lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtXb3JkRGVzaWduZXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JkRGVzaWduZXJDb21wb25lbnQge1xuICBASW5wdXQoKVxuICB0ZW5hbnQ6IGFueTtcbiAgQElucHV0KClcbiAgY2xhc3NOYW1lOiBhbnk7XG4gIEBJbnB1dCgpXG4gIG9pZDogYW55O1xuICBASW5wdXQoKVxuICBpbnN0YW5jZUNsYXNzTmFtZTogYW55O1xuICBASW5wdXQoKVxuICBmaWx0ZXJDYXRlZ29yaWVzPzogc3RyaW5nW107XG4gIEBJbnB1dCgpXG4gIHBhcmFtcz86IGFueTtcbiAgQElucHV0KClcbiAgdGFiVmlld0NvbnRhaW5lclJlZiE6IGFueTtcbiAgcHJvdGVjdGVkIHNlY3Rpb25zOiBhbnk7XG4gIHByb3RlY3RlZCBuZWVkVXBsb2FkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwYXN0ZU1vZGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1vdXNlSW5WaWV3ZXIgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHJlcGxhY2VGaWxlTW9kYWw/OiBNb2RhbENvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJldGFpbk1hcmtDb25maWcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHByZXZpZXdNb2RhbD86IE1vZGFsQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd1cGxvYWRJbnB1dCcsIHtzdGF0aWM6IHRydWV9KSB1cGxvYWRJbnB1dCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3JlcGxhY2VGaWxlTW9kYWxUZW1wbGF0ZScsIHtzdGF0aWM6IHRydWV9KSByZXBsYWNlRmlsZU1vZGFsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdwcmV2aWV3VGVtcGxhdGUnLCB7c3RhdGljOiB0cnVlfSkgcHJldmlld1RlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncHJldmlld0Zvb3RlclRlbXBsYXRlJywge3N0YXRpYzogdHJ1ZX0pIHByZXZpZXdGb290ZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoYW5kbGVLZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHN3aXRjaCAoJGV2ZW50LmNvZGUpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAoJGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgIHRoaXMuc2VydmljZS5zd2l0Y2hNYXJrKC0xKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICgkZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLnN3aXRjaE1hcmsoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdLZXlDJzpcbiAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIGlmIChzZWxlY3Rpb24/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jb3B5TWFya0NvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnS2V5Vic6XG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMucGFzdGVNYXJrQ29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmV4aXRQYXN0ZU1vZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vdXNlSW5WaWV3ZXIgJiYgJGV2ZW50LmN0cmxLZXkgJiYgJGV2ZW50LmtleSA9PT0gJzAnKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2NhbGUoMCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZpY2U6IFNlY3Rpb25TZXJ2aWNlLCBwcml2YXRlIHdvcmREZXNpZ25lclNlcnZpY2U6IFdvcmREZXNpZ25lclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlcnZpY2UudGVuYW50ID0gdGhpcy50ZW5hbnQ7XG4gICAgdGhpcy5zZXJ2aWNlLnRlbXBsYXRlQ2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7XG4gICAgdGhpcy5zZXJ2aWNlLnRlbXBsYXRlT2lkID0gdGhpcy5vaWQ7XG4gICAgdGhpcy5zZXJ2aWNlLmluc3RhbmNlQ2xhc3NOYW1lID0gdGhpcy5pbnN0YW5jZUNsYXNzTmFtZTtcbiAgICB0aGlzLnNlcnZpY2UucGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdGhpcy5zZXJ2aWNlLnRhYlZpZXdDb250YWluZXJSZWYgPSB0aGlzLnRhYlZpZXdDb250YWluZXJSZWY7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLndvcmREZXNpZ25lclNlcnZpY2UubG9hZFRlbXBsYXRlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy5vaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLmxvYWRUZW1wbGF0ZUFuZENvbmZpZyhyZXNwb25zZSk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRUZW1wbGF0ZUFuZENvbmZpZyhyZXNwb25zZTogYW55KSB7XG4gICAgdGhpcy5zZWN0aW9ucyA9IHJlc3BvbnNlLnNlY3Rpb25zIHx8IFtdO1xuICAgIGlmICh0aGlzLnNlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWVkVXBsb2FkID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm5lZWRVcGxvYWQgPSBmYWxzZTtcbiAgICB0aGlzLnNlcnZpY2UubWFya3MgPSByZXNwb25zZS5tYXJrcy5tYXAoKG1hcms6IGFueSkgPT4ge1xuICAgICAgbWFyay5jb25maWcgPSBtYXJrLmNvbmZpZyB8fCB7fTtcbiAgICAgIHJldHVybiBtYXJrO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnNlcnZpY2UubWFya3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmFjdGl2ZU1hcmsgPSB0aGlzLnNlcnZpY2UubWFya3NbMF07XG4gICAgfVxuICB9XG5cbiAgc2NhbGVCeU1vdXNlKCRldmVudDogYW55KSB7XG4gICAgaWYgKCRldmVudC5jdHJsS2V5KSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2NhbGUoJGV2ZW50LmRlbHRhWSA8IDAgPyAwLjEgOiAtMC4xKTtcbiAgICB9XG4gIH1cblxuICBzY2FsZSh0eXBlOiBudW1iZXIpIHtcbiAgICBpZiAodHlwZSA9PT0gMCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLnNjYWxlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlLnNjYWxlICs9IHR5cGU7XG4gICAgfVxuICB9XG5cbiAgdXBsb2FkKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy53b3JkRGVzaWduZXJTZXJ2aWNlLnVwbG9hZFRlbXBsYXRlRmlsZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMub2lkLCB0aGlzLnJldGFpbk1hcmtDb25maWcsIHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5maWxlc1swXSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMudXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5sb2FkVGVtcGxhdGVBbmRDb25maWcocmVzcG9uc2UpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuUmVwbGFjZVRlbXBsYXRlRmlsZU1vZGFsKCkge1xuICAgIHRoaXMucmVwbGFjZUZpbGVNb2RhbCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy50YWJWaWV3Q29udGFpbmVyUmVmLCAn5pu/5o2i5paH5Lu2JywgJ2RlZmF1bHQnLCB0aGlzLnJlcGxhY2VGaWxlTW9kYWxUZW1wbGF0ZSwge30pO1xuICB9XG5cbiAgcmVwbGFjZVRlbXBsYXRlRmlsZShyZXRhaW5NYXJrQ29uZmlnOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXRhaW5NYXJrQ29uZmlnID0gcmV0YWluTWFya0NvbmZpZztcbiAgICB0aGlzLnVwbG9hZElucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB0aGlzLnJlcGxhY2VGaWxlTW9kYWw/LmhpZGUoKTtcbiAgfVxuXG4gIGRvd25sb2FkVGVtcGxhdGVGaWxlKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy53b3JkRGVzaWduZXJTZXJ2aWNlLmRvd25sb2FkVGVtcGxhdGVGaWxlKHRoaXMudGVuYW50LCB0aGlzLmNsYXNzTmFtZSwgdGhpcy5vaWQsICgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJldmlldygpIHtcbiAgICBmb3IgKGxldCBtYXJrIG9mIHRoaXMuc2VydmljZS5tYXJrcykge1xuICAgICAgbWFyay52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3TW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMudGFiVmlld0NvbnRhaW5lclJlZiwgJ+mihOiniCcsICdmdWxsJyxcbiAgICAgIHRoaXMucHJldmlld1RlbXBsYXRlLCB7fSwgdGhpcy5wcmV2aWV3Rm9vdGVyVGVtcGxhdGUpO1xuICB9XG5cbiAgc2F2ZUNvbmZpZygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5tYXJrcy5tYXAobWFyayA9PiB7XG4gICAgICBkZWxldGUgbWFyay52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLndvcmREZXNpZ25lclNlcnZpY2Uuc2F2ZSh0aGlzLnRlbmFudCwgdGhpcy5jbGFzc05hbWUsIHRoaXMub2lkLCB7XG4gICAgICB0ZW1wbGF0ZUNvbmZpZzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBzZWN0aW9uczogdGhpcy5zZWN0aW9ucyxcbiAgICAgICAgbWFya3M6IHRoaXMuc2VydmljZS5tYXJrc1xuICAgICAgfSlcbiAgICB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgbm90aWZ5U3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29weU1hcmtDb25maWcoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNvcGllZE1hcmsgPSBkZWVwQ2xvbmUodGhpcy5zZXJ2aWNlLmFjdGl2ZU1hcmspO1xuICAgIHRoaXMucGFzdGVNb2RlID0gdHJ1ZTtcbiAgfVxuXG4gIGV4aXRQYXN0ZU1vZGUoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNvcGllZE1hcmsgPSB7fTtcbiAgICB0aGlzLnNlcnZpY2UucmVhZHlQYXN0ZU1hcmtOYW1lcyA9IFtdO1xuICAgIHRoaXMuc2VydmljZS5sYXN0Q2xpY2tUb1Bhc3RlTWFya05hbWUgPSAnJztcbiAgICB0aGlzLnBhc3RlTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgcGFzdGVNYXJrQ29uZmlnKCkge1xuICAgIGxldCByZWFkeVBhc3RlTWFyaztcbiAgICBmb3IgKGxldCByZWFkeVBhc3RlTWFya05hbWUgb2YgdGhpcy5zZXJ2aWNlLnJlYWR5UGFzdGVNYXJrTmFtZXMpIHtcbiAgICAgIHJlYWR5UGFzdGVNYXJrID0gdGhpcy5zZXJ2aWNlLmdldE1hcmsocmVhZHlQYXN0ZU1hcmtOYW1lKTtcbiAgICAgIGNvbnN0IGRpc3BsYXkgPSByZWFkeVBhc3RlTWFyay5kaXNwbGF5O1xuICAgICAgT2JqZWN0LmFzc2lnbihyZWFkeVBhc3RlTWFyaywgZGVlcENsb25lKHRoaXMuc2VydmljZS5jb3BpZWRNYXJrKSk7XG4gICAgICByZWFkeVBhc3RlTWFyay5uYW1lID0gcmVhZHlQYXN0ZU1hcmtOYW1lO1xuICAgICAgcmVhZHlQYXN0ZU1hcmsuZGlzcGxheSA9IGRpc3BsYXk7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZS5hY3RpdmVNYXJrID0gcmVhZHlQYXN0ZU1hcmsgfHwgdGhpcy5zZXJ2aWNlLmFjdGl2ZU1hcms7XG4gICAgdGhpcy5leGl0UGFzdGVNb2RlKCk7XG4gIH1cbn1cblxuIiwiPGR4LWxvYWQtcGFuZWwgW2NvbnRhaW5lcl09XCJ2aWV3Q29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudFwiIFtzaG93UGFuZV09XCJmYWxzZVwiIFt2aXNpYmxlXT1cImxvYWRpbmdcIj5cbiAgPGR4by1wb3NpdGlvbiBbb2ZdPVwidmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnRcIj48L2R4by1wb3NpdGlvbj5cbjwvZHgtbG9hZC1wYW5lbD5cbjxpbnB1dCAjdXBsb2FkSW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiXG4gICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnRcIiAoY2hhbmdlKT1cInVwbG9hZCgpXCJcbiAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIvPlxuPGRpdiBjbGFzcz1cImNvYXN0LWNhcmRcIj5cbiAgPGRpdiBjbGFzcz1cImNvYXN0LWNhcmQtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LW1haW5cIiBbY2xhc3Muc2hvdy11cGxvYWQtYnRuXT1cIm5lZWRVcGxvYWRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuZWVkVXBsb2FkXCI+XG4gICAgICAgIDxkeC1idXR0b24gdHlwZT1cInN1Y2Nlc3NcIiB0ZXh0PVwi5LiK5Lyg5paH5Lu2XCIgKG9uQ2xpY2spPVwidXBsb2FkSW5wdXQuY2xpY2soKVwiPjwvZHgtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIW5lZWRVcGxvYWRcIiBjbGFzcz1cImxlZnQtcGFuZWxcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInBhc3RlTW9kZVwiIGNsYXNzPVwicGFzdGUtbW9kZS1iYXJcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJtZXNzYWdlXCI+5bey6L+b5YWl5om56YeP57KY6LS06YWN572u5qih5byP77yM5pSv5oyBQ3RybOOAgVNoaWZ06ZSu5b+r5o236YCJ5oup77yM5oyJQ3RybCtW57uE5ZCI6ZSu57KY6LS06YWN572u77yM5oyJRXNj6ZSu5Y+W5raI5pON5L2c5bm26YCA5Ye66K+l5qih5byPPC9zcGFuPlxuICAgICAgICAgIDxkeC1idXR0b24gW3dpZHRoXT1cIjQ4XCIgdGV4dD1cIumAgOWHulwiIChvbkNsaWNrKT1cImV4aXRQYXN0ZU1vZGUoKVwiPjwvZHgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlSW5WaWV3ZXIgPSB0cnVlO1wiXG4gICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VJblZpZXdlciA9IGZhbHNlO1wiXG4gICAgICAgICAgICAgKG1vdXNld2hlZWwpPVwic2NhbGVCeU1vdXNlKCRldmVudClcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW5lZWRVcGxvYWRcIiBjbGFzcz1cInZpZXdlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8cnMtc2VjdGlvbiBbc2VjdGlvbl09XCJzZWN0aW9uXCIgW2VkaXRNb2RlXT1cInRydWVcIiBbcGFzdGVNb2RlXT1cInBhc3RlTW9kZVwiPjwvcnMtc2VjdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFuZWVkVXBsb2FkXCIgY2xhc3M9XCJyaWdodC1wYW5lbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPGR4LWJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIHRleHQ9XCLmm7/mjaLmlofku7ZcIiAob25DbGljayk9XCJvcGVuUmVwbGFjZVRlbXBsYXRlRmlsZU1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj48L2R4LWJ1dHRvbj5cbiAgICAgICAgICA8ZHgtYnV0dG9uIGljb249XCJjb2FzdC1pY29uIGNvYXN0LWljb24tZG93bmxvYWRcIiBoaW50PVwi5LiL6L295paH5Lu2XCJcbiAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGVGaWxlKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPjwvZHgtYnV0dG9uPlxuICAgICAgICAgIDxkeC1idXR0b24gaWNvbj1cImNvYXN0LWljb24gY29hc3QtaWNvbi1kaXJlY3Rpb24tdXBcIiBoaW50PVwi5LiK5LiA5LiqKEFsdCArIOKGkSlcIlxuICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2VydmljZS5zd2l0Y2hNYXJrKC0xKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9keC1idXR0b24+XG4gICAgICAgICAgPGR4LWJ1dHRvbiBpY29uPVwiY29hc3QtaWNvbiBjb2FzdC1pY29uLWRpcmVjdGlvbi1kb3duXCIgaGludD1cIuS4i+S4gOS4qihBbHQgKyDihpMpXCJcbiAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNlcnZpY2Uuc3dpdGNoTWFyaygxKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9keC1idXR0b24+XG4gICAgICAgICAgPGR4LWJ1dHRvbiBbdHlwZV09XCJwYXN0ZU1vZGUgPyAnc3VjY2VzcycgOiAnZGVmYXVsdCdcIiB0ZXh0PVwi5aSN5Yi2XCIgaGludD1cIuWkjeWItihDdHJsICsgYylcIlxuICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29weU1hcmtDb25maWcoKVwiPjwvZHgtYnV0dG9uPlxuICAgICAgICAgIDxkeC1idXR0b24gdHlwZT1cImRhbmdlclwiIHRleHQ9XCLnspjotLRcIiBoaW50PVwi57KY6LS0KEN0cmwgKyB2KVwiIChvbkNsaWNrKT1cInBhc3RlTWFya0NvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8ICFwYXN0ZU1vZGVcIj48L2R4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWdcIiAqbmdJZj1cInNlcnZpY2UuYWN0aXZlTWFya1wiPlxuICAgICAgICAgIDxycy1tYXJrLWNvbmZpZyBbdGVuYW50XT1cInRlbmFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNsYXNzTmFtZV09XCJjbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVPaWRdPVwib2lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luc3RhbmNlQ2xhc3NOYW1lXT1cImluc3RhbmNlQ2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckNhdGVnb3JpZXNdPVwiZmlsdGVyQ2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXJrXT1cInNlcnZpY2UuYWN0aXZlTWFya1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXJrc109XCJzZXJ2aWNlLm1hcmtzXCI+PC9ycy1tYXJrLWNvbmZpZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhbmVlZFVwbG9hZFwiIGNsYXNzPVwiZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgIDxkeC1idXR0b24gdGV4dD1cIuaUvuWkp1wiIChvbkNsaWNrKT1cInNjYWxlKDAuMSlcIj48L2R4LWJ1dHRvbj5cbiAgICAgIDxkeC1idXR0b24gdGV4dD1cIui/mOWOn1wiIChvbkNsaWNrKT1cInNjYWxlKDApXCI+PC9keC1idXR0b24+XG4gICAgICA8ZHgtYnV0dG9uIHRleHQ9XCLnvKnlsI9cIiAob25DbGljayk9XCJzY2FsZSgtMC4xKVwiPjwvZHgtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGR4LWJ1dHRvbiB0eXBlPVwiZGVmYXVsdFwiIHRleHQ9XCLpooTop4hcIiAob25DbGljayk9XCJwcmV2aWV3KClcIiBbZGlzYWJsZWRdPVwibmVlZFVwbG9hZCB8fCBsb2FkaW5nXCI+PC9keC1idXR0b24+XG4gICAgICA8ZHgtYnV0dG9uIHR5cGU9XCJzdWNjZXNzXCIgdGV4dD1cIuS/neWtmFwiIChvbkNsaWNrKT1cInNhdmVDb25maWcoKVwiIFtkaXNhYmxlZF09XCJuZWVkVXBsb2FkIHx8IGxvYWRpbmdcIj48L2R4LWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjcmVwbGFjZUZpbGVNb2RhbFRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiY29uZmlybS1tZXNzYWdlXCI+XG4gICAgPHNwYW4+5pu/5o2i5paH5Lu25Y+v5Lul5oyJ54Wn5Lmm562+5qCH6K+G57un5om/5bey5L+d5a2Y55qE5Lmm562+6YWN572u77yM6K+36YCJ5oup5pON5L2c77yaPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tYnV0dG9uc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLXdyYXBwZXJcIj5cbiAgICAgIDxkeC1idXR0b24gdHlwZT1cImRlZmF1bHRcIiB0ZXh0PVwi57un5om/6YWN572uXCIgKG9uQ2xpY2spPVwicmVwbGFjZVRlbXBsYXRlRmlsZSh0cnVlKVwiPjwvZHgtYnV0dG9uPlxuICAgICAgPGR4LWJ1dHRvbiB0eXBlPVwiZGFuZ2VyXCIgdGV4dD1cIua4hemZpOmFjee9rlwiIChvbkNsaWNrKT1cInJlcGxhY2VUZW1wbGF0ZUZpbGUoZmFsc2UpXCI+PC9keC1idXR0b24+XG4gICAgICA8ZHgtYnV0dG9uIHR5cGU9XCJub3JtYWxcIiB0ZXh0PVwi5Y+W5raIXCIgKG9uQ2xpY2spPVwicmVwbGFjZUZpbGVNb2RhbD8uaGlkZSgpXCI+PC9keC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJldmlld1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicHJldmlldy12aWV3ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwidmlld2VyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZpZXdlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zXCI+XG4gICAgICAgICAgPHJzLXNlY3Rpb24gW3NlY3Rpb25dPVwic2VjdGlvblwiPjwvcnMtc2VjdGlvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2aWV3Rm9vdGVyVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy13cmFwcGVyXCI+XG4gICAgICA8ZHgtYnV0dG9uIHR5cGU9XCJub3JtYWxcIiB0ZXh0PVwi5YWz6ZetXCIgKG9uQ2xpY2spPVwicHJldmlld01vZGFsPy5oaWRlKClcIj48L2R4LWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { WordDesignerComponent } from './word-designer.component';
|
|
4
|
+
import { MarkConfigComponent } from "./mark-config/mark-config.component";
|
|
5
|
+
import { DevExtremeModule } from "devextreme-angular";
|
|
6
|
+
import { SectionModule } from "../section/section.module";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class WordDesignerModule {
|
|
9
|
+
}
|
|
10
|
+
WordDesignerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
WordDesignerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerModule, declarations: [WordDesignerComponent,
|
|
12
|
+
MarkConfigComponent], imports: [CommonModule,
|
|
13
|
+
DevExtremeModule,
|
|
14
|
+
SectionModule], exports: [WordDesignerComponent] });
|
|
15
|
+
WordDesignerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerModule, imports: [CommonModule,
|
|
16
|
+
DevExtremeModule,
|
|
17
|
+
SectionModule] });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
declarations: [
|
|
22
|
+
WordDesignerComponent,
|
|
23
|
+
MarkConfigComponent
|
|
24
|
+
],
|
|
25
|
+
imports: [
|
|
26
|
+
CommonModule,
|
|
27
|
+
DevExtremeModule,
|
|
28
|
+
SectionModule
|
|
29
|
+
],
|
|
30
|
+
exports: [
|
|
31
|
+
WordDesignerComponent
|
|
32
|
+
]
|
|
33
|
+
}]
|
|
34
|
+
}] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1kZXNpZ25lci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnMtYW50L3NyYy93b3JkL3dvcmQtZGVzaWduZXIvd29yZC1kZXNpZ25lci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFDOztBQWdCeEQsTUFBTSxPQUFPLGtCQUFrQjs7Z0hBQWxCLGtCQUFrQjtpSEFBbEIsa0JBQWtCLGlCQVozQixxQkFBcUI7UUFDckIsbUJBQW1CLGFBR25CLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsYUFBYSxhQUdiLHFCQUFxQjtpSEFHWixrQkFBa0IsWUFSM0IsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixhQUFhOzRGQU1KLGtCQUFrQjtrQkFkOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1oscUJBQXFCO3dCQUNyQixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3FCQUN0QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1dvcmREZXNpZ25lckNvbXBvbmVudH0gZnJvbSAnLi93b3JkLWRlc2lnbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge01hcmtDb25maWdDb21wb25lbnR9IGZyb20gXCIuL21hcmstY29uZmlnL21hcmstY29uZmlnLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtEZXZFeHRyZW1lTW9kdWxlfSBmcm9tIFwiZGV2ZXh0cmVtZS1hbmd1bGFyXCI7XG5pbXBvcnQge1NlY3Rpb25Nb2R1bGV9IGZyb20gXCIuLi9zZWN0aW9uL3NlY3Rpb24ubW9kdWxlXCI7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFdvcmREZXNpZ25lckNvbXBvbmVudCxcbiAgICBNYXJrQ29uZmlnQ29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRGV2RXh0cmVtZU1vZHVsZSxcbiAgICBTZWN0aW9uTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBXb3JkRGVzaWduZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBXb3JkRGVzaWduZXJNb2R1bGUge1xufVxuIl19
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { map } from "rxjs";
|
|
3
|
+
import { downloadFile, filenameFromDisposition } from "../../util/utils";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common/http";
|
|
6
|
+
export class WordDesignerService {
|
|
7
|
+
constructor(http) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
}
|
|
10
|
+
loadTemplate(tenant, className, oid) {
|
|
11
|
+
return this.http.get('api/data/' + className + '/' + oid, {
|
|
12
|
+
params: {
|
|
13
|
+
tenant
|
|
14
|
+
}
|
|
15
|
+
}).pipe(map(response => {
|
|
16
|
+
if (response.data?.templateConfig) {
|
|
17
|
+
return JSON.parse(response.data.templateConfig);
|
|
18
|
+
}
|
|
19
|
+
return {};
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
uploadTemplateFile(tenant, className, oid, retainMarkConfig, file) {
|
|
23
|
+
const formData = new FormData();
|
|
24
|
+
formData.append('file', file);
|
|
25
|
+
return this.http.post('api/data/custom/upload', formData, {
|
|
26
|
+
params: {
|
|
27
|
+
executor: 'com.cs.system.word.designer.UploadTemplateFile',
|
|
28
|
+
tenant,
|
|
29
|
+
className,
|
|
30
|
+
oid,
|
|
31
|
+
retainMarkConfig,
|
|
32
|
+
filename: file.name
|
|
33
|
+
}
|
|
34
|
+
}).pipe(map(response => {
|
|
35
|
+
return response.data || {};
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
downloadTemplateFile(tenant, className, oid, callback) {
|
|
39
|
+
return this.http.get('api/data/custom/download', {
|
|
40
|
+
params: {
|
|
41
|
+
executor: 'com.cs.system.word.designer.DownloadTemplate',
|
|
42
|
+
tenant,
|
|
43
|
+
className,
|
|
44
|
+
oid
|
|
45
|
+
},
|
|
46
|
+
observe: 'response',
|
|
47
|
+
responseType: 'blob'
|
|
48
|
+
}).subscribe(response => {
|
|
49
|
+
const disposition = response.headers.get('Content-Disposition');
|
|
50
|
+
const filename = disposition && filenameFromDisposition(disposition);
|
|
51
|
+
if (response.body) {
|
|
52
|
+
downloadFile(response.body, filename || '未命名文件', callback);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
save(tenant, className, oid, model) {
|
|
57
|
+
return this.http.post('api/data/' + className + '/' + oid, model, {
|
|
58
|
+
params: {
|
|
59
|
+
tenant
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
WordDesignerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
65
|
+
WordDesignerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerService });
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WordDesignerService, decorators: [{
|
|
67
|
+
type: Injectable
|
|
68
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1kZXNpZ25lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJzLWFudC9zcmMvd29yZC93b3JkLWRlc2lnbmVyL3dvcmQtZGVzaWduZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFHdkUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3BDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVyxFQUFFLFNBQWMsRUFBRSxHQUFRO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFO1lBQzdELE1BQU0sRUFBRTtnQkFDTixNQUFNO2FBQ1A7U0FDRixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQVcsRUFBRSxTQUFjLEVBQUUsR0FBUSxFQUFFLGdCQUFxQixFQUFFLElBQVM7UUFDeEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLHdCQUF3QixFQUFFLFFBQVEsRUFBRTtZQUM3RCxNQUFNLEVBQUU7Z0JBQ04sUUFBUSxFQUFFLGdEQUFnRDtnQkFDMUQsTUFBTTtnQkFDTixTQUFTO2dCQUNULEdBQUc7Z0JBQ0gsZ0JBQWdCO2dCQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDcEI7U0FDRixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLE9BQU8sUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFXLEVBQUUsU0FBYyxFQUFFLEdBQVEsRUFBRSxRQUFjO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUU7WUFDL0MsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSw4Q0FBOEM7Z0JBQ3hELE1BQU07Z0JBQ04sU0FBUztnQkFDVCxHQUFHO2FBQ0o7WUFDRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxJQUFJLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JFLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDakIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFXLEVBQUUsU0FBYyxFQUFFLEdBQVEsRUFBRSxLQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUNyRSxNQUFNLEVBQUU7Z0JBQ04sTUFBTTthQUNQO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7aUhBL0RVLG1CQUFtQjtxSEFBbkIsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7bWFwLCBPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtkb3dubG9hZEZpbGUsIGZpbGVuYW1lRnJvbURpc3Bvc2l0aW9ufSBmcm9tIFwiLi4vLi4vdXRpbC91dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV29yZERlc2lnbmVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xuICB9XG5cbiAgbG9hZFRlbXBsYXRlKHRlbmFudDogYW55LCBjbGFzc05hbWU6IGFueSwgb2lkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2FwaS9kYXRhLycgKyBjbGFzc05hbWUgKyAnLycgKyBvaWQsIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0ZW5hbnRcbiAgICAgIH1cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LnRlbXBsYXRlQ29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuZGF0YS50ZW1wbGF0ZUNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBsb2FkVGVtcGxhdGVGaWxlKHRlbmFudDogYW55LCBjbGFzc05hbWU6IGFueSwgb2lkOiBhbnksIHJldGFpbk1hcmtDb25maWc6IGFueSwgZmlsZTogYW55KSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PignYXBpL2RhdGEvY3VzdG9tL3VwbG9hZCcsIGZvcm1EYXRhLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZXhlY3V0b3I6ICdjb20uY3Muc3lzdGVtLndvcmQuZGVzaWduZXIuVXBsb2FkVGVtcGxhdGVGaWxlJyxcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIG9pZCxcbiAgICAgICAgcmV0YWluTWFya0NvbmZpZyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZVxuICAgICAgfVxuICAgIH0pLnBpcGUoXG4gICAgICBtYXAocmVzcG9uc2UgPT4ge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSB8fCB7fTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRvd25sb2FkVGVtcGxhdGVGaWxlKHRlbmFudDogYW55LCBjbGFzc05hbWU6IGFueSwgb2lkOiBhbnksIGNhbGxiYWNrPzogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoJ2FwaS9kYXRhL2N1c3RvbS9kb3dubG9hZCcsIHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBleGVjdXRvcjogJ2NvbS5jcy5zeXN0ZW0ud29yZC5kZXNpZ25lci5Eb3dubG9hZFRlbXBsYXRlJyxcbiAgICAgICAgdGVuYW50LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIG9pZFxuICAgICAgfSxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICBjb25zdCBkaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGRpc3Bvc2l0aW9uICYmIGZpbGVuYW1lRnJvbURpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKTtcbiAgICAgIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgICAgIGRvd25sb2FkRmlsZShyZXNwb25zZS5ib2R5LCBmaWxlbmFtZSB8fCAn5pyq5ZG95ZCN5paH5Lu2JywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2F2ZSh0ZW5hbnQ6IGFueSwgY2xhc3NOYW1lOiBhbnksIG9pZDogYW55LCBtb2RlbDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oJ2FwaS9kYXRhLycgKyBjbGFzc05hbWUgKyAnLycgKyBvaWQsIG1vZGVsLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdGVuYW50XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|