cloud-web-corejs 1.1.0-dev.6 → 1.1.0-dev.61
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/README.md +38 -0
- package/bin/core-resources.js +16 -0
- package/bin/create-child-app.js +34 -0
- package/docs/child-app/README.md +95 -0
- package/docs/child-app/activiti-resources.md +63 -0
- package/docs/child-app/generate-prompt.md +55 -0
- package/docs/child-app/luckysheet-resources.md +80 -0
- package/docs/child-app/public-resources-plan.md +288 -0
- package/docs/child-app/resources-implementation.md +101 -0
- package/docs/child-app/tinymce-resources.md +88 -0
- package/docs/child-app/validation.md +34 -0
- package/docs/qiankun/346/216/245/345/205/245/345/215/217/350/256/256.md +298 -0
- package/docs/qiankun/350/257/246/346/203/205/346/211/277/350/275/275/345/255/220/345/272/224/347/224/250/345/257/271/346/216/245/346/270/205/345/215/225.md +111 -0
- package/package.json +29 -4
- package/resource-tools/index.js +126 -0
- package/src/app-bootstrap.js +531 -0
- package/src/app-bootstrap.sync.js +502 -0
- package/src/boot-assets.legacy.js +13 -0
- package/src/boot-assets.next.js +7 -0
- package/src/components/Qrcode/fileParse.vue +11 -0
- package/src/components/Tinymce/dynamicLoadScript.js +51 -59
- package/src/components/Tinymce/index.vue +382 -336
- package/src/components/Tinymce/mce-chrome.scss +150 -0
- package/src/components/VabUpload/image-viewer.vue +18 -10
- package/src/components/VabUpload/index.js +11 -4
- package/src/components/VabUpload/index.vue +1 -1
- package/src/components/VabUpload/mixins/fileLibraryDialog.js +2 -0
- package/src/components/VabUpload/mixins.js +72 -40
- package/src/components/VabUpload/partUploadConfig.js +95 -0
- package/src/components/VabUpload/privateProfileDialogMixins.js +2 -0
- package/src/components/VabUpload/style.scss +282 -0
- package/src/components/VabUpload/view.vue +19 -18
- package/src/components/baseArea/index.vue +2 -2
- package/src/components/baseInputExport/mixins.js +1 -6
- package/src/components/bizTab/BizTabListPage.vue +66 -33
- package/src/components/bizTab/README.md +3 -1
- package/src/components/bizTab/bizBillDetailMixin.js +2 -0
- package/src/components/code-editor/ace-chrome.scss +17 -0
- package/src/components/code-editor/index.vue +361 -340
- package/src/components/errorMsg/index.vue +142 -13
- package/src/components/errorMsg/mixins.js +53 -0
- package/src/components/excelExport/conditionExportConfig.js +112 -0
- package/src/components/excelExport/exportColumnMemory.js +118 -0
- package/src/components/excelExport/exportFieldDialog.vue +50 -38
- package/src/components/excelExport/exportType.js +8 -0
- package/src/components/excelExport/index.js +30 -13
- package/src/components/excelExport/index.vue +7 -1
- package/src/components/excelExport/mixins.js +782 -293
- package/src/components/excelImport/index.vue +156 -156
- package/src/components/excelImport/mixins.js +888 -834
- package/src/components/fileLibrary/mixins/indexMixins.js +2 -0
- package/src/components/fileLibrary/style.scss +579 -0
- package/src/components/formDialog/index.vue +11 -8
- package/src/components/hiprint/style.scss +188 -0
- package/src/components/hiprint/view/json-view.vue +4 -4
- package/src/components/jdPrint/mixins.js +2 -0
- package/src/components/jsonImport/index.vue +1 -1
- package/src/components/jsonImport/mixins.js +6 -10
- package/src/components/langImport/index.vue +1 -1
- package/src/components/langImport/mixins.js +6 -10
- package/src/components/luckysheet/loadResources.js +64 -0
- package/src/components/luckysheet/view.vue +239 -210
- package/src/components/mobile/buttonGroup/index.vue +1 -1
- package/src/components/mobile/wf/addTaskUserdialog.vue +100 -80
- package/src/components/mobile/wf/content.vue +1734 -1662
- package/src/components/mobile/wf/deleteTaskUserDialog.vue +73 -54
- package/src/components/mobile/wf/selectUserDialog.vue +118 -0
- package/src/components/mobile/wf/setCandidateDialog.vue +69 -48
- package/src/components/mobile/wf/urgingDialog.vue +75 -52
- package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
- package/src/components/obsUpload/index.js +4 -1
- package/src/components/obsUpload/index.vue +1 -1
- package/src/components/obsUpload/mixins.js +45 -15
- package/src/components/onlineTalk/index.vue +4 -4
- package/src/components/onlineTalk/mixins.js +21 -7
- package/src/components/table/index.js +96 -81
- package/src/components/table/plugins/cell-area/index.js +10 -3
- package/src/components/table/style.scss +1399 -0
- package/src/components/table/vxeFilter/mixin.js +28 -18
- package/src/components/wf/content.vue +3 -2
- package/src/components/wf/content2.vue +1 -1
- package/src/components/wf/style.scss +265 -0
- package/src/components/wf/wf.js +7 -0
- package/src/components/wf/wfActionItems.js +3 -0
- package/src/components/wf/wfStartDialog.vue +1 -0
- package/src/components/wf/wfTransferEnabled.js +54 -0
- package/src/components/wf/wfUtil.js +47 -29
- package/src/components/wf/wfVisibility.js +6 -0
- package/src/components/xform/docs/2026-07 table/344/270/216excelExport/344/277/256/345/244/215/345/217/212/345/257/274/345/207/272/344/274/230/345/214/226.md" +64 -57
- package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +1 -1
- package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +1 -1
- package/src/components/xform/docs/2026-09 /345/212/250/346/200/201/345/255/227/346/256/265/350/247/204/345/210/231/344/270/216/346/265/201/347/250/213/346/216/247/345/210/266/346/211/247/350/241/214/351/241/272/345/272/217/350/220/275/345/234/260/346/226/271/346/241/210.md" +409 -0
- package/src/components/xform/docs/2026-09 /346/235/241/344/273/266/345/257/274/345/207/272/345/244/247/346/225/260/346/215/256/351/207/217/345/264/251/346/272/203/346/216/222/346/237/245.md" +389 -0
- package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/344/273/243/347/240/201/350/257/204/345/256/241.md" +255 -0
- package/src/components/xform/docs/2026-09 /346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206P0/346/265/213/350/257/225/351/252/214/350/257/201/345/256/236/346/226/275/346/226/207/346/241/243.md" +595 -0
- package/src/components/xform/docs/2026-09 /347/274/226/350/276/221/350/241/250/350/241/214/345/206/205/344/277/235/345/255/230/346/240/241/351/252/214/350/214/203/345/233/264/344/270/216/345/210/227/345/277/205/345/241/253/350/247/243/346/236/220/344/277/256/345/244/215.md" +233 -0
- package/src/components/xform/docs/2026-09 /350/241/250/345/215/225/345/257/274/345/205/245/351/200/232/351/201/223/346/242/263/347/220/206/344/270/216/350/220/275/345/234/260/346/226/271/346/241/210.md" +745 -0
- package/src/components/xform/docs//346/265/217/350/247/210/345/231/250/345/264/251/346/272/203/346/262/273/347/220/206/344/270/216/344/277/256/345/244/215/350/220/275/345/234/260/346/226/271/346/241/210.md +324 -0
- package/src/components/xform/form-designer/designer.js +2133 -2100
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-mixin.js +7 -0
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +4 -2
- package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +243 -227
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +228 -207
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +165 -136
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +30 -4
- package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +190 -185
- package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +2657 -1774
- package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +27 -4
- package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/a-text-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/area-select-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/autocomplete-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/cascader-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/census-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/checkbox-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/color-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/descriptions-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/divider-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/download-button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/dropdown-item-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/dropdown-widget.vue +35 -4
- package/src/components/xform/form-designer/form-widget/field-widget/echart-bar-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/echart-category-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/echart-pie-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +64 -10
- package/src/components/xform/form-designer/form-widget/field-widget/file-upload-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +14 -4
- package/src/components/xform/form-designer/form-widget/field-widget/html-text-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue +19 -6
- package/src/components/xform/form-designer/form-widget/field-widget/import2-button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/index.js +10 -1
- package/src/components/xform/form-designer/form-widget/field-widget/input-batch-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/input-widget.vue +29 -3
- package/src/components/xform/form-designer/form-widget/field-widget/multiSearch-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/news-list-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/oplog-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/picture-upload-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/print-button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/print-detail-button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/project-tag-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/radio-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/rate-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/rich-editor-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/row-col-select-widget.vue +64 -0
- package/src/components/xform/form-designer/form-widget/field-widget/save_submit_wf_button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/search_button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/select-export-button-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -2
- package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/singerSearch-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +145 -145
- package/src/components/xform/form-designer/form-widget/field-widget/slider-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/static-text-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/status-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/switch-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +3 -2
- package/src/components/xform/form-designer/form-widget/field-widget/tempStorage-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/text-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/textarea-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/title-head-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/vabSearch-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -3
- package/src/components/xform/form-designer/form-widget/field-widget/vabUpload2-widget.vue +25 -1
- package/src/components/xform/form-designer/form-widget/field-widget/vue-page-widget.vue +1 -1
- package/src/components/xform/form-designer/indexMixin.js +27 -0
- package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +687 -602
- package/src/components/xform/form-designer/setting-panel/form-setting.vue +269 -36
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +335 -12
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +23 -7
- package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +13 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +846 -860
- package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-lazyRender-editor.vue +27 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabChange-editor.vue +28 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/event-handler/onTabClick-editor.vue +28 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +62 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +142 -2
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/empty-number-input.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +27 -2
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +33 -3
- package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +2 -4
- package/src/components/xform/form-designer/setting-panel/property-editor/suffixIconClickable-editor.vue +23 -0
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +18 -4
- package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
- package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +13 -0
- package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
- package/src/components/xform/form-designer/widget-panel/indexMixin.js +15 -2
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +152 -9
- package/src/components/xform/form-render/container-item/containerItemMixin.js +93 -8
- package/src/components/xform/form-render/container-item/data-table-item.vue +352 -347
- package/src/components/xform/form-render/container-item/data-table-mixin.js +7261 -5985
- package/src/components/xform/form-render/container-item/detail-h5-item.vue +48 -19
- package/src/components/xform/form-render/container-item/detail-item.vue +350 -446
- package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +55 -1
- package/src/components/xform/form-render/container-item/list-h5-item.vue +261 -178
- package/src/components/xform/form-render/container-item/panel-item.vue +1 -1
- package/src/components/xform/form-render/container-item/tab-item.vue +177 -129
- package/src/components/xform/form-render/fieldControlEngine.js +218 -0
- package/src/components/xform/form-render/fieldControlMixin.js +536 -0
- package/src/components/xform/form-render/index.vue +164 -153
- package/src/components/xform/form-render/indexMixin.js +5443 -5311
- package/src/components/xform/form-render/pageDialogScope.js +54 -0
- package/src/components/xform/icon-picker/index.vue +1 -1
- package/src/components/xform/lang/en-US.js +8 -0
- package/src/components/xform/lang/zh-CN.js +9 -0
- package/src/components/xform/mixins/businessLock.js +59 -0
- package/src/components/xform/mixins/defaultHandle.js +713 -707
- package/src/components/xform/mixins/scriptHttp.js +42 -21
- package/src/components/xform/mixins/wfStart.js +105 -0
- package/src/components/xform/mixins/wfVisibility.js +33 -0
- package/src/components/xform/styles/census.scss +288 -0
- package/src/components/xform/styles/containers.scss +215 -0
- package/src/components/xform/styles/designer.scss +904 -0
- package/src/components/xform/styles/detail-temp.scss +71 -0
- package/src/components/xform/styles/h5-designer.scss +191 -0
- package/src/components/xform/styles/h5-runtime.scss +520 -0
- package/src/components/xform/styles/h5.scss +836 -516
- package/src/components/xform/styles/skins.scss +398 -0
- package/src/components/xform/styles/table-layout.scss +91 -0
- package/src/components/xform/styles/titles.scss +255 -0
- package/src/components/xform/utils/dynamicSchemaUtil.js +385 -361
- package/src/components/xform/utils/fixedQueryUtil.js +29 -4
- package/src/components/xform/utils/serviceNameCache.js +69 -0
- package/src/components/xform/utils/tableColumnHelper.js +46 -4
- package/src/components/xform/utils/util.js +1776 -1708
- package/src/core-resources/css/h5.scss +548 -0
- package/src/core-resources/css/iconfont.css +1447 -0
- package/src/core-resources/font/iconfont.ttf +0 -0
- package/src/core-resources/font/iconfont.woff +0 -0
- package/src/core-resources/font/iconfont.woff2 +0 -0
- package/src/core-resources/images/default-header.png +0 -0
- package/src/core-resources/images/ico-default_wenjian.svg +1 -0
- package/src/core-resources/images/ico-excel.svg +1 -0
- package/src/core-resources/images/ico-ftl.svg +7 -0
- package/src/core-resources/images/ico-html.svg +1 -0
- package/src/core-resources/images/ico-java.svg +1 -0
- package/src/core-resources/images/ico-music.svg +1 -0
- package/src/core-resources/images/ico-pdf.svg +1 -0
- package/src/core-resources/images/ico-photo.svg +1 -0
- package/src/core-resources/images/ico-ppt.svg +1 -0
- package/src/core-resources/images/ico-psd.svg +1 -0
- package/src/core-resources/images/ico-service.png +0 -0
- package/src/core-resources/images/ico-txt.svg +1 -0
- package/src/core-resources/images/ico-video.svg +1 -0
- package/src/core-resources/images/ico-vue.svg +8 -0
- package/src/core-resources/images/ico-wenjianjia.svg +1 -0
- package/src/core-resources/images/ico-wrod.svg +1 -0
- package/src/core-resources/images/ico-xml.svg +1 -0
- package/src/core-resources/images/ico-yasuobao.svg +1 -0
- package/src/core-resources/images/icon-error.png +0 -0
- package/src/core-resources/images/icon-tips.png +0 -0
- package/src/core-resources/images/nodata.png +0 -0
- package/src/core-resources/images/nodata2.png +0 -0
- package/src/directive/append-to-body/index.js +48 -0
- package/src/directive/el-dialog-center/index.js +3 -2
- package/src/directive/el-drag-dialog/drag.js +33 -4
- package/src/icons/index.js +9 -0
- package/src/icons/svg/404.svg +1 -0
- package/src/icons/svg/alert.svg +1 -0
- package/src/icons/svg/bug.svg +1 -0
- package/src/icons/svg/button.svg +1 -0
- package/src/icons/svg/card.svg +1 -0
- package/src/icons/svg/cascader-field.svg +1 -0
- package/src/icons/svg/census.svg +1 -0
- package/src/icons/svg/chart.svg +1 -0
- package/src/icons/svg/checkbox-field.svg +1 -0
- package/src/icons/svg/clipboard.svg +1 -0
- package/src/icons/svg/color-field.svg +1 -0
- package/src/icons/svg/component.svg +1 -0
- package/src/icons/svg/custom-component.svg +1 -0
- package/src/icons/svg/dashboard.svg +1 -0
- package/src/icons/svg/data-table.svg +1 -0
- package/src/icons/svg/date-field.svg +1 -0
- package/src/icons/svg/date-range-field.svg +1 -0
- package/src/icons/svg/descriptions.svg +1 -0
- package/src/icons/svg/divider.svg +1 -0
- package/src/icons/svg/document.svg +1 -0
- package/src/icons/svg/documentation.svg +1 -0
- package/src/icons/svg/drag.svg +1 -0
- package/src/icons/svg/echart-category.svg +1 -0
- package/src/icons/svg/echart-pie.svg +1 -0
- package/src/icons/svg/echart.svg +1 -0
- package/src/icons/svg/edit.svg +1 -0
- package/src/icons/svg/education.svg +1 -0
- package/src/icons/svg/email.svg +1 -0
- package/src/icons/svg/example.svg +1 -0
- package/src/icons/svg/excel.svg +1 -0
- package/src/icons/svg/exit-fullscreen.svg +1 -0
- package/src/icons/svg/eye-open.svg +1 -0
- package/src/icons/svg/eye.svg +1 -0
- package/src/icons/svg/file-upload-field.svg +1 -0
- package/src/icons/svg/form.svg +1 -0
- package/src/icons/svg/fullscreen.svg +1 -0
- package/src/icons/svg/github.svg +1 -0
- package/src/icons/svg/grid.svg +1 -0
- package/src/icons/svg/guide.svg +1 -0
- package/src/icons/svg/html-text.svg +1 -0
- package/src/icons/svg/ico-more.svg +1 -0
- package/src/icons/svg/ico-wenjianjia.svg +1 -0
- package/src/icons/svg/icon.svg +1 -0
- package/src/icons/svg/input-batch.svg +1 -0
- package/src/icons/svg/international.svg +1 -0
- package/src/icons/svg/language.svg +1 -0
- package/src/icons/svg/link.svg +1 -0
- package/src/icons/svg/list-export.svg +1 -0
- package/src/icons/svg/list.svg +1 -0
- package/src/icons/svg/lock.svg +1 -0
- package/src/icons/svg/message.svg +1 -0
- package/src/icons/svg/money.svg +1 -0
- package/src/icons/svg/nested.svg +1 -0
- package/src/icons/svg/news-list.svg +1 -0
- package/src/icons/svg/node-tree.svg +1 -0
- package/src/icons/svg/number-field.svg +1 -0
- package/src/icons/svg/password.svg +1 -0
- package/src/icons/svg/pdf.svg +1 -0
- package/src/icons/svg/people.svg +1 -0
- package/src/icons/svg/peoples.svg +1 -0
- package/src/icons/svg/picture-upload-field.svg +1 -0
- package/src/icons/svg/qq.svg +1 -0
- package/src/icons/svg/query.svg +1 -0
- package/src/icons/svg/radio-field.svg +1 -0
- package/src/icons/svg/rate-field.svg +1 -0
- package/src/icons/svg/redo.svg +1 -0
- package/src/icons/svg/rich-editor-field.svg +1 -0
- package/src/icons/svg/search.svg +1 -0
- package/src/icons/svg/searchbox.svg +1 -0
- package/src/icons/svg/section.svg +1 -0
- package/src/icons/svg/select-field.svg +1 -0
- package/src/icons/svg/shopping.svg +1 -0
- package/src/icons/svg/size.svg +1 -0
- package/src/icons/svg/skill.svg +1 -0
- package/src/icons/svg/slider-field.svg +1 -0
- package/src/icons/svg/slot-component.svg +1 -0
- package/src/icons/svg/slot-field.svg +1 -0
- package/src/icons/svg/star.svg +1 -0
- package/src/icons/svg/static-text.svg +1 -0
- package/src/icons/svg/status.svg +1 -0
- package/src/icons/svg/sub-form.svg +1 -0
- package/src/icons/svg/switch-field.svg +1 -0
- package/src/icons/svg/tab.svg +1 -0
- package/src/icons/svg/table.svg +1 -0
- package/src/icons/svg/text-field.svg +1 -0
- package/src/icons/svg/text.svg +1 -0
- package/src/icons/svg/textarea-field.svg +1 -0
- package/src/icons/svg/theme.svg +1 -0
- package/src/icons/svg/time-field.svg +1 -0
- package/src/icons/svg/time-range-field.svg +1 -0
- package/src/icons/svg/tips-text.svg +1 -0
- package/src/icons/svg/title-head.svg +1 -0
- package/src/icons/svg/tree-pane.svg +1 -0
- package/src/icons/svg/tree-table.svg +1 -0
- package/src/icons/svg/tree.svg +1 -0
- package/src/icons/svg/undo.svg +1 -0
- package/src/icons/svg/uploadbox.svg +1 -0
- package/src/icons/svg/user.svg +1 -0
- package/src/icons/svg/vf-box.svg +1 -0
- package/src/icons/svg/vf-dialog.svg +1 -0
- package/src/icons/svg/vf-drawer.svg +1 -0
- package/src/icons/svg/vue-sfc.svg +1 -0
- package/src/icons/svg/wechat.svg +1 -0
- package/src/icons/svg/zip.svg +1 -0
- package/src/index.js +2 -510
- package/src/index.next.js +5 -0
- package/src/index.sync.js +5 -0
- package/src/layout/components/Sidebar/default.vue +1656 -1655
- package/src/layout/components/TagsView/index.vue +330 -323
- package/src/layout/components/TagsView/style.scss +92 -0
- package/src/layout/components/watermark/index.vue +1 -1
- package/src/layout/defaultLayout.vue +2 -2
- package/src/router/index.js +43 -48
- package/src/router/modules/customer.js +12 -0
- package/src/store/modules/settings.js +1 -1
- package/src/store/modules/tagsView.js +241 -217
- package/src/store/modules/user.js +16 -12
- package/src/styles/btn.scss +315 -0
- package/src/styles/dialog.scss +1710 -0
- package/src/styles/element-ui.scss +1076 -0
- package/src/styles/element-variables.scss +31 -0
- package/src/styles/global.scss +115 -0
- package/src/styles/index.scss +245 -0
- package/src/styles/layout-skins.scss +840 -0
- package/src/styles/legacy-base.scss +19 -0
- package/src/styles/menu-icons.scss +75 -0
- package/src/styles/mixin.scss +80 -0
- package/src/styles/nprogress.scss +14 -0
- package/src/styles/page-shell.scss +723 -0
- package/src/styles/sidebar.scss +296 -0
- package/src/styles/split-handle.scss +52 -0
- package/src/styles/theme-variables.scss +7 -0
- package/src/styles/transition.scss +48 -0
- package/src/styles/utilities.scss +253 -0
- package/src/styles/variables.scss +72 -0
- package/src/utils/baseDictsCache.js +197 -0
- package/src/utils/chunkLoadError.js +24 -0
- package/src/utils/featureResources.js +57 -0
- package/src/utils/importLimit.js +72 -0
- package/src/utils/pdfUtil.js +6 -1
- package/src/utils/request.js +149 -9
- package/src/utils/resolveViewComponent.js +45 -90
- package/src/utils/runtimeRecovery.js +105 -0
- package/src/utils/swiperLoader.js +20 -0
- package/src/utils/vab.js +1334 -1283
- package/src/utils/xlsxLoader.js +29 -0
- package/src/views/bd/setting/formVersion/compareContMixin.scss +1 -1
- package/src/views/bd/setting/form_template/edit.vue +378 -356
- package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
- package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
- package/src/views/bd/setting/form_template/list.vue +304 -303
- package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
- package/src/views/bd/setting/form_template/mixins/list.js +749 -721
- package/src/views/bd/setting/form_template/mixins/list2.js +412 -411
- package/src/views/bd/setting/form_template/mixins/wf_list.js +431 -430
- package/src/views/mobile/user/area/dialog.vue +1 -1
- package/src/views/mobile/user/user/dialog.vue +1 -1
- package/src/views/user/bill_setting/mixins/wf.js +8 -0
- package/src/views/user/bill_setting/render.vue +1 -1
- package/src/views/user/commMenu/index.vue +3 -1
- package/src/views/user/commMenu/style.scss +123 -0
- package/src/views/user/common_attribute/edit.vue +2 -0
- package/src/views/user/common_attribute/itemEdit.vue +2 -0
- package/src/views/user/file_view_ins/list.vue +970 -970
- package/src/views/user/form/form_template/list.vue +527 -506
- package/src/views/user/form/vform/designer.vue +823 -821
- package/src/views/user/form/view/list.vue +24 -1
- package/src/views/user/home/default.vue +1124 -1117
- package/src/views/user/home/default2.vue +12 -8
- package/src/views/user/home/index.vue +102 -102
- package/src/views/user/home/wjl/content.vue +1581 -1569
- package/src/views/user/intf_permission/edit.vue +230 -0
- package/src/views/user/intf_permission/list.vue +196 -0
- package/src/views/user/menuFallback/index.vue +23 -0
- package/src/views/user/notify_message/dialog.vue +139 -139
- package/src/views/user/outLink/form_view.vue +202 -202
- package/src/views/user/outLink/index.vue +110 -110
- package/src/views/user/role/edit.vue +4 -0
- package/src/views/user/role/role-box.scss +83 -0
- package/src/views/user/role/voc_edit.vue +4 -0
- package/src/views/user/user/list.vue +28 -6
- package/src/views/user/wf/iframe/index.vue +51 -51
- package/src/views/user/wf/iframe/index2.vue +64 -64
- package/src/views/user/wf/wf_diy_attribute/edit.vue +1 -1
- package/src/views/user/wf/wf_manage/list2.vue +871 -871
- package/src/views/user/wf/wf_manage/wfContentDialog.vue +177 -126
- package/src/views/user/wf/wf_obj_config/activiti_wf.vue +134 -133
- package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
- package/src/views/user/wf/wf_obj_config/list.vue +747 -746
- package/src/views/user/wf/wf_obj_config/list_form.vue +374 -373
- package/templates/child-app/.env +3 -0
- package/templates/child-app/README.md +49 -0
- package/templates/child-app/app.config.js +6 -0
- package/templates/child-app/babel.config.js +1 -0
- package/templates/child-app/core-resources.config.js +15 -0
- package/templates/child-app/gitignore +7 -0
- package/templates/child-app/package.json +34 -0
- package/templates/child-app/public/index.html +12 -0
- package/templates/child-app/src/assets/401_images/401.gif +0 -0
- package/templates/child-app/src/assets/404_images/404.png +0 -0
- package/templates/child-app/src/assets/404_images/404_cloud.png +0 -0
- package/templates/child-app/src/assets/logo.png +0 -0
- package/templates/child-app/src/corejsConfig.js +2 -0
- package/templates/child-app/src/icons/index.js +2 -0
- package/templates/child-app/src/icons/svg/child-demo.svg +1 -0
- package/templates/child-app/src/layout/index.vue +4 -0
- package/templates/child-app/src/main.js +5 -0
- package/templates/child-app/src/prefixConfig.js +13 -0
- package/templates/child-app/src/resources/css/login.scss +29 -0
- package/templates/child-app/src/resources/images/bg-login5.jpg +0 -0
- package/templates/child-app/src/resources/images/home-img.png +0 -0
- package/templates/child-app/src/router/modules/customer.js +3 -0
- package/templates/child-app/src/settings.js +25 -0
- package/templates/child-app/src/styles/app.scss +2 -0
- package/templates/child-app/src/views/demo/detail.vue +19 -0
- package/templates/child-app/src/views/demo/list.vue +38 -0
- package/templates/child-app/src/views/user/login/index.vue +18 -0
- package/templates/child-app/vue.config.js +107 -0
- package/src/components/xform/form-render/container-item/dynamicFieldEngine.js +0 -285
- package/src/components/xform/form-render/formDynamicFieldMixin.js +0 -131
- package/src/views/demo/bizTab/bill/billConfig.js +0 -41
- package/src/views/demo/bizTab/bill/detail.vue +0 -436
- package/src/views/demo/bizTab/bill/list.vue +0 -288
- package/src/views/demo/bizTab/bill/productDialog.vue +0 -176
- package/src/views/demo/bizTab/simple/billApi.js +0 -123
- package/src/views/demo/bizTab/simple/detail.vue +0 -407
- package/src/views/demo/bizTab/simple/list.vue +0 -217
- package/src/views/demo/bizTab/standalone/index.vue +0 -121
- package/src/views/demo/bizTab/wf/billConfig.js +0 -44
- package/src/views/demo/bizTab/wf/detail.vue +0 -661
- package/src/views/demo/bizTab/wf/list.vue +0 -242
- package/src/views/user/outLink/cc_form_view.vue +0 -188
- /package/src/{resources → core-resources}/js/base/common.js +0 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# public 资源交付与 npm 包体积控制:落地方案
|
|
2
|
+
|
|
3
|
+
日期:2026-09-15。
|
|
4
|
+
|
|
5
|
+
状态:**分阶段实施中,已接入资源工具、Ace、TinyMCE、Luckysheet 与 Activiti**。本文保留总体设计;已实现的接口、命令、限制和验证记录见各功能实施说明。后续依赖拆分尚未实施,不应把本文全部条目视为已交付。
|
|
6
|
+
|
|
7
|
+
## 1. 目标与范围
|
|
8
|
+
|
|
9
|
+
解决两个同时存在的问题:
|
|
10
|
+
|
|
11
|
+
1. 新子应用已经引用 Core 组件,但没有取得组件所需的 public 脚本、样式、worker、字体或独立页面,使用相关功能时失败。
|
|
12
|
+
2. 不能通过把整个 public 放进 cloud-web-corejs 来补齐资源,否则所有消费应用都会承担未使用功能的下载、安装和部署成本。
|
|
13
|
+
|
|
14
|
+
目标:**启用功能时资源完整,未启用功能不增加默认静态资源交付负担**。
|
|
15
|
+
|
|
16
|
+
本方案第一阶段只建立资源交付闭环,不重写 Vue 2 启动体系,不改变现有鉴权和菜单归属规则,不承诺立即缩小全部依赖和业务构建产物。
|
|
17
|
+
|
|
18
|
+
## 2. 已确认的现状
|
|
19
|
+
|
|
20
|
+
### 2.1 “丢失”的具体含义
|
|
21
|
+
|
|
22
|
+
- 本次子应用模板提交没有删除原仓库 public 文件。
|
|
23
|
+
- package.json 的 files 没有 public;当前资源检查脚本也明确禁止把整个 public 纳入发布清单。
|
|
24
|
+
- templates/child-app/public 只有 index.html,没有大型功能资源。
|
|
25
|
+
- 原应用通过 public 提供的内容,不会仅因新应用安装 cloud-web-corejs 就自动出现。
|
|
26
|
+
- 静态字符串 URL、iframe 地址和运行时全局对象通常不进入 webpack 文件解析,因此安装、构建成功不能证明这些资源齐全。
|
|
27
|
+
|
|
28
|
+
现阶段可以确认的是**新应用资源交付不完整**。具体项目如果存在“原有文件被删除”,仍需单独对照文件路径和版本历史,不能用本结论替代删除排查。
|
|
29
|
+
|
|
30
|
+
### 2.2 体积基线
|
|
31
|
+
|
|
32
|
+
当前工作区 Core 版本标识为 1.1.0-dev.33。以下 npm 数据来自 npm pack --dry-run --json;MB 为十进制字节换算,不是已发布 registry 包的实测结果。
|
|
33
|
+
|
|
34
|
+
| 指标 | 当前近似值 | 说明 |
|
|
35
|
+
| --- | ---: | --- |
|
|
36
|
+
| npm 压缩包 | 3.05 MB | 不包含原仓库 public |
|
|
37
|
+
| npm 解压文件 | 11.18 MB | 不包含安装后的传递依赖 |
|
|
38
|
+
| src/components 发布文件 | 7.31 MB | 主要体积来源 |
|
|
39
|
+
| src/views 发布文件 | 2.32 MB | 共享业务页面 |
|
|
40
|
+
| 模板发布文件 | 0.54 MB | 包括少量默认图片 |
|
|
41
|
+
| 文档发布文件 | 0.05 MB | 非主要体积来源 |
|
|
42
|
+
|
|
43
|
+
原仓库 public 的 du 磁盘占用约 28M,其中 Ace 约 10M、Activiti 约 6.4M、Luckysheet 约 6.1M、TinyMCE 约 2.6M。此处是目录磁盘占用量级,不应直接与 tarball 压缩字节数相加。
|
|
44
|
+
|
|
45
|
+
安装总量、各功能单独构建增量、首屏网络量尚需建立可重复基线。此前最小消费应用生产 dist 约 19 MB,只说明所测配置的构建规模,不是 npm 包大小。
|
|
46
|
+
|
|
47
|
+
### 2.3 已知调用证据
|
|
48
|
+
|
|
49
|
+
| 功能 | 代码位置 | 当前依赖方式 | 缺失后可能表现 |
|
|
50
|
+
| --- | --- | --- | --- |
|
|
51
|
+
| Ace | src/components/code-editor/index.vue | 已导入部分 npm 模块,其他内容按 WEB_PREFIX + /base/ace/src-min-noconflict 加载 | 特定模式、扩展或语法检查 worker 失败 |
|
|
52
|
+
| TinyMCE | src/components/Tinymce/index.vue | WEB_PREFIX + /base/tinymce/tinymce.min.js | 富文本初始化失败,或主题/语言/插件请求失败 |
|
|
53
|
+
| Luckysheet | src/components/luckysheet/view.vue、public/index.html | Vue 包装依赖 luckysheet 全局对象,原 HTML 包含样式引用 | 全局对象不存在、页面样式缺失 |
|
|
54
|
+
| Activiti | src/views/user/wf/wf_obj_config/activiti_wf.vue 等 | iframe 打开 WEB_PREFIX + /activiti-explorer/modeler.html | 设计器 404 或关联脚本/回调失败 |
|
|
55
|
+
|
|
56
|
+
Luckysheet 原 HTML 中也有被注释的脚本引用,不能把历史 HTML 当作已验证的初始化方案照搬;需要重新确认完整加载顺序。
|
|
57
|
+
|
|
58
|
+
## 3. 资源分类与归属
|
|
59
|
+
|
|
60
|
+
| 分类 | 范围 | 归属与交付原则 |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| 基础资源 | Core 必需的通用样式、图标、小图片、字体 | 保留在 src/core-resources 等已发布路径,通过构建导入 |
|
|
63
|
+
| 可选公共功能 | Ace、TinyMCE、Luckysheet、Activiti | 按功能提供独立版本化资源制品,启用后准备 |
|
|
64
|
+
| 应用专用 | 品牌图片、public/views 业务静态页面、呼叫中心集成 | 应用维护,不能自动归入 Core 公共资产 |
|
|
65
|
+
| 待确认 | public/obs、零散 base 脚本、打印 SDK、旧字体与样式 | 查实际消费者、来源和依赖后决定,不因名字或暂未搜到引用而删除 |
|
|
66
|
+
| 历史材料 | 示例、说明 HTML、测试资源、重复版本等 | 逐项确认用途后决定保留位置;不在本轮自动清理 |
|
|
67
|
+
|
|
68
|
+
Activiti 资源已可按需交付,但“资源可交付”和“可在 qiankun 子应用里工作”仍是两个问题。现有 iframe 依赖真实父窗口回调,当前支持主应用或非 qiankun 同源页面,qiankun 模式由运行时明确拒绝。
|
|
69
|
+
|
|
70
|
+
## 4. 推荐交付方式
|
|
71
|
+
|
|
72
|
+
### 4.1 分功能资源制品,构建时准备
|
|
73
|
+
|
|
74
|
+
采用以下链路:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
应用声明所需功能
|
|
78
|
+
↓
|
|
79
|
+
解析已锁定的资源版本及兼容关系
|
|
80
|
+
↓
|
|
81
|
+
取得该功能的资源制品并检查完整性
|
|
82
|
+
↓
|
|
83
|
+
复制到应用生成资源目录,保持现有相对路径
|
|
84
|
+
↓
|
|
85
|
+
校验 → 构建到 dist → 与应用一起部署
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
首选形态:每个功能一个可独立安装的 npm 资源包,由启用该功能的消费应用明确写入 devDependencies 并提交 package-lock.json。资源包名称和发布仓库在实施前确定,本文不假设任何新包已存在。
|
|
89
|
+
|
|
90
|
+
若无法使用 npm registry,则采用内部制品库中的分功能压缩包,由应用资源锁文件记录精确版本、地址、大小和完整性摘要。两种方式实现同一准备接口;第一期只需落地一种。
|
|
91
|
+
|
|
92
|
+
约束:
|
|
93
|
+
|
|
94
|
+
- Core 不把这些包加入强制 dependencies;普通应用不必安装全部资源。
|
|
95
|
+
- 资源准备是构建阶段行为,不放在页面首次打开时下载到本地,也不依赖隐式 postinstall。
|
|
96
|
+
- 运行部署机器只需 dist;构建机需要先安装包括 devDependencies 在内的构建依赖。
|
|
97
|
+
- 不把源码仓库的 public 作为消费工程运行时可访问的隐式路径。
|
|
98
|
+
- 若内部维护一个全集,需能生成分功能制品;只发布一个全集再“选择性复制”,只能减少 dist,不能减少安装下载量。
|
|
99
|
+
|
|
100
|
+
### 4.2 第一阶段同源部署
|
|
101
|
+
|
|
102
|
+
优先让资源随子应用部署到自身站点,保留 /base/ace、/base/tinymce、/luckysheet 等既有目录布局。代码、资源清单和资源文件作为同一次应用发布交付。
|
|
103
|
+
|
|
104
|
+
后续可以支持 CDN,但必须额外验证 worker、字体、脚本跨域、CSP、iframe 回调和缓存更新;不能只把路径前缀改成 CDN 就视为接入完成。
|
|
105
|
+
|
|
106
|
+
## 5. 配置与清单设计
|
|
107
|
+
|
|
108
|
+
下列文件名和字段均为拟新增契约。
|
|
109
|
+
|
|
110
|
+
### 5.1 应用功能声明
|
|
111
|
+
|
|
112
|
+
拟新增 core-resources.config.js:
|
|
113
|
+
|
|
114
|
+
```js
|
|
115
|
+
module.exports = {
|
|
116
|
+
features: {
|
|
117
|
+
codeEditor: true,
|
|
118
|
+
richText: false,
|
|
119
|
+
spreadsheet: false,
|
|
120
|
+
workflowDesigner: false
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
含义:声明应用需要准备哪些静态资源,不直接代表实现了组件代码裁剪,也不替代用户权限。
|
|
126
|
+
|
|
127
|
+
新模板默认只启用已完整交付的基础能力。生成器根据用户业务需求写入功能声明、精确资源依赖及接入步骤。动态表单、后端菜单和脚本可能间接使用组件,必须将这些需求纳入应用声明;不能只依赖静态 import 搜索推断。
|
|
128
|
+
|
|
129
|
+
### 5.2 资源制品清单
|
|
130
|
+
|
|
131
|
+
每个功能制品需包含以下元数据,具体版本值待盘点确认:
|
|
132
|
+
|
|
133
|
+
| 字段 | 要求 |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| schemaVersion、feature | 清单版本与稳定功能标识 |
|
|
136
|
+
| resourceVersion | 制品精确版本,不使用 latest/dev 标签作为锁定结果 |
|
|
137
|
+
| upstreamVersion、patchRevision | 原始库版本与本地补丁版本,不能只记录 Core 版本 |
|
|
138
|
+
| compatibleCore | 经验证的 Core 版本范围或兼容清单 |
|
|
139
|
+
| source、license | 来源、许可和随包声明文件;盘点确认可再分发范围 |
|
|
140
|
+
| files | 文件相对路径、字节数、摘要、目标相对路径 |
|
|
141
|
+
| dependsOn | 依赖功能及精确版本约束 |
|
|
142
|
+
| entrypoints | JS/CSS/worker/HTML 入口及先后依赖 |
|
|
143
|
+
| runtimeConstraints | 必须存在的全局对象、同源要求、支持的承载模式 |
|
|
144
|
+
|
|
145
|
+
对入口的依赖闭包进行盘点:JS、CSS url、字体、图片、worker、插件、语言包、主题、iframe 子页面、嵌套相对引用。清单不能只有入口文件名。
|
|
146
|
+
|
|
147
|
+
### 5.3 文件所有权与缓存
|
|
148
|
+
|
|
149
|
+
- 建议生成到 .core-resources/public,再由构建复制到 dist 约定路径;不直接覆盖应用维护的 public。
|
|
150
|
+
- 同一路径若同时由应用 public 和生成目录提供,默认构建失败,要求明确选择来源,不能靠复制顺序覆盖。
|
|
151
|
+
- 记录“本次工具生成的文件”清单;关闭功能时只清理工具拥有的文件。
|
|
152
|
+
- 缓存按制品精确版本和摘要标识;命中后仍核对完整性。离线构建缺缓存时明确失败,不回退到其他版本。
|
|
153
|
+
- 下载、校验在临时目录完成后再切换输出;文件路径必须限制在目标目录内,不接受越界路径或越界链接。
|
|
154
|
+
- 已复制文件仍需校验目标摘要,避免手工修改后被误当作锁定制品。
|
|
155
|
+
|
|
156
|
+
## 6. 各功能的实施要求
|
|
157
|
+
|
|
158
|
+
### Ace
|
|
159
|
+
|
|
160
|
+
先核对 npm ace-builds 与 public/base/ace 的版本和本地修改。当前已有若干模式打进 JS,应明确其与动态模式、worker 的边界。
|
|
161
|
+
|
|
162
|
+
优先支持一组明确的模式/主题/worker;业务允许任意模式时,提供完整模式资源选项,不能仅根据示例的 JavaScript 模式裁剪。worker 必须验证能执行语法检查,不能只检查 HTTP 200。
|
|
163
|
+
|
|
164
|
+
### TinyMCE
|
|
165
|
+
|
|
166
|
+
盘点当前版本、启用插件、主题、语言、图标、skin 和内容 CSS。保留目录内相对寻址关系,测试输入、工具栏、弹窗、语言和二次打开。升级第三方版本不与首次资源搬迁混在同一阶段。
|
|
167
|
+
|
|
168
|
+
### Luckysheet
|
|
169
|
+
|
|
170
|
+
明确脚本依赖顺序、样式清单、字体、全局对象初始化及销毁。跨页面重复打开时不能重复注入造成冲突;需要验证两个应用的隔离行为。资源加载完成后再挂载包装组件,避免引用尚未建立的全局对象。
|
|
171
|
+
|
|
172
|
+
### Activiti
|
|
173
|
+
|
|
174
|
+
已按 5.17.0 保存设计器依赖闭包,包含 stencilset、配置和本地定制;构建器锁定上游与本地树摘要,不能直接用上游原版替换。模型打开和保存协议已在非 qiankun 同源浏览器桩验收,真实业务后端仍需联调,qiankun 承载需另行设计 postMessage 协议。
|
|
175
|
+
|
|
176
|
+
### 应用专用与待确认项
|
|
177
|
+
|
|
178
|
+
public/views、呼叫中心、OBS 旧脚本及平台 SDK 先登记调用者。已有 npm SDK 并不自动证明 public 中另一份脚本可删除;以实际调用路径和版本行为为准。
|
|
179
|
+
|
|
180
|
+
## 7. 运行时地址和加载协议
|
|
181
|
+
|
|
182
|
+
拟增加专用资源地址解析与加载能力,与当前 src/utils/assetUrl.js 的图片模块 URL 归一化功能分开。
|
|
183
|
+
|
|
184
|
+
- 独立运行:资源基址为应用实际部署目录。
|
|
185
|
+
- qiankun 挂载:资源基址从子应用 entry/注入的 publicPath 推导,不能让 WEB_PREFIX 的相对地址误命中宿主 origin。
|
|
186
|
+
- 新模式统一走资源解析入口;旧应用未配置新资源机制时,保留当前路径行为,分批迁移。
|
|
187
|
+
- HTML、CSS 相对链接、JS 动态加载和 worker 必须使用一致的基址。
|
|
188
|
+
- 明确每个功能的初始化 Promise;依赖先加载,同一应用实例避免重复初始化,失败支持明确重试。
|
|
189
|
+
- 资源加载器报告功能、版本和失败 URL;不能将缺资源错误吞掉后显示空白组件。
|
|
190
|
+
- 功能未启用但被动态页面使用时,提示缺少哪项资源配置;不得绕过权限自动启用、自动远程取代码。
|
|
191
|
+
- 同一应用多个详情实例的生命周期归属需要测试;不直接用真实 window 全局共享一个可销毁实例。
|
|
192
|
+
|
|
193
|
+
版本化制品不要求第一阶段改变全部 URL。保持旧 URL 时,应以完整 dist 原子部署、正确缓存策略和整包回滚避免新代码配旧资源;后续如采用版本化 URL,再集中调整解析契约。
|
|
194
|
+
|
|
195
|
+
## 8. 命令与构建接入
|
|
196
|
+
|
|
197
|
+
拟新增的消费应用命令:
|
|
198
|
+
|
|
199
|
+
| 命令 | 行为 |
|
|
200
|
+
| --- | --- |
|
|
201
|
+
| resources:prepare | 根据应用功能声明和锁定依赖生成静态资源 |
|
|
202
|
+
| resources:check | 核对已启用功能的清单、版本、摘要和目标冲突 |
|
|
203
|
+
| dev | 先准备/检查资源,再启动开发服务 |
|
|
204
|
+
| build:prod | 先准备/检查资源,再生产构建,最后检查 dist 资源完整性 |
|
|
205
|
+
|
|
206
|
+
命令具体脚本路径待实现时确定。现有 check:package-resources 保持 Core 边界职责,不把整个 public 放进 Core。新增功能资源检查应独立承担资源闭包和输出校验。
|
|
207
|
+
|
|
208
|
+
准备过程须幂等。CI 在新目录使用锁文件安装,不能依赖开发者之前手工复制的文件。只装 production dependencies 的环境不能直接运行资源准备和应用构建,应在独立构建阶段完成。
|
|
209
|
+
|
|
210
|
+
## 9. 包体积控制
|
|
211
|
+
|
|
212
|
+
四种指标分别记录,分别优化:
|
|
213
|
+
|
|
214
|
+
| 指标 | 本阶段动作 | 后续动作 |
|
|
215
|
+
| --- | --- | --- |
|
|
216
|
+
| Core npm 压缩/解压大小 | 明确 files 白名单,禁止混入大型 public | 基于使用关系拆组件、共享业务页面;必要时独立脚手架包 |
|
|
217
|
+
| 消费应用安装量 | 功能资源按需声明,不建立强制全集依赖 | 拆分真正可选的运行依赖,先解决源码引用和全局注册耦合 |
|
|
218
|
+
| dist 总量 | 只复制启用功能的资源 | 精确裁剪视图上下文和业务功能,不能仅靠懒加载 |
|
|
219
|
+
| 首屏网络量 | 需要时再初始化非首屏功能资源 | 按路由和功能测量依赖链,避免公共入口提前加载 |
|
|
220
|
+
|
|
221
|
+
初始 Core 包预算:压缩不超过 3.5 MB、解压不超过 13 MB;相对基线增长超过 10% 时要求解释。P1 已将这组预算实现为 check:package-size 并接入 test:ci,超限需评审后调整基线,不静默放宽。
|
|
222
|
+
|
|
223
|
+
每个资源功能单独记录制品体积、复制文件体积、dist 增量和首次使用网络量。资源压缩传输不等于减少解压量;迁到 CDN 也不等于减少用户实际下载。
|
|
224
|
+
|
|
225
|
+
不要把仍由 Core 无条件导入的库直接改成可选依赖,否则会出现安装成功、编译失败。组件代码拆包和动态视图裁剪放在资源交付闭环之后,单独处理兼容性。
|
|
226
|
+
|
|
227
|
+
## 10. 分阶段任务与完成条件
|
|
228
|
+
|
|
229
|
+
### P0:资源台账与边界确认
|
|
230
|
+
|
|
231
|
+
产出逐功能台账:调用点、文件闭包、上下游版本、本地补丁、资源大小、许可来源、全局对象、路径、支持的承载模式、验证负责人。
|
|
232
|
+
|
|
233
|
+
完成条件:每项资源都能解释消费者和交付归属;待确认项明确列出,不能直接归为可删除。确定第一期制品渠道和试点应用。
|
|
234
|
+
|
|
235
|
+
### P1:一个功能端到端打通
|
|
236
|
+
|
|
237
|
+
建议选择 Ace 作为试点:生成版本化制品/清单,应用配置功能,准备到生成目录,建立独立/qiankun 资源地址解析,接入开发和生产检查。
|
|
238
|
+
|
|
239
|
+
完成条件:新机器仅按文档安装即可使用;实际 mode/worker 生效;关闭功能不复制相关资源;缺文件/版本错配会失败;应用自有文件不被覆盖;Core 包没有携带 Ace public 全集。
|
|
240
|
+
|
|
241
|
+
### P2:逐功能补齐
|
|
242
|
+
|
|
243
|
+
按 TinyMCE、Luckysheet、主应用 Activiti 的顺序扩展。同步更新生成器、提示词、接入文档、CI 用例和制品兼容表。
|
|
244
|
+
|
|
245
|
+
完成条件:每项启用功能有真实浏览器功能验收,动态表单和菜单间接依赖有声明方式,不以普通列表测试替代。
|
|
246
|
+
|
|
247
|
+
### P3:进一步减小代码与依赖
|
|
248
|
+
|
|
249
|
+
按构建与使用数据评估组件子包、业务页面子包、可选依赖和脚手架独立发布。先设计稳定入口、扩展点和迁移清单,再逐应用迁移;不直接封死已有深层 import。
|
|
250
|
+
|
|
251
|
+
完成条件:安装量、dist 或首屏指标有可复现下降,现有应用及权限路由回归通过。
|
|
252
|
+
|
|
253
|
+
## 11. 验收矩阵
|
|
254
|
+
|
|
255
|
+
| 场景 | 必须验证 |
|
|
256
|
+
| --- | --- |
|
|
257
|
+
| 全新安装 | 从实际 npm tarball 创建应用;独立目录安装;不借用 kCode/std 的 public 或 node_modules |
|
|
258
|
+
| 默认模板 | 基础页面可用;无可选资源包强制安装和资源复制 |
|
|
259
|
+
| 单功能/组合启用 | 只得到声明资源及依赖,无同路径冲突,版本匹配 |
|
|
260
|
+
| 缺失与损坏 | 缺文件、摘要不符、版本不兼容时构建失败并定位到功能 |
|
|
261
|
+
| 重复准备/关闭功能 | 幂等;只移除工具拥有的资源;应用手写 public 保留 |
|
|
262
|
+
| 独立/子路径部署 | 入口、CSS、字体、worker、iframe 均从正确路径取到正确 MIME 内容 |
|
|
263
|
+
| qiankun 跨源 | 请求到子应用资源 origin;不误取宿主同名资源;实例隔离与卸载正确 |
|
|
264
|
+
| 实际功能 | Ace worker、TinyMCE 插件/skin、Luckysheet 编辑、主应用 Activiti 保存逐项操作 |
|
|
265
|
+
| 动态表单/菜单 | 间接使用资源能识别缺配置;功能配置不改变权限语义 |
|
|
266
|
+
| 离线与回滚 | 缓存完整时可构建;缺制品明确失败;旧代码/锁文件可重建完整旧版 dist |
|
|
267
|
+
| 体积 | 同时记录包、安装、dist、首屏/首次使用指标,不用一个数替代全部 |
|
|
268
|
+
|
|
269
|
+
HTTP 200 不能单独作为资源成功标准:开发服务器可能对不存在的脚本返回 index.html,必须核对 MIME、内容和实际功能。
|
|
270
|
+
|
|
271
|
+
## 12. 迁移、发布与回滚
|
|
272
|
+
|
|
273
|
+
1. 保留现有应用 public 和旧加载方式,先在新模板试点;不批量删除存量资源。
|
|
274
|
+
2. 制品发布后固定版本和摘要,完成与目标 Core 的兼容测试;资源发布和 npm 正式发布作为独立操作执行。
|
|
275
|
+
3. 试点应用显式选择新机制,确认新资源与旧文件不冲突,再逐项迁移资源所有权。
|
|
276
|
+
4. 只有在对应功能已验证、旧消费者已迁移后,才移除其不再需要的旧复制流程。
|
|
277
|
+
5. 回滚提交应同时恢复 Core/资源版本锁定和完整部署产物。禁止只回滚 JS 而留下新版本 public。
|
|
278
|
+
|
|
279
|
+
实施前需要定下的事项:资源制品使用的 registry/内部存储位置、发布命名与权限、第一批功能模式/插件范围、试点应用与可用后端环境、最终体积预算。资源版本和文件清单以 P0 盘点结果填写,不在设计稿中猜测。
|
|
280
|
+
|
|
281
|
+
## 13. 相关材料
|
|
282
|
+
|
|
283
|
+
- [当前接入契约](./README.md)
|
|
284
|
+
- [当前生成提示词](./generate-prompt.md)
|
|
285
|
+
- [已有模板验收记录及未覆盖范围](./validation.md)
|
|
286
|
+
- [qiankun 接入协议](../qiankun接入协议.md)
|
|
287
|
+
|
|
288
|
+
实施时优先阅读 package.json、build/check-package-resources.js、src/public-path.js,以及各功能实际组件和原 public 入口。原 public 是盘点输入,不是可直接全量发布的最终清单。
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# public 资源首批实施:Ace
|
|
2
|
+
|
|
3
|
+
## 本批边界
|
|
4
|
+
|
|
5
|
+
实现资源制品构建、子应用显式启用、准备/完整性检查、webpack 输出与 Ace 子应用路径解析。没有删除或迁移旧 public,没有修改 std,没有发布 npm。后续功能仍按 [总体方案](./public-resources-plan.md) 推进。
|
|
6
|
+
|
|
7
|
+
Core 只增加小型工具和模板,不包含资源包 payload。`ace-builds` 仍是 Core 原有运行时代码依赖,因此本批减少的是资源复制和默认部署负担,不代表已经缩小 npm 依赖安装总量或 Core 的全部业务 chunk。
|
|
8
|
+
|
|
9
|
+
## 制作与使用
|
|
10
|
+
|
|
11
|
+
维护者在 kCode(Node 20+,依赖已安装)执行:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm run build:ace-resources
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
得到 `artifacts/resources/cloud-web-corejs-resources-ace-1.11.0-core.0.tgz`。这是独立 npm 制品,目前仅本地构建,尚未发布到 registry。构建临时目录会保留供审计。来源固定为 `ace-builds@1.11.0`,包含上游 LICENSE;资源清单记录 SHA-256、字节数、部署路径、profile、上游版本和补丁版本。当前兼容 Core 精确限定为 `1.1.0-dev.33`,升级时须验证并同步维护兼容信息。
|
|
18
|
+
|
|
19
|
+
新生成子应用先安装维护者提供的资源制品(替换实际绝对路径):
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install --save-dev --save-exact /absolute/path/cloud-web-corejs-resources-ace-1.11.0-core.0.tgz
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
修改子应用 `core-resources.config.js`:
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
module.exports = {
|
|
29
|
+
schemaVersion: 1,
|
|
30
|
+
features: {
|
|
31
|
+
codeEditor: {
|
|
32
|
+
package: "cloud-web-corejs-resources-ace",
|
|
33
|
+
version: "1.11.0-core.0",
|
|
34
|
+
profile: "basic"
|
|
35
|
+
},
|
|
36
|
+
richText: false,
|
|
37
|
+
spreadsheet: false,
|
|
38
|
+
workflowDesigner: false
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npm run resources:prepare
|
|
45
|
+
npm run resources:check
|
|
46
|
+
npm run dev
|
|
47
|
+
npm run build:prod
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
模板的 predev/prebuild:prod 自动准备资源,postbuild:prod 校验 dist 的资源哈希;直接调用 vue-cli-service 时需自行先 prepare。资源配置变化后重启开发服务。提交配置和 package-lock.json,并确保 CI 能访问锁定的本地制品路径;团队正式使用前应把该制品置于内部制品库或仓库约定目录,不能依赖开发机的临时绝对路径。
|
|
51
|
+
|
|
52
|
+
`basic` 交付 javascript/json/css/java/text 模式、sqlserver 主题、补全扩展、相应 snippets 和三个 worker;`full` 交付完整 src-min-noconflict,适合后端动态指定其他语言。两个 profile 共用一个完整独立安装包,basic 只减少准备/部署量,**不减少该可选包自身的下载量**。未启用 codeEditor 时不会输出其静态文件;在受管理的模板中误用组件会显示资源配置错误并发出 `resource-error` 事件。不支持的模式同样显式提示。
|
|
53
|
+
|
|
54
|
+
## 路径、所有权与失败策略
|
|
55
|
+
|
|
56
|
+
- 生成目录为 `.core-resources/generations/<内容哈希>/public`,对应 ownership.json。采用新目录写入后重命名,重复 prepare 复用并核验同一代文件,不覆盖应用 public。
|
|
57
|
+
- 第一版保留旧代和中断的 staging 目录,不自动垃圾回收。禁用功能后的新构建只读取新代,不会部署旧代;磁盘清理暂由使用者确认后处理。
|
|
58
|
+
- 缺包、版本不兼容、哈希不符、应用 public 同路径文件、webpack 同名输出、越界路径、符号链接和被人为修改的生成目录均失败退出。不要在生成目录内手改;配置和上游制品才是来源。
|
|
59
|
+
- webpack 插件把选定文件交给开发内存文件系统及生产输出,无需额外复制 public、全局 postinstall 或运行时联网下载。
|
|
60
|
+
- 资源输出标记为已经压缩,禁止生产压缩器再次改写;否则即使页面看似正常,postbuild 的 SHA-256 检查也会失败。生产模式自动测试覆盖这一点。
|
|
61
|
+
- 独立运行使用 WEB_PREFIX;qiankun 使用子应用注入的 publicPath,避免 worker/snippets 请求落到主应用域名。跨域 worker 使用 Ace 自身的加载机制,部署环境还需允许相应 CORS/CSP(尤其 worker 的 blob/importScripts),本批不修改网关安全策略。
|
|
62
|
+
- 未接入新插件的旧应用保留传统路径,不强制启用新配置。已有子应用需手动同步模板里的脚本、配置和 ResourcesPlugin,生成器不会覆盖已有项目。
|
|
63
|
+
- 文件哈希用于完整性检查,不代替制品来源认证;交付时须锁定并审查 package-lock 的制品完整性与来源。
|
|
64
|
+
|
|
65
|
+
## 资源盘点与后续
|
|
66
|
+
|
|
67
|
+
| 功能 | 已核实 | 待实施/确认 |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| Ace | public 顶层 261 个 src-min-noconflict 文件与已安装 1.11.0 完全相同;本制品直接来自固定 npm 上游 | 全部业务语言覆盖、多个子应用共享 Ace 实例风险、CSP 实际环境 |
|
|
70
|
+
| TinyMCE | 后续批次已核对全部 86 个文件来源并接入独立制品、资源路径和加载器,见 TinyMCE 实施说明 | 生产环境策略、业务上传、全部插件组合及发布前许可审核 |
|
|
71
|
+
| Luckysheet | 后续批次已核对 2.1.13 与 8 个存量差异,并接入独立制品、加载顺序和单实例保护 | 多子应用并发隔离、完整导入导出及复杂业务能力 |
|
|
72
|
+
| Activiti | 含设计器 iframe 与第三方 libs | 已接入 5.17.0-core.1;只支持主应用/同源宿主,详见 activiti-resources.md |
|
|
73
|
+
|
|
74
|
+
richText、spreadsheet 与 workflowDesigner 已在后续批次接入,见 [TinyMCE](./tinymce-resources.md)、[Luckysheet](./luckysheet-resources.md) 和 [Activiti](./activiti-resources.md) 实施说明。obs、呼叫中心、打印 SDK、业务 views/mobile 等仍需按调用链单独盘点;不以当前未引用作为删除依据。
|
|
75
|
+
|
|
76
|
+
## 验证命令
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm run check:resource-tools
|
|
80
|
+
npm run check:package-resources
|
|
81
|
+
npm run check:package-size
|
|
82
|
+
node build/check-child-app.js --ace
|
|
83
|
+
node tests/resources/check-installed-profiles.js /generated/child
|
|
84
|
+
PLAYWRIGHT_MODULE=/absolute/path/to/playwright node build/check-child-browser.js /generated/child --ace
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
资源工具测试覆盖显式禁用、幂等、未准备、缺包、版本/profile、源及生成文件篡改、冲突、越界/符号链接,以及独立/qiankun URL。端到端脚本使用实际 Core 和资源 tarball,浏览器脚本检查 Core CodeEditor 的真实 JSON worker 返回语法错误,并验证卸载时 worker 终止,而不只检查 DOM 出现。未覆盖真实账号、业务后台权限菜单或生产宿主策略。
|
|
88
|
+
|
|
89
|
+
实际资源制品的配置切换测试:full 为 441 个文件 / 9,191,194 字节;basic 为 17 个文件 / 1,225,005 字节;禁用为 0 个文件。以上为原始静态文件大小,包含部署的许可证,不是 gzip 下载量。basic 相比 full 减少约 86.7% 的静态部署字节数。
|
|
90
|
+
|
|
91
|
+
Core 体积检查:以改造前 3,046,559 / 11,184,103 字节为压缩/解压基线,任一增长超过 10% 或超过 3.5MB / 13MB 硬上限则失败;不允许 public/artifacts/生成目录进入 Core tarball。独立资源制品、安装依赖与应用 dist 分开度量,不混用这些指标。
|
|
92
|
+
|
|
93
|
+
## 本次验收记录(2026-09-15)
|
|
94
|
+
|
|
95
|
+
- 资源工具测试、生产压缩下的原字节输出与冲突拦截、资源边界、体积和最小消费应用检查通过,相关检查已接入 test:ci 前置步骤。完整 test:ci 后续已执行,但被仓库存量的全量 ESLint 错误拦截;既有 test:unit 单独执行也因 Jest 配置引用未安装的 vue-jest 而在收集前退出。
|
|
96
|
+
- 实际 Core tarball → 新生成子应用 → 干净安装 → 独立 Ace tarball 安装。首次生产构建被 postbuild 哈希校验拦截,定位为 Terser 二次压缩;修复后重新打包并安装 Core,生产构建及 17 个资源的 check-dist 全部通过。
|
|
97
|
+
- 最终生产产物经 Chromium + 真实跨域 qiankun 验证:独立登录页(仅模拟登录配置)、挂载/update/卸载、详情承载私有示例页、列表操作、SVG,以及真实 CodeEditor JSON worker 的语法错误和卸载终止全部通过。没有静态资源缺失或页面运行异常。
|
|
98
|
+
- 构建仍有 273 条警告,主要是既有 Vue 2 SFC 样式默认导出警告;不属于零警告验收。真实账号、业务权限菜单、生产网关/CSP、多子应用同时编辑、完整语言集合的浏览器覆盖仍未验收。
|
|
99
|
+
- 独立资源制品保存在 `artifacts/resources/`;最终构建日志、浏览器日志和截图保存在 `artifacts/resources/validation/`,均被 Git 忽略。未提交 Git、未推送、未发布 npm。
|
|
100
|
+
|
|
101
|
+
以上记录对应 **P1 Ace 交付与验证闭环**。TinyMCE、Luckysheet 与 Activiti 的后续进展见各自独立说明。P0 其余资源的完整溯源和 P3 代码/依赖拆分仍待继续;当前不能声明全部 public 功能已修复。
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# TinyMCE 可选资源接入
|
|
2
|
+
|
|
3
|
+
本批沿用现有 TinyMCE 4.9.2,不升级运行库、不删除旧 public,也不把静态资源或新的 TinyMCE 依赖加入 Core 的强制依赖。独立制品暂未发布 registry;使用本地 tarball 验证和交付。
|
|
4
|
+
|
|
5
|
+
## 来源与体积
|
|
6
|
+
|
|
7
|
+
逐字节核对原 `public/base/tinymce` 的 86 个文件:
|
|
8
|
+
|
|
9
|
+
| 内容 | 精确来源 | 对比结果 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 主脚本、插件附属文件、lightgray 皮肤 | tinymce-all-in-one@4.9.2 | 40 个文件完全相同 |
|
|
12
|
+
| langs 目录 | tinymce-all-in-one@4.9.5 的 langs(不使用其主脚本) | 46 个文件完全相同 |
|
|
13
|
+
| TinyMCE 原始许可 | tinymce@4.9.2 的 license.txt | 原样随制品保留 |
|
|
14
|
+
|
|
15
|
+
这个组合不是本次升级造成的;现有仓库本身就是此组合。本地文件有差异或闭包数量变化时,构建脚本会拒绝打包,需要重新审核并修改补丁版本。
|
|
16
|
+
|
|
17
|
+
[上游合并包说明](https://github.com/PanJiaChen/tinymce-all-in-one)说明主脚本已合入插件;因此不能把其余 plugins 目录中没有 plugin.min.js 判断为资源丢失。当前制品保持整个已有闭包,不额外裁剪插件。上游合并包 package.json 声明 MIT;TinyMCE 本体的 LGPL-2.1 声明不能被合并包元数据替代。制品保存官方 LGPL 原文、上游 package.json 信息与来源链接;正式对外发布前仍需审核第三方许可、源码提供与通知义务,本次没有作法律合规认证。
|
|
18
|
+
|
|
19
|
+
独立制品约 **0.68 MB 压缩 / 2.50 MB 解压**。部署 88 个文件,原始资源共 2,471,058 字节(含两份许可/来源文件)。只提供 `full` profile;关闭 richText 时为 0 个 TinyMCE 文件。Core tarball 不含这批大资源。
|
|
20
|
+
|
|
21
|
+
## 维护者制作制品
|
|
22
|
+
|
|
23
|
+
在独立目录安装精确上游版本,不改变 kCode 的依赖声明。例如在 kCode 中:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install --prefix artifacts/resources/tinymce-source --ignore-scripts --save-exact --no-audit --no-fund tinymce-all-in-one@4.9.2 tinymce-languages@npm:tinymce-all-in-one@4.9.5 tinymce@4.9.2
|
|
27
|
+
npm run build:tinymce-resources -- artifacts/resources/tinymce-source
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
产生 `artifacts/resources/cloud-web-corejs-resources-tinymce-4.9.2-core.0.tgz`。保存制品及来源安装目录的 package-lock.json 到团队制品系统;该目录在本工作区被 Git 忽略。构建器不自动联网。原始文件的 SHA-256、目标路径、语言源版本、Core 兼容版本和补丁版本写入 resources.json。
|
|
31
|
+
|
|
32
|
+
## 子应用启用
|
|
33
|
+
|
|
34
|
+
先用包含本次修改的 Core tarball 安装/生成应用,再安装 TinyMCE 制品(替换实际路径):
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install --save-dev --save-exact /absolute/path/cloud-web-corejs-resources-tinymce-4.9.2-core.0.tgz
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
在已有 `core-resources.config.js` 的 features 中配置,保留其他功能声明:
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
richText: {
|
|
44
|
+
package: "cloud-web-corejs-resources-tinymce",
|
|
45
|
+
version: "4.9.2-core.0",
|
|
46
|
+
profile: "full"
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm run resources:prepare
|
|
52
|
+
npm run resources:check
|
|
53
|
+
npm run dev
|
|
54
|
+
npm run build:prod
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
旧应用需同步新模板的 ResourcesPlugin、配置和资源准备/校验脚本;不能只加配置文件。应用自有 public 同路径文件会冲突报错,不会被覆盖。未启用却使用组件时显示 richText 缺配置提示;不自动下载安装资源,不改变鉴权和菜单权限。
|
|
58
|
+
|
|
59
|
+
## 加载与生命周期
|
|
60
|
+
|
|
61
|
+
- 独立运行按 WEB_PREFIX,qiankun 按子应用注入 publicPath 解析主脚本、语言和皮肤地址,显式设置 TinyMCE 的资源基址。
|
|
62
|
+
- 同一应用并发组件共享一次主脚本请求;失败会清理加载状态,组件显示 URL 和重试按钮。HTTP 200 但没有兼容运行库也会失败。
|
|
63
|
+
- 拒绝覆盖不同来源或版本的既存 TinyMCE 全局对象。此保护不是允许多个不同版本共享一个 window 的承诺;多应用同时使用仍需单独验证宿主隔离。
|
|
64
|
+
- 使用组件实际 textarea 作为 target。mounted/activated 去重,卸载或停用后忽略过期回调,只移除本组件编辑器;已加载脚本保留供同应用复用。
|
|
65
|
+
- 包装组件沿用 en/zh/es/ja 映射;其他应用 locale 回退 en。资源保留全部原始语言,但没有扩展应用 i18n 的业务语言体系。
|
|
66
|
+
- `getContent()` 现在返回内容,实例不存在时返回空串;setContent 在销毁后安全跳过。
|
|
67
|
+
- 本批不改既有上传业务接口,也没有验证上传、拼写服务、全部插件组合或生产 CSP。保留旧版本不等于安全升级;正式上线应另行安排版本和安全评估。
|
|
68
|
+
|
|
69
|
+
## 验证
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm run check:resource-tools
|
|
73
|
+
TINYMCE_SOURCE_DIR=/absolute/path/to/upstream-install node build/check-child-app.js --ace --tinymce
|
|
74
|
+
PLAYWRIGHT_MODULE=/absolute/path/to/playwright node build/check-child-browser.js /generated/child --ace --tinymce
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
自动测试覆盖 Ace/TinyMCE 组合及独立关闭、第二个功能空清单、加载去重、失败后重试、异源全局拒绝、停用/销毁后的过期回调、资源地址、生产字节完整性等。浏览器脚本覆盖双编辑器、输入/v-model、中文代码插件弹窗、关闭重开、子应用卸载,并同时回归 Ace worker。
|
|
78
|
+
|
|
79
|
+
## 验收记录(2026-09-15)
|
|
80
|
+
|
|
81
|
+
- 15 项自动测试通过;包括普通入口/详情入口在子组件渲染前注册根实例的两项回归。实际浏览器发现 `$t2` 在首帧读取尚未注册的 `$vueRoot`,已通过提前注册根实例修复,没有用测试桩绕过翻译函数。
|
|
82
|
+
- 新目录安装真实 Core/Ace/TinyMCE tarball,生产构建通过。发现并修复启动顺序问题后重新打包、安装 Core 并构建,最终 105 个文件 / 3,696,063 字节的输出哈希检查通过。
|
|
83
|
+
- 最终产物经真实跨域 qiankun + Chromium 验证:双编辑器、输入/v-model、中文源代码弹窗、关闭重开、卸载全部通过。主脚本仅一次请求,语言/皮肤从子应用目录加载;页面异常、控制台错误和静态资源缺失均为零。
|
|
84
|
+
- 同时回归独立登录页、普通挂载/update/卸载、私有示例列表及 Ace JSON worker 和卸载终止。独立登录页验证不等于独立入口的富文本业务流程验收;独立资源 URL 另有自动测试。
|
|
85
|
+
- 仍有 273 条构建警告,主要为既有 Vue 2 样式默认导出等;未运行完整历史 test:ci,未验收真实账号、上传/拼写服务、全部插件语言组合、生产 CSP 或多个不同子应用同时使用 TinyMCE。
|
|
86
|
+
- 日志、来源锁文件和截图保存在 Git 忽略的 `artifacts/resources/validation-tinymce/`。本轮未修改旧 public、std,未提交、推送或发布 npm。
|
|
87
|
+
|
|
88
|
+
P2 的 TinyMCE 子项已完成上述接入与验收。Luckysheet 和 Activiti 已在后续批次接入;P3 的运行依赖和业务代码拆分尚未实施。
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 子应用模板验收记录
|
|
2
|
+
|
|
3
|
+
日期:2026-09-15。环境:Node 22.23.2、npm 10.9.8、Chromium;Core 源码版本标识为 1.1.0-dev.33,使用当前工作区 npm pack 产物,未发布到 npm。
|
|
4
|
+
|
|
5
|
+
## 已通过
|
|
6
|
+
|
|
7
|
+
- Core 资源边界:1225 个发布源码文件、104 个 Core SVG。
|
|
8
|
+
- 发布清单:包含生成器、模板 `.env`、应用文件/素材和提示词,不依赖 std 工作区。
|
|
9
|
+
- 生成器:拒绝覆盖已有工程,拒绝非法/保留 appCode。
|
|
10
|
+
- 从 tarball 解包后运行生成器,在仓库外干净安装;生产构建退出码 0,产物约 19 MB。
|
|
11
|
+
- 开发 webpack 配置解析及根路径/静态文件/API/WebSocket 路径边界检查。
|
|
12
|
+
- 实际启动 `npm run dev`;根路径入口返回正确 HTML,浏览器能显示登录页和 Core SVG。
|
|
13
|
+
- 生产浏览器:独立登录页可见;登录配置由测试服务模拟,没有真实账号登录。
|
|
14
|
+
- 真实 qiankun:两个本地端口跨源加载,未登录态 mount/update/unmount 成功。
|
|
15
|
+
- 详情承载:私有 `/demo/list` 页面加载成功,内存示例新增/编辑/筛选正常,应用图标可见,URL 未改变,卸载后清空。
|
|
16
|
+
- 上述生产浏览器用例无 pageerror、无业务静态资源 404;登录及列表截图已人工查看。
|
|
17
|
+
- Activiti 5.17:独立资源制品 324 个文件,默认模板关闭;从 Core tarball 生成的新应用安装制品后生产构建成功。同源浏览器实际加载设计器、stencil 和模型,并验证保存 POST;发现并修复官方 WAR 同样缺失的 `glasspane.png` 引用后无静态资源 404。
|
|
18
|
+
- `git diff --check` 与新增 Node 脚本语法检查。
|
|
19
|
+
|
|
20
|
+
## 本轮处理的问题
|
|
21
|
+
|
|
22
|
+
1. 默认并行压缩时构建被系统 Killed;模板关闭压缩器多进程后完整构建通过。
|
|
23
|
+
2. Core 默认生产登录初始化会跳主应用前缀;模板通过 Login 扩展覆盖这段初始化,支持独立显示登录页,其余鉴权沿用 Core。
|
|
24
|
+
3. SCSS `:export` 的 theme/menu 等值需要 ICSS 处理,模板补充 normal SCSS 规则。
|
|
25
|
+
4. 开发内联 source map 导致 vendor 脚本约 99 MB,首次浏览器检查超时;切换外置 cheap-module-source-map 后约 43 MB,重新检查通过。生产 devtool 仍为 false。
|
|
26
|
+
|
|
27
|
+
## 已知限制
|
|
28
|
+
|
|
29
|
+
- 生产构建仍有 273 个警告,主要为 Vue 2 SFC 样式默认导出兼容警告、旧 CSS 语法和资源体积提示;开发构建有 272 个警告。没有隐藏这些警告。所测页面表现正常不代表所有包内页面均已验收。
|
|
30
|
+
- 最小化的是应用侧文件与接入配置,不是裁剪后的 Core 能力包。开发同步视图上下文仍较大,初次编译需要时间。
|
|
31
|
+
- 未验证真实登录、授权菜单派发、已登录页面保活/刷新、真实 Activiti 业务后端、上传/打印及并发远程详情实例。
|
|
32
|
+
- Ace、TinyMCE、Luckysheet、Activiti 等可选静态资源没有包含在模板中,按接入文档按需补齐。
|
|
33
|
+
|
|
34
|
+
重复执行入口:`npm run check:child-app`、`npm run check:child-browser -- <已构建的子应用目录>`。后者需要 Playwright/Chromium,详见接入契约。
|