giime 1.1.5 → 1.1.6
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/es/components/src/base/affix/Affix.vue.d.ts +2 -2
- package/es/components/src/base/alert/Alert.vue.d.ts +3 -3
- package/es/components/src/base/alert/index.d.ts +8 -8
- package/es/components/src/base/anchor/Anchor.vue.d.ts +1 -1
- package/es/components/src/base/anchor/index.d.ts +3 -3
- package/es/components/src/base/autocomplete/Autocomplete.vue.d.ts +11 -11
- package/es/components/src/base/autocomplete/autocomplete.d.ts +1 -1
- package/es/components/src/base/autocomplete/index.d.ts +30 -30
- package/es/components/src/base/badge/Badge.vue.d.ts +1 -1
- package/es/components/src/base/badge/index.d.ts +3 -3
- package/es/components/src/base/button/Button.vue.d.ts +9 -9
- package/es/components/src/base/button/button.d.ts +4 -4
- package/es/components/src/base/button/index.d.ts +23 -23
- package/es/components/src/base/buttonGroup/ButtonGroup.vue.d.ts +3 -3
- package/es/components/src/base/buttonGroup/buttonGroup.d.ts +1 -1
- package/es/components/src/base/buttonGroup/index.d.ts +7 -7
- package/es/components/src/base/carousel/Carousel.vue.d.ts +1 -1
- package/es/components/src/base/carousel/index.d.ts +3 -3
- package/es/components/src/base/cascader/Cascader.vue.d.ts +6 -6
- package/es/components/src/base/cascader/index.d.ts +18 -18
- package/es/components/src/base/chart/Chart.vue.d.ts +2 -2
- package/es/components/src/base/chart/index.d.ts +2 -2
- package/es/components/src/base/checkbox/Checkbox.vue.d.ts +2 -2
- package/es/components/src/base/checkbox/index.d.ts +6 -6
- package/es/components/src/base/checkboxButton/CheckboxButton.vue.d.ts +2 -2
- package/es/components/src/base/checkboxButton/index.d.ts +6 -6
- package/es/components/src/base/col/Col.vue.d.ts +1 -1
- package/es/components/src/base/col/index.d.ts +3 -3
- package/es/components/src/base/collapseItem/CollapseItem.vue.d.ts +1 -1
- package/es/components/src/base/collapseItem/index.d.ts +3 -3
- package/es/components/src/base/colorPicker/ColorPicker.vue.d.ts +6 -6
- package/es/components/src/base/colorPicker/index.d.ts +6 -6
- package/es/components/src/base/colorPickerPanel/ColorPickerPanel.vue.d.ts +1 -1
- package/es/components/src/base/colorPickerPanel/index.d.ts +1 -1
- package/es/components/src/base/datePicker/DatePicker.vue.d.ts +5 -5
- package/es/components/src/base/datePicker/index.d.ts +15 -15
- package/es/components/src/base/datePickerPanel/DatePickerPanel.vue.d.ts +1 -1
- package/es/components/src/base/datePickerPanel/index.d.ts +3 -3
- package/es/components/src/base/descriptions/Descriptions.vue.d.ts +1 -1
- package/es/components/src/base/descriptions/index.d.ts +3 -3
- package/es/components/src/base/descriptionsItem/DescriptionsItem.vue.d.ts +6 -6
- package/es/components/src/base/descriptionsItem/descriptionsItem.d.ts +2 -2
- package/es/components/src/base/descriptionsItem/index.d.ts +14 -14
- package/es/components/src/base/dialog/Dialog.vue.d.ts +3 -3
- package/es/components/src/base/dialog/index.d.ts +8 -8
- package/es/components/src/base/divider/Divider.vue.d.ts +3 -3
- package/es/components/src/base/divider/divider.d.ts +1 -1
- package/es/components/src/base/divider/index.d.ts +7 -7
- package/es/components/src/base/drawer/Drawer.vue.d.ts +4 -4
- package/es/components/src/base/drawer/index.d.ts +11 -11
- package/es/components/src/base/dropdown/Dropdown.vue.d.ts +7 -7
- package/es/components/src/base/dropdown/dropdown.d.ts +2 -2
- package/es/components/src/base/dropdown/index.d.ts +17 -17
- package/es/components/src/base/form/Form.vue.d.ts +1 -1
- package/es/components/src/base/form/index.d.ts +3 -3
- package/es/components/src/base/image/Image.vue.d.ts +3 -3
- package/es/components/src/base/image/index.d.ts +8 -8
- package/es/components/src/base/imageViewer/ImageViewer.vue.d.ts +2 -2
- package/es/components/src/base/imageViewer/index.d.ts +4 -4
- package/es/components/src/base/input/Input.vue.d.ts +14 -14
- package/es/components/src/base/input/index.d.ts +38 -38
- package/es/components/src/base/input/input.d.ts +1 -1
- package/es/components/src/base/inputNumber/InputNumber.vue.d.ts +12 -12
- package/es/components/src/base/inputNumber/index.d.ts +31 -31
- package/es/components/src/base/inputNumber/inputNumber.d.ts +2 -2
- package/es/components/src/base/inputTag/InputTag.vue.d.ts +6 -6
- package/es/components/src/base/inputTag/index.d.ts +17 -17
- package/es/components/src/base/link/Link.vue.d.ts +1 -1
- package/es/components/src/base/link/index.d.ts +3 -3
- package/es/components/src/base/mention/Mention.vue.d.ts +13 -13
- package/es/components/src/base/mention/index.d.ts +37 -37
- package/es/components/src/base/mention/mention.d.ts +1 -1
- package/es/components/src/base/menu/Menu.vue.d.ts +4 -4
- package/es/components/src/base/menu/index.d.ts +10 -10
- package/es/components/src/base/pagination/Pagination.vue.d.ts +1 -1
- package/es/components/src/base/pagination/index.d.ts +3 -3
- package/es/components/src/base/popconfirm/Popconfirm.vue.d.ts +8 -8
- package/es/components/src/base/popconfirm/index.d.ts +19 -19
- package/es/components/src/base/popconfirm/popconfirm.d.ts +2 -2
- package/es/components/src/base/popover/Popover.vue.d.ts +3 -3
- package/es/components/src/base/popover/index.d.ts +9 -9
- package/es/components/src/base/popper/Popper.vue.d.ts +3 -3
- package/es/components/src/base/popper/index.d.ts +7 -7
- package/es/components/src/base/popper/popper.d.ts +1 -1
- package/es/components/src/base/progress/Progress.vue.d.ts +2 -2
- package/es/components/src/base/progress/index.d.ts +6 -6
- package/es/components/src/base/radio/Radio.vue.d.ts +1 -1
- package/es/components/src/base/radio/index.d.ts +3 -3
- package/es/components/src/base/radioGroup/RadioGroup.vue.d.ts +1 -1
- package/es/components/src/base/radioGroup/index.d.ts +3 -3
- package/es/components/src/base/result/Result.vue.d.ts +1 -1
- package/es/components/src/base/result/index.d.ts +3 -3
- package/es/components/src/base/scrollbar/Scrollbar.vue.d.ts +3 -3
- package/es/components/src/base/scrollbar/index.d.ts +7 -7
- package/es/components/src/base/scrollbar/scrollbar.d.ts +1 -1
- package/es/components/src/base/segmented/Segmented.vue.d.ts +1 -1
- package/es/components/src/base/segmented/index.d.ts +3 -3
- package/es/components/src/base/select/Select.vue.d.ts +7 -7
- package/es/components/src/base/select/index.d.ts +21 -21
- package/es/components/src/base/selectV2/SelectV2.vue.d.ts +8 -8
- package/es/components/src/base/selectV2/index.d.ts +24 -24
- package/es/components/src/base/skeletonItem/SkeletonItem.vue.d.ts +3 -3
- package/es/components/src/base/skeletonItem/index.d.ts +7 -7
- package/es/components/src/base/skeletonItem/skeletonItem.d.ts +1 -1
- package/es/components/src/base/slider/Slider.vue.d.ts +2 -2
- package/es/components/src/base/slider/index.d.ts +5 -5
- package/es/components/src/base/space/Space.vue.d.ts +5 -5
- package/es/components/src/base/space/index.d.ts +13 -13
- package/es/components/src/base/space/space.d.ts +1 -1
- package/es/components/src/base/steps/Steps.vue.d.ts +1 -1
- package/es/components/src/base/steps/index.d.ts +3 -3
- package/es/components/src/base/switch/Switch.vue.d.ts +2 -2
- package/es/components/src/base/switch/index.d.ts +5 -5
- package/es/components/src/base/table/Table.vue.d.ts +5 -5
- package/es/components/src/base/table/index.d.ts +10 -10
- package/es/components/src/base/table/table.d.ts +2 -2
- package/es/components/src/base/tableColumn/TableColumn.vue.d.ts +4 -4
- package/es/components/src/base/tableColumn/index.d.ts +10 -10
- package/es/components/src/base/tableColumn/tableColumn.d.ts +1 -1
- package/es/components/src/base/tableV2/TableV2.vue.d.ts +3 -3
- package/es/components/src/base/tableV2/index.d.ts +7 -7
- package/es/components/src/base/tableV2/tableV2.d.ts +1 -1
- package/es/components/src/base/tag/Tag.vue.d.ts +3 -3
- package/es/components/src/base/tag/index.d.ts +8 -8
- package/es/components/src/base/text/Text.vue.d.ts +1 -1
- package/es/components/src/base/text/index.d.ts +3 -3
- package/es/components/src/base/timePicker/TimePicker.vue.d.ts +6 -6
- package/es/components/src/base/timePicker/index.d.ts +18 -18
- package/es/components/src/base/timeSelect/TimeSelect.vue.d.ts +6 -6
- package/es/components/src/base/timeSelect/index.d.ts +18 -18
- package/es/components/src/base/timelineItem/TimelineItem.vue.d.ts +3 -3
- package/es/components/src/base/timelineItem/index.d.ts +9 -9
- package/es/components/src/base/tooltip/Tooltip.vue.d.ts +5 -5
- package/es/components/src/base/tooltip/index.d.ts +13 -13
- package/es/components/src/base/tooltip/tooltip.d.ts +1 -1
- package/es/components/src/base/tour/Tour.vue.d.ts +1 -1
- package/es/components/src/base/tour/index.d.ts +3 -3
- package/es/components/src/base/tourStep/TourStep.vue.d.ts +1 -1
- package/es/components/src/base/tourStep/index.d.ts +3 -3
- package/es/components/src/base/treeSelect/TreeSelect.vue.d.ts +8 -8
- package/es/components/src/base/upload/Upload.vue.d.ts +6 -6
- package/es/components/src/base/upload/index.d.ts +16 -16
- package/es/components/src/base/upload/upload.d.ts +1 -1
- package/es/components/src/business/uploadItem/UploadItem.vue.d.ts +7 -7
- package/es/components/src/business/uploadItem/index.d.ts +19 -19
- package/es/components/src/business/uploadItem/uploadItem.d.ts +1 -1
- package/es/components/src/business/uploadPro/UploadPro.vue.d.ts +8 -8
- package/es/components/src/business/uploadPro/index.d.ts +22 -22
- package/es/components/src/business/uploadPro/uploadPro.d.ts +1 -1
- package/es/components/src/composite/dialogForm/DialogForm.vue.d.ts +14 -14
- package/es/components/src/composite/dialogForm/index.d.ts +40 -40
- package/es/components/src/composite/drawerForm/DrawerForm.vue.d.ts +18 -18
- package/es/components/src/composite/drawerForm/index.d.ts +52 -52
- package/es/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
- package/es/components/src/composite/fileComponent/index.d.ts +3 -3
- package/es/components/src/composite/fileList2/FileList.vue.d.ts +1 -1
- package/es/components/src/composite/fileList2/index.d.ts +3 -3
- package/es/components/src/composite/formItemModule/FormItemModule.vue.d.ts +3 -3
- package/es/components/src/composite/formItemModule/index.d.ts +3 -3
- package/es/components/src/composite/importDialog/ImportDialog.vue.d.ts +5 -5
- package/es/components/src/composite/importDialog/importDialog.d.ts +1 -1
- package/es/components/src/composite/importDialog/index.d.ts +13 -13
- package/es/components/src/composite/memoryForm/MemoryForm.vue.d.ts +1 -1
- package/es/components/src/composite/memoryForm/index.d.ts +3 -3
- package/es/components/src/composite/numberInterval/NumberInterval.vue.d.ts +1 -1
- package/es/components/src/composite/numberInterval/index.d.ts +1 -1
- package/es/components/src/composite/operateButton/OperateButton.vue.d.ts +3 -3
- package/es/components/src/composite/operateButton/index.d.ts +3 -3
- package/es/components/src/composite/operateButton/operateButton.d.ts +1 -1
- package/es/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
- package/es/components/src/composite/previewFile/index.d.ts +1 -1
- package/es/components/src/composite/ruleEditor/RuleEditor.vue.d.ts +1 -1
- package/es/components/src/composite/ruleEditor/index.d.ts +1 -1
- package/es/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +4 -4
- package/es/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +4 -4
- package/es/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +4 -4
- package/es/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +4 -4
- package/es/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +6 -6
- package/es/components/src/composite/searchForm/searchFormItems/input/index.d.ts +6 -6
- package/es/components/src/composite/searchForm/searchFormItems/numberInterval/SearchFormNumberInterval.vue.d.ts +1 -1
- package/es/components/src/composite/searchForm/searchFormItems/numberInterval/index.d.ts +1 -1
- package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +5 -5
- package/es/components/src/composite/searchForm/searchFormItems/select/index.d.ts +5 -5
- package/es/components/src/composite/searchForm/searchFormItems/selectV2/SearchFormSelectV2.vue.d.ts +5 -5
- package/es/components/src/composite/searchForm/searchFormItems/selectV2/index.d.ts +5 -5
- package/es/components/src/composite/selectOptions/SelectOptions.vue.d.ts +6 -6
- package/es/components/src/composite/selectOptions/index.d.ts +18 -18
- package/es/components/src/composite/tableCustom/TableCustom.vue.d.ts +8 -8
- package/es/components/src/composite/tableCustom/customOperate/customOperate.d.ts +1 -1
- package/es/components/src/composite/tableCustom/index.d.ts +19 -19
- package/es/components/src/composite/tableCustom/tableCustom.d.ts +2 -2
- package/es/components/src/composite/tablePro/TablePro.vue.d.ts +8 -8
- package/es/components/src/composite/tablePro/index.d.ts +19 -19
- package/es/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue.d.ts +4 -4
- package/es/components/src/composite/tablePro/tableColumnPro/index.d.ts +10 -10
- package/es/components/src/composite/tablePro/tableColumnPro/tableColumnPro.d.ts +1 -1
- package/es/components/src/composite/tablePro/tablePagination/TablePagination.vue.d.ts +2 -2
- package/es/components/src/composite/tablePro/tablePagination/index.d.ts +2 -2
- package/es/components/src/composite/tablePro/tablePro.d.ts +2 -2
- package/es/components/src/composite/uploadFile/UploadFile.vue.d.ts +9 -9
- package/es/components/src/composite/uploadFile/index.d.ts +25 -25
- package/es/components/src/composite/uploadFile/uploadFile.d.ts +1 -1
- package/es/components/src/plugins/message/method.d.ts +4 -4
- package/es/constants/key.d.ts +9 -0
- package/es/constants/key.mjs.map +1 -1
- package/es/crx/src/login/LoginPrompt.vue.d.ts +1 -1
- package/es/giime/index.mjs +1 -0
- package/es/giime/index.mjs.map +1 -1
- package/es/giime/makeInstaller.mjs +5 -0
- package/es/giime/makeInstaller.mjs.map +1 -1
- package/es/giime/version.d.ts +1 -1
- package/es/giime/version.mjs +1 -1
- package/es/giime/version.mjs.map +1 -1
- package/es/track/__tests__/reliability.test.d.ts +1 -0
- package/es/track/__tests__/track.test.d.ts +1 -0
- package/es/track/axios.d.ts +1 -0
- package/es/track/html.d.ts +1 -0
- package/es/track/index.d.ts +16 -0
- package/es/track/src/adapters/axios.d.ts +19 -0
- package/es/track/src/adapters/html.d.ts +18 -0
- package/es/track/src/adapters/vue2.d.ts +35 -0
- package/es/track/src/adapters/vue3.d.ts +69 -0
- package/es/track/src/collectors/click.d.ts +10 -0
- package/es/track/src/collectors/error.d.ts +13 -0
- package/es/track/src/collectors/exposure.d.ts +9 -0
- package/es/track/src/collectors/formAndCopy.d.ts +10 -0
- package/es/track/src/collectors/hover.d.ts +10 -0
- package/es/track/src/collectors/lifecycle.d.ts +14 -0
- package/es/track/src/collectors/scrollAndPath.d.ts +10 -0
- package/es/track/src/core/pendingStore.d.ts +7 -0
- package/es/track/src/core/queue.d.ts +68 -0
- package/es/track/src/core/session.d.ts +138 -0
- package/es/track/src/core/singleton.d.ts +49 -0
- package/es/track/src/core/tracker.d.ts +226 -0
- package/es/track/src/types/index.d.ts +351 -0
- package/es/track/src/utils/browser.d.ts +16 -0
- package/es/track/src/utils/dom.d.ts +89 -0
- package/es/track/src/utils/env.d.ts +101 -0
- package/es/track/src/utils/id.d.ts +80 -0
- package/es/track/vue2.d.ts +1 -0
- package/es/track/vue3.d.ts +1 -0
- package/es/utils/index.d.ts +1 -0
- package/es/utils/index.mjs +1 -0
- package/es/utils/index.mjs.map +1 -1
- package/es/utils/src/watermark/index.d.ts +191 -0
- package/es/utils/src/watermark/index.mjs +758 -0
- package/es/utils/src/watermark/index.mjs.map +1 -0
- package/es/watermark/__tests__/watermark.test.d.ts +1 -0
- package/es/watermark/auto.d.ts +7 -0
- package/es/watermark/index.d.ts +9 -0
- package/es/watermark/src/adapters/vue2.d.ts +18 -0
- package/es/watermark/src/adapters/vue3.d.ts +23 -0
- package/es/watermark/src/core.d.ts +148 -0
- package/es/watermark/src/iframe.d.ts +67 -0
- package/es/watermark/src/types.d.ts +182 -0
- package/es/watermark/src/user.d.ts +71 -0
- package/es/watermark/vue2.d.ts +10 -0
- package/es/watermark/vue3.d.ts +2 -0
- package/lib/components/src/base/affix/Affix.vue.d.ts +2 -2
- package/lib/components/src/base/alert/Alert.vue.d.ts +3 -3
- package/lib/components/src/base/alert/index.d.ts +8 -8
- package/lib/components/src/base/anchor/Anchor.vue.d.ts +1 -1
- package/lib/components/src/base/anchor/index.d.ts +3 -3
- package/lib/components/src/base/autocomplete/Autocomplete.vue.d.ts +11 -11
- package/lib/components/src/base/autocomplete/autocomplete.d.ts +1 -1
- package/lib/components/src/base/autocomplete/index.d.ts +30 -30
- package/lib/components/src/base/badge/Badge.vue.d.ts +1 -1
- package/lib/components/src/base/badge/index.d.ts +3 -3
- package/lib/components/src/base/button/Button.vue.d.ts +9 -9
- package/lib/components/src/base/button/button.d.ts +4 -4
- package/lib/components/src/base/button/index.d.ts +23 -23
- package/lib/components/src/base/buttonGroup/ButtonGroup.vue.d.ts +3 -3
- package/lib/components/src/base/buttonGroup/buttonGroup.d.ts +1 -1
- package/lib/components/src/base/buttonGroup/index.d.ts +7 -7
- package/lib/components/src/base/carousel/Carousel.vue.d.ts +1 -1
- package/lib/components/src/base/carousel/index.d.ts +3 -3
- package/lib/components/src/base/cascader/Cascader.vue.d.ts +6 -6
- package/lib/components/src/base/cascader/index.d.ts +18 -18
- package/lib/components/src/base/chart/Chart.vue.d.ts +2 -2
- package/lib/components/src/base/chart/index.d.ts +2 -2
- package/lib/components/src/base/checkbox/Checkbox.vue.d.ts +2 -2
- package/lib/components/src/base/checkbox/index.d.ts +6 -6
- package/lib/components/src/base/checkboxButton/CheckboxButton.vue.d.ts +2 -2
- package/lib/components/src/base/checkboxButton/index.d.ts +6 -6
- package/lib/components/src/base/col/Col.vue.d.ts +1 -1
- package/lib/components/src/base/col/index.d.ts +3 -3
- package/lib/components/src/base/collapseItem/CollapseItem.vue.d.ts +1 -1
- package/lib/components/src/base/collapseItem/index.d.ts +3 -3
- package/lib/components/src/base/colorPicker/ColorPicker.vue.d.ts +6 -6
- package/lib/components/src/base/colorPicker/index.d.ts +6 -6
- package/lib/components/src/base/colorPickerPanel/ColorPickerPanel.vue.d.ts +1 -1
- package/lib/components/src/base/colorPickerPanel/index.d.ts +1 -1
- package/lib/components/src/base/datePicker/DatePicker.vue.d.ts +5 -5
- package/lib/components/src/base/datePicker/index.d.ts +15 -15
- package/lib/components/src/base/datePickerPanel/DatePickerPanel.vue.d.ts +1 -1
- package/lib/components/src/base/datePickerPanel/index.d.ts +3 -3
- package/lib/components/src/base/descriptions/Descriptions.vue.d.ts +1 -1
- package/lib/components/src/base/descriptions/index.d.ts +3 -3
- package/lib/components/src/base/descriptionsItem/DescriptionsItem.vue.d.ts +6 -6
- package/lib/components/src/base/descriptionsItem/descriptionsItem.d.ts +2 -2
- package/lib/components/src/base/descriptionsItem/index.d.ts +14 -14
- package/lib/components/src/base/dialog/Dialog.vue.d.ts +3 -3
- package/lib/components/src/base/dialog/index.d.ts +8 -8
- package/lib/components/src/base/divider/Divider.vue.d.ts +3 -3
- package/lib/components/src/base/divider/divider.d.ts +1 -1
- package/lib/components/src/base/divider/index.d.ts +7 -7
- package/lib/components/src/base/drawer/Drawer.vue.d.ts +4 -4
- package/lib/components/src/base/drawer/index.d.ts +11 -11
- package/lib/components/src/base/dropdown/Dropdown.vue.d.ts +7 -7
- package/lib/components/src/base/dropdown/dropdown.d.ts +2 -2
- package/lib/components/src/base/dropdown/index.d.ts +17 -17
- package/lib/components/src/base/form/Form.vue.d.ts +1 -1
- package/lib/components/src/base/form/index.d.ts +3 -3
- package/lib/components/src/base/image/Image.vue.d.ts +3 -3
- package/lib/components/src/base/image/index.d.ts +8 -8
- package/lib/components/src/base/imageViewer/ImageViewer.vue.d.ts +2 -2
- package/lib/components/src/base/imageViewer/index.d.ts +4 -4
- package/lib/components/src/base/input/Input.vue.d.ts +14 -14
- package/lib/components/src/base/input/index.d.ts +38 -38
- package/lib/components/src/base/input/input.d.ts +1 -1
- package/lib/components/src/base/inputNumber/InputNumber.vue.d.ts +12 -12
- package/lib/components/src/base/inputNumber/index.d.ts +31 -31
- package/lib/components/src/base/inputNumber/inputNumber.d.ts +2 -2
- package/lib/components/src/base/inputTag/InputTag.vue.d.ts +6 -6
- package/lib/components/src/base/inputTag/index.d.ts +17 -17
- package/lib/components/src/base/link/Link.vue.d.ts +1 -1
- package/lib/components/src/base/link/index.d.ts +3 -3
- package/lib/components/src/base/mention/Mention.vue.d.ts +13 -13
- package/lib/components/src/base/mention/index.d.ts +37 -37
- package/lib/components/src/base/mention/mention.d.ts +1 -1
- package/lib/components/src/base/menu/Menu.vue.d.ts +4 -4
- package/lib/components/src/base/menu/index.d.ts +10 -10
- package/lib/components/src/base/pagination/Pagination.vue.d.ts +1 -1
- package/lib/components/src/base/pagination/index.d.ts +3 -3
- package/lib/components/src/base/popconfirm/Popconfirm.vue.d.ts +8 -8
- package/lib/components/src/base/popconfirm/index.d.ts +19 -19
- package/lib/components/src/base/popconfirm/popconfirm.d.ts +2 -2
- package/lib/components/src/base/popover/Popover.vue.d.ts +3 -3
- package/lib/components/src/base/popover/index.d.ts +9 -9
- package/lib/components/src/base/popper/Popper.vue.d.ts +3 -3
- package/lib/components/src/base/popper/index.d.ts +7 -7
- package/lib/components/src/base/popper/popper.d.ts +1 -1
- package/lib/components/src/base/progress/Progress.vue.d.ts +2 -2
- package/lib/components/src/base/progress/index.d.ts +6 -6
- package/lib/components/src/base/radio/Radio.vue.d.ts +1 -1
- package/lib/components/src/base/radio/index.d.ts +3 -3
- package/lib/components/src/base/radioGroup/RadioGroup.vue.d.ts +1 -1
- package/lib/components/src/base/radioGroup/index.d.ts +3 -3
- package/lib/components/src/base/result/Result.vue.d.ts +1 -1
- package/lib/components/src/base/result/index.d.ts +3 -3
- package/lib/components/src/base/scrollbar/Scrollbar.vue.d.ts +3 -3
- package/lib/components/src/base/scrollbar/index.d.ts +7 -7
- package/lib/components/src/base/scrollbar/scrollbar.d.ts +1 -1
- package/lib/components/src/base/segmented/Segmented.vue.d.ts +1 -1
- package/lib/components/src/base/segmented/index.d.ts +3 -3
- package/lib/components/src/base/select/Select.vue.d.ts +7 -7
- package/lib/components/src/base/select/index.d.ts +21 -21
- package/lib/components/src/base/selectV2/SelectV2.vue.d.ts +8 -8
- package/lib/components/src/base/selectV2/index.d.ts +24 -24
- package/lib/components/src/base/skeletonItem/SkeletonItem.vue.d.ts +3 -3
- package/lib/components/src/base/skeletonItem/index.d.ts +7 -7
- package/lib/components/src/base/skeletonItem/skeletonItem.d.ts +1 -1
- package/lib/components/src/base/slider/Slider.vue.d.ts +2 -2
- package/lib/components/src/base/slider/index.d.ts +5 -5
- package/lib/components/src/base/space/Space.vue.d.ts +5 -5
- package/lib/components/src/base/space/index.d.ts +13 -13
- package/lib/components/src/base/space/space.d.ts +1 -1
- package/lib/components/src/base/steps/Steps.vue.d.ts +1 -1
- package/lib/components/src/base/steps/index.d.ts +3 -3
- package/lib/components/src/base/switch/Switch.vue.d.ts +2 -2
- package/lib/components/src/base/switch/index.d.ts +5 -5
- package/lib/components/src/base/table/Table.vue.d.ts +5 -5
- package/lib/components/src/base/table/index.d.ts +10 -10
- package/lib/components/src/base/table/table.d.ts +2 -2
- package/lib/components/src/base/tableColumn/TableColumn.vue.d.ts +4 -4
- package/lib/components/src/base/tableColumn/index.d.ts +10 -10
- package/lib/components/src/base/tableColumn/tableColumn.d.ts +1 -1
- package/lib/components/src/base/tableV2/TableV2.vue.d.ts +3 -3
- package/lib/components/src/base/tableV2/index.d.ts +7 -7
- package/lib/components/src/base/tableV2/tableV2.d.ts +1 -1
- package/lib/components/src/base/tag/Tag.vue.d.ts +3 -3
- package/lib/components/src/base/tag/index.d.ts +8 -8
- package/lib/components/src/base/text/Text.vue.d.ts +1 -1
- package/lib/components/src/base/text/index.d.ts +3 -3
- package/lib/components/src/base/timePicker/TimePicker.vue.d.ts +6 -6
- package/lib/components/src/base/timePicker/index.d.ts +18 -18
- package/lib/components/src/base/timeSelect/TimeSelect.vue.d.ts +6 -6
- package/lib/components/src/base/timeSelect/index.d.ts +18 -18
- package/lib/components/src/base/timelineItem/TimelineItem.vue.d.ts +3 -3
- package/lib/components/src/base/timelineItem/index.d.ts +9 -9
- package/lib/components/src/base/tooltip/Tooltip.vue.d.ts +5 -5
- package/lib/components/src/base/tooltip/index.d.ts +13 -13
- package/lib/components/src/base/tooltip/tooltip.d.ts +1 -1
- package/lib/components/src/base/tour/Tour.vue.d.ts +1 -1
- package/lib/components/src/base/tour/index.d.ts +3 -3
- package/lib/components/src/base/tourStep/TourStep.vue.d.ts +1 -1
- package/lib/components/src/base/tourStep/index.d.ts +3 -3
- package/lib/components/src/base/treeSelect/TreeSelect.vue.d.ts +8 -8
- package/lib/components/src/base/upload/Upload.vue.d.ts +6 -6
- package/lib/components/src/base/upload/index.d.ts +16 -16
- package/lib/components/src/base/upload/upload.d.ts +1 -1
- package/lib/components/src/business/uploadItem/UploadItem.vue.d.ts +7 -7
- package/lib/components/src/business/uploadItem/index.d.ts +19 -19
- package/lib/components/src/business/uploadItem/uploadItem.d.ts +1 -1
- package/lib/components/src/business/uploadPro/UploadPro.vue.d.ts +8 -8
- package/lib/components/src/business/uploadPro/index.d.ts +22 -22
- package/lib/components/src/business/uploadPro/uploadPro.d.ts +1 -1
- package/lib/components/src/composite/dialogForm/DialogForm.vue.d.ts +14 -14
- package/lib/components/src/composite/dialogForm/index.d.ts +40 -40
- package/lib/components/src/composite/drawerForm/DrawerForm.vue.d.ts +18 -18
- package/lib/components/src/composite/drawerForm/index.d.ts +52 -52
- package/lib/components/src/composite/fileComponent/FileComponent.vue.d.ts +1 -1
- package/lib/components/src/composite/fileComponent/index.d.ts +3 -3
- package/lib/components/src/composite/fileList2/FileList.vue.d.ts +1 -1
- package/lib/components/src/composite/fileList2/index.d.ts +3 -3
- package/lib/components/src/composite/formItemModule/FormItemModule.vue.d.ts +3 -3
- package/lib/components/src/composite/formItemModule/index.d.ts +3 -3
- package/lib/components/src/composite/importDialog/ImportDialog.vue.d.ts +5 -5
- package/lib/components/src/composite/importDialog/importDialog.d.ts +1 -1
- package/lib/components/src/composite/importDialog/index.d.ts +13 -13
- package/lib/components/src/composite/memoryForm/MemoryForm.vue.d.ts +1 -1
- package/lib/components/src/composite/memoryForm/index.d.ts +3 -3
- package/lib/components/src/composite/numberInterval/NumberInterval.vue.d.ts +1 -1
- package/lib/components/src/composite/numberInterval/index.d.ts +1 -1
- package/lib/components/src/composite/operateButton/OperateButton.vue.d.ts +3 -3
- package/lib/components/src/composite/operateButton/index.d.ts +3 -3
- package/lib/components/src/composite/operateButton/operateButton.d.ts +1 -1
- package/lib/components/src/composite/previewFile/PreviewFile.vue.d.ts +1 -1
- package/lib/components/src/composite/previewFile/index.d.ts +1 -1
- package/lib/components/src/composite/ruleEditor/RuleEditor.vue.d.ts +1 -1
- package/lib/components/src/composite/ruleEditor/index.d.ts +1 -1
- package/lib/components/src/composite/searchForm/searchFormItems/cascader/SearchFormCascader.vue.d.ts +4 -4
- package/lib/components/src/composite/searchForm/searchFormItems/cascader/index.d.ts +4 -4
- package/lib/components/src/composite/searchForm/searchFormItems/datePicker/SearchFormDatePicker.vue.d.ts +4 -4
- package/lib/components/src/composite/searchForm/searchFormItems/datePicker/index.d.ts +4 -4
- package/lib/components/src/composite/searchForm/searchFormItems/input/SearchFormInput.vue.d.ts +6 -6
- package/lib/components/src/composite/searchForm/searchFormItems/input/index.d.ts +6 -6
- package/lib/components/src/composite/searchForm/searchFormItems/numberInterval/SearchFormNumberInterval.vue.d.ts +1 -1
- package/lib/components/src/composite/searchForm/searchFormItems/numberInterval/index.d.ts +1 -1
- package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +5 -5
- package/lib/components/src/composite/searchForm/searchFormItems/select/index.d.ts +5 -5
- package/lib/components/src/composite/searchForm/searchFormItems/selectV2/SearchFormSelectV2.vue.d.ts +5 -5
- package/lib/components/src/composite/searchForm/searchFormItems/selectV2/index.d.ts +5 -5
- package/lib/components/src/composite/selectOptions/SelectOptions.vue.d.ts +6 -6
- package/lib/components/src/composite/selectOptions/index.d.ts +18 -18
- package/lib/components/src/composite/tableCustom/TableCustom.vue.d.ts +8 -8
- package/lib/components/src/composite/tableCustom/customOperate/customOperate.d.ts +1 -1
- package/lib/components/src/composite/tableCustom/index.d.ts +19 -19
- package/lib/components/src/composite/tableCustom/tableCustom.d.ts +2 -2
- package/lib/components/src/composite/tablePro/TablePro.vue.d.ts +8 -8
- package/lib/components/src/composite/tablePro/index.d.ts +19 -19
- package/lib/components/src/composite/tablePro/tableColumnPro/TableColumnPro.vue.d.ts +4 -4
- package/lib/components/src/composite/tablePro/tableColumnPro/index.d.ts +10 -10
- package/lib/components/src/composite/tablePro/tableColumnPro/tableColumnPro.d.ts +1 -1
- package/lib/components/src/composite/tablePro/tablePagination/TablePagination.vue.d.ts +2 -2
- package/lib/components/src/composite/tablePro/tablePagination/index.d.ts +2 -2
- package/lib/components/src/composite/tablePro/tablePro.d.ts +2 -2
- package/lib/components/src/composite/uploadFile/UploadFile.vue.d.ts +9 -9
- package/lib/components/src/composite/uploadFile/index.d.ts +25 -25
- package/lib/components/src/composite/uploadFile/uploadFile.d.ts +1 -1
- package/lib/components/src/plugins/message/method.d.ts +4 -4
- package/lib/constants/key.d.ts +9 -0
- package/lib/constants/key.js.map +1 -1
- package/lib/crx/src/login/LoginPrompt.vue.d.ts +1 -1
- package/lib/giime/index.js +404 -385
- package/lib/giime/index.js.map +1 -1
- package/lib/giime/makeInstaller.js +5 -0
- package/lib/giime/makeInstaller.js.map +1 -1
- package/lib/giime/version.d.ts +1 -1
- package/lib/giime/version.js +1 -1
- package/lib/giime/version.js.map +1 -1
- package/lib/track/__tests__/reliability.test.d.ts +1 -0
- package/lib/track/__tests__/track.test.d.ts +1 -0
- package/lib/track/axios.d.ts +1 -0
- package/lib/track/html.d.ts +1 -0
- package/lib/track/index.d.ts +16 -0
- package/lib/track/src/adapters/axios.d.ts +19 -0
- package/lib/track/src/adapters/html.d.ts +18 -0
- package/lib/track/src/adapters/vue2.d.ts +35 -0
- package/lib/track/src/adapters/vue3.d.ts +69 -0
- package/lib/track/src/collectors/click.d.ts +10 -0
- package/lib/track/src/collectors/error.d.ts +13 -0
- package/lib/track/src/collectors/exposure.d.ts +9 -0
- package/lib/track/src/collectors/formAndCopy.d.ts +10 -0
- package/lib/track/src/collectors/hover.d.ts +10 -0
- package/lib/track/src/collectors/lifecycle.d.ts +14 -0
- package/lib/track/src/collectors/scrollAndPath.d.ts +10 -0
- package/lib/track/src/core/pendingStore.d.ts +7 -0
- package/lib/track/src/core/queue.d.ts +68 -0
- package/lib/track/src/core/session.d.ts +138 -0
- package/lib/track/src/core/singleton.d.ts +49 -0
- package/lib/track/src/core/tracker.d.ts +226 -0
- package/lib/track/src/types/index.d.ts +351 -0
- package/lib/track/src/utils/browser.d.ts +16 -0
- package/lib/track/src/utils/dom.d.ts +89 -0
- package/lib/track/src/utils/env.d.ts +101 -0
- package/lib/track/src/utils/id.d.ts +80 -0
- package/lib/track/vue2.d.ts +1 -0
- package/lib/track/vue3.d.ts +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +19 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/src/watermark/index.d.ts +191 -0
- package/lib/utils/src/watermark/index.js +777 -0
- package/lib/utils/src/watermark/index.js.map +1 -0
- package/lib/watermark/__tests__/watermark.test.d.ts +1 -0
- package/lib/watermark/auto.d.ts +7 -0
- package/lib/watermark/index.d.ts +9 -0
- package/lib/watermark/src/adapters/vue2.d.ts +18 -0
- package/lib/watermark/src/adapters/vue3.d.ts +23 -0
- package/lib/watermark/src/core.d.ts +148 -0
- package/lib/watermark/src/iframe.d.ts +67 -0
- package/lib/watermark/src/types.d.ts +182 -0
- package/lib/watermark/src/user.d.ts +71 -0
- package/lib/watermark/vue2.d.ts +10 -0
- package/lib/watermark/vue3.d.ts +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/utils/src/watermark/index.ts"],"sourcesContent":["/**\n * @file Giime (Vue 3) 内置智能水印模块 (@giime/utils/src/watermark)\n * @description\n * 面向 acore-front 等 Vue 3 项目的内置水印引擎(由 `app.use(Giime, ...)` 自动挂载,也可通过 `import { Watermark, initWatermark, useWatermark } from 'giime'` 手动控制):\n * 1. 智能感知窗口嵌套与父级水印状态(默认策略 `'ancestor-detect'`):\n * - 单独打开前端页面(`window.self === window.top`):直接展示全屏水印;\n * - 在 GSMP 综合管理平台或已带水印的外层页面中通过 iframe 打开时:检测到外层已有水印(同源检测 `#__giime_watermark__` / 老版 `.mask_div`,或跨源 `postMessage` 握手收到 `pong` / `suppress`),自动隐藏内部水印;\n * - 单独打开一个**未接入水印**的外层前端页面,其内部通过 iframe 嵌套本页面时:检测到外层无水印,本页面在 iframe 内**自动兜底展示水印**;\n * 2. 防 Cookie 篡改用户身份识别(参考 `Clarity`):\n * - 直接从 `useCurrentUserStore()`(底层调用 `/guard/basic/v1/user/getCurrentUser` 校验 JWT `token`)读取服务端认证的真实 `userInfo.id`,绝不读取易被用户在控制台修改的 `sso_user_id` Cookie;\n * 3. 视觉样式(#aaa、0.1 透明度、-20deg 逆时针倾斜、15px 微软雅黑、210×80 尺寸及自适应间距)与旧版完全一致。\n */\n\nimport { watch } from 'vue';\nimport { until } from '@vueuse/core';\nimport Cookies from 'js-cookie';\nimport { useLoginStore } from '@giime/hooks/store/useLogin';\nimport { useCurrentUserStore } from '@giime/hooks/store/userCenter/useCurrentUser';\n\nexport type WatermarkIframeStrategy = 'ancestor-detect' | 'top-only' | 'always' | 'never';\n\nexport interface WatermarkFormatContext {\n userId: string;\n date: string;\n prefix: string;\n}\n\nexport interface WatermarkOptions {\n /** 是否启用水印(默认 true) */\n enabled?: boolean;\n /**\n * Iframe 嵌套处理策略(默认 `'ancestor-detect'`)\n * - `'ancestor-detect'`(默认):同源向上检测 `#__giime_watermark__` / `.mask_div` + 跨源 postMessage 握手探测父级是否有水印;若外层有水印则隐藏,若外层未接入水印则子 iframe 自动兜底展示水印\n * - `'top-only'`:仅顶层窗口渲染水印,任意处于 iframe 内的页面一律隐藏\n * - `'always'`:强制始终渲染\n * - `'never'`:禁用并销毁\n */\n iframeStrategy?: WatermarkIframeStrategy;\n /** `'ancestor-detect'` 模式下跨源握手等待超时毫秒数(默认 120) */\n detectTimeoutMs?: number;\n /** 水印品牌前缀(默认 '吉客印') */\n prefix?: string;\n /** 显式指定用户 ID(不传则自动从 `useCurrentUserStore().userInfo.id` 读取) */\n userId?: string | number;\n /** 自定义动态获取用户 ID 的函数 */\n getUserId?: () => string | number | undefined | null;\n /** 自定义水印文本或格式化函数(默认生成 `吉客印-${userId}-${YYYY年MM月DD日}`) */\n text?: string | ((ctx: WatermarkFormatContext) => string);\n /** 水印起始位置 X 轴坐标(默认 20) */\n x?: number;\n /** 水印起始位置 Y 轴坐标(默认 20) */\n y?: number;\n /** 水印行数(默认 20) */\n rows?: number;\n /** 水印列数(默认 20) */\n cols?: number;\n /** 水印 X 轴间隔(默认 100) */\n xSpace?: number;\n /** 水印 Y 轴间隔(默认 50) */\n ySpace?: number;\n /** 水印字体颜色(默认 '#aaa') */\n color?: string;\n /** 水印透明度(默认 0.1) */\n alpha?: number;\n /** 水印字体大小(默认 '15px') */\n fontSize?: string;\n /** 水印字体(默认 '微软雅黑') */\n font?: string;\n /** 单个水印块宽度(默认 210) */\n width?: number;\n /** 单个水印块高度(默认 80) */\n height?: number;\n /** 水印倾斜角度度数(默认 20) */\n angle?: number;\n /** 水印容器层级 z-index(默认 9999) */\n zIndex?: number;\n /** 是否开启 MutationObserver 防篡改保护(默认 true) */\n antiTamper?: boolean;\n /** 是否监听窗口 resize 自动重排(默认 true) */\n watchResize?: boolean;\n /** 是否自动清理页面上遗留的老版裸 `.mask_div` 节点(默认 true) */\n cleanLegacyMask?: boolean;\n}\n\nexport interface NormalizedWatermarkConfig {\n enabled: boolean;\n iframeStrategy: WatermarkIframeStrategy;\n detectTimeoutMs: number;\n prefix: string;\n userId?: string | number;\n getUserId?: () => string | number | undefined | null;\n text?: string | ((ctx: WatermarkFormatContext) => string);\n x: number;\n y: number;\n rows: number;\n cols: number;\n xSpace: number;\n ySpace: number;\n color: string;\n alpha: number;\n fontSize: string;\n font: string;\n width: number;\n height: number;\n angle: number;\n zIndex: number;\n antiTamper: boolean;\n watchResize: boolean;\n cleanLegacyMask: boolean;\n}\n\nexport interface WatermarkState {\n inIframe: boolean;\n active: boolean;\n reason:\n | 'rendered-top'\n | 'rendered-forced'\n | 'rendered-fallback'\n | 'suppressed-in-iframe'\n | 'suppressed-by-ancestor'\n | 'disabled'\n | 'ssr';\n text: string;\n userId: string;\n rows: number;\n cols: number;\n}\n\nexport const GIIME_WATERMARK_GLOBAL_SYMBOL = Symbol.for('__giime.watermark.singleton__');\n\nexport const WATERMARK_MESSAGE_TYPES = {\n PING: 'giime-watermark:ping',\n PONG: 'giime-watermark:pong',\n SUPPRESS: 'giime-watermark:suppress',\n} as const;\n\nexport const WATERMARK_DOM_CONSTANTS = {\n CONTAINER_ID: '__giime_watermark__',\n CONTAINER_CLASS: 'giime-watermark-container',\n LEGACY_ITEM_CLASS: 'mask_div',\n ROOT_ATTR: 'data-giime-watermark',\n} as const;\n\nexport const sanitizeUserId = (raw: unknown): string => {\n if (raw === undefined || raw === null) {\n return '';\n }\n const str = String(raw).trim();\n if (!str || str === 'undefined' || str === 'null' || str === 'NaN') {\n return '';\n }\n return str;\n};\n\n/**\n * 闭包保存由 useCurrentUserStore 从服务端拉取到的真实用户 ID\n */\nlet storeVerifiedUserId = '';\n\n/**\n * 解析当前用户 ID:\n * 1. 优先显式配置\n * 2. 若 useCurrentUserStore 已返回服务端真实用户 ID,则优先使用\n * 3. 默认首屏先读 Cookie `sso_user_id`(0ms 同步直出不闪烁,随后由 useCurrentUserStore 静默比对纠偏)\n */\nexport const resolveWatermarkUserId = (\n config?: Pick<NormalizedWatermarkConfig, 'userId' | 'getUserId'>,\n): string => {\n if (config?.getUserId) {\n try {\n const customId = sanitizeUserId(config.getUserId());\n if (customId) {\n return customId;\n }\n } catch {\n // ignore\n }\n }\n\n const explicitId = sanitizeUserId(config?.userId);\n if (explicitId) {\n return explicitId;\n }\n\n if (storeVerifiedUserId) {\n return storeVerifiedUserId;\n }\n\n return sanitizeUserId(Cookies.get('sso_user_id'));\n};\n\nexport const formatWatermarkDate = (date: Date = new Date()): string => {\n const year = date.getFullYear();\n const monthNum = date.getMonth() + 1;\n const dayNum = date.getDate();\n const month = monthNum < 10 ? `0${monthNum}` : String(monthNum);\n const day = dayNum < 10 ? `0${dayNum}` : String(dayNum);\n return `${year}年${month}月${day}日`;\n};\n\nexport const buildWatermarkText = (\n config: Pick<NormalizedWatermarkConfig, 'prefix' | 'text' | 'userId' | 'getUserId'>,\n resolvedUserId?: string,\n dateStr: string = formatWatermarkDate(),\n): string => {\n const userId = resolvedUserId !== undefined ? sanitizeUserId(resolvedUserId) : resolveWatermarkUserId(config);\n const prefix = config.prefix || '吉客印';\n\n if (typeof config.text === 'function') {\n return config.text({ userId, date: dateStr, prefix });\n }\n if (typeof config.text === 'string' && config.text.trim()) {\n return config.text.trim();\n }\n\n return userId ? `${prefix}-${userId}-${dateStr}` : `${prefix}-${dateStr}`;\n};\n\nexport const isInIframe = (win?: Window): boolean => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin) {\n return false;\n }\n try {\n return targetWin.self !== targetWin.top;\n } catch {\n return true;\n }\n};\n\nexport const inspectSameOriginAncestors = (\n win?: Window,\n): {\n hasWatermark: boolean;\n allAncestorsAccessible: boolean;\n} => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin || !isInIframe(targetWin)) {\n return { hasWatermark: false, allAncestorsAccessible: true };\n }\n\n let current: Window | null = targetWin;\n let depth = 0;\n let allAncestorsAccessible = true;\n\n while (current && depth < 15) {\n depth++;\n let parentWin: Window | null = null;\n try {\n parentWin = current.parent;\n } catch {\n allAncestorsAccessible = false;\n break;\n }\n if (!parentWin || parentWin === current) {\n break;\n }\n\n try {\n const anyParent = parentWin as any;\n if (anyParent.__GIIME_WATERMARK_ACTIVE__ === true) {\n return { hasWatermark: true, allAncestorsAccessible };\n }\n const parentDoc = parentWin.document;\n if (parentDoc) {\n if (\n parentDoc.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID) ||\n parentDoc.documentElement?.getAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR) === 'active' ||\n parentDoc.querySelector(`.${WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS}`)\n ) {\n return { hasWatermark: true, allAncestorsAccessible };\n }\n } else {\n allAncestorsAccessible = false;\n }\n } catch {\n allAncestorsAccessible = false;\n }\n\n try {\n if (parentWin === targetWin.top) {\n break;\n }\n } catch {\n allAncestorsAccessible = false;\n break;\n }\n current = parentWin;\n }\n\n return { hasWatermark: false, allAncestorsAccessible };\n};\n\nexport const hasSameOriginAncestorWatermark = (win?: Window): boolean => {\n return inspectSameOriginAncestors(win).hasWatermark;\n};\n\nexport const shouldRenderWatermark = (\n strategy: WatermarkIframeStrategy = 'ancestor-detect',\n win?: Window,\n): {\n shouldRender: boolean;\n inIframe: boolean;\n needsAsyncDetect: boolean;\n reason: WatermarkState['reason'];\n} => {\n const targetWin = win ?? (typeof window !== 'undefined' ? window : undefined);\n if (!targetWin || typeof document === 'undefined') {\n return { shouldRender: false, inIframe: false, needsAsyncDetect: false, reason: 'ssr' };\n }\n\n if (strategy === 'never') {\n return { shouldRender: false, inIframe: isInIframe(targetWin), needsAsyncDetect: false, reason: 'disabled' };\n }\n\n const inIframe = isInIframe(targetWin);\n\n if (strategy === 'always') {\n return {\n shouldRender: true,\n inIframe,\n needsAsyncDetect: false,\n reason: inIframe ? 'rendered-forced' : 'rendered-top',\n };\n }\n\n if (!inIframe) {\n return {\n shouldRender: true,\n inIframe: false,\n needsAsyncDetect: false,\n reason: 'rendered-top',\n };\n }\n\n if (strategy === 'top-only') {\n return {\n shouldRender: false,\n inIframe: true,\n needsAsyncDetect: false,\n reason: 'suppressed-in-iframe',\n };\n }\n\n const { hasWatermark, allAncestorsAccessible } = inspectSameOriginAncestors(targetWin);\n if (hasWatermark) {\n return {\n shouldRender: false,\n inIframe: true,\n needsAsyncDetect: false,\n reason: 'suppressed-by-ancestor',\n };\n }\n\n return {\n shouldRender: true,\n inIframe: true,\n needsAsyncDetect: !allAncestorsAccessible,\n reason: 'rendered-fallback',\n };\n};\n\nconst broadcastSuppressToChildFrames = (text: string): void => {\n if (typeof document === 'undefined') {\n return;\n }\n try {\n const iframes = document.querySelectorAll('iframe');\n const message = {\n type: WATERMARK_MESSAGE_TYPES.SUPPRESS,\n active: true,\n text,\n };\n iframes.forEach(iframe => {\n try {\n iframe.contentWindow?.postMessage(message, '*');\n } catch {\n // ignore\n }\n });\n } catch {\n // ignore\n }\n};\n\nconst detectAncestorWatermarkAsync = (timeoutMs = 120): Promise<boolean> => {\n if (typeof window === 'undefined' || !isInIframe(window)) {\n return Promise.resolve(false);\n }\n const { hasWatermark, allAncestorsAccessible } = inspectSameOriginAncestors(window);\n if (hasWatermark) {\n return Promise.resolve(true);\n }\n if (allAncestorsAccessible) {\n return Promise.resolve(false);\n }\n\n return new Promise<boolean>(resolve => {\n let settled = false;\n const finish = (hasAncestor: boolean) => {\n if (settled) return;\n settled = true;\n window.removeEventListener('message', onMessage);\n clearTimeout(timer);\n resolve(hasAncestor);\n };\n\n const onMessage = (event: MessageEvent) => {\n const data = event?.data;\n if (\n data &&\n typeof data === 'object' &&\n (data.type === WATERMARK_MESSAGE_TYPES.PONG || data.type === WATERMARK_MESSAGE_TYPES.SUPPRESS) &&\n data.active !== false\n ) {\n finish(true);\n }\n };\n\n window.addEventListener('message', onMessage);\n const timer = setTimeout(() => finish(false), Math.max(20, timeoutMs));\n\n const pingPayload = { type: WATERMARK_MESSAGE_TYPES.PING, timestamp: Date.now() };\n try {\n window.parent?.postMessage(pingPayload, '*');\n } catch {\n // ignore\n }\n try {\n if (window.top && window.top !== window.parent) {\n window.top.postMessage(pingPayload, '*');\n }\n } catch {\n // ignore\n }\n });\n};\n\nconst normalizeWatermarkOptions = (\n options: WatermarkOptions = {},\n base?: NormalizedWatermarkConfig,\n): NormalizedWatermarkConfig => {\n return {\n enabled: options.enabled ?? base?.enabled ?? true,\n iframeStrategy: options.iframeStrategy ?? base?.iframeStrategy ?? 'ancestor-detect',\n detectTimeoutMs: options.detectTimeoutMs ?? base?.detectTimeoutMs ?? 120,\n prefix: options.prefix ?? base?.prefix ?? '吉客印',\n userId: options.userId !== undefined ? options.userId : base?.userId,\n getUserId: options.getUserId ?? base?.getUserId,\n text: options.text ?? base?.text,\n x: options.x ?? base?.x ?? 20,\n y: options.y ?? base?.y ?? 20,\n rows: options.rows ?? base?.rows ?? 20,\n cols: options.cols ?? base?.cols ?? 20,\n xSpace: options.xSpace ?? base?.xSpace ?? 100,\n ySpace: options.ySpace ?? base?.ySpace ?? 50,\n color: options.color ?? base?.color ?? '#aaa',\n alpha: options.alpha ?? base?.alpha ?? 0.1,\n fontSize: options.fontSize ?? base?.fontSize ?? '15px',\n font: options.font ?? base?.font ?? '微软雅黑',\n width: options.width ?? base?.width ?? 210,\n height: options.height ?? base?.height ?? 80,\n angle: options.angle ?? base?.angle ?? 20,\n zIndex: options.zIndex ?? base?.zIndex ?? 9999,\n antiTamper: options.antiTamper ?? base?.antiTamper ?? true,\n watchResize: options.watchResize ?? base?.watchResize ?? true,\n cleanLegacyMask: options.cleanLegacyMask ?? base?.cleanLegacyMask ?? true,\n };\n};\n\nconst calculateWatermarkGrid = (\n config: NormalizedWatermarkConfig,\n viewportWidth: number,\n viewportHeight: number,\n) => {\n const cutWidth = viewportWidth * 0.015;\n const pageWidth = Math.max(320, viewportWidth - cutWidth);\n const pageHeight = Math.max(viewportHeight + 450, window.innerHeight ? window.innerHeight - 40 : 720);\n\n let cols = config.cols;\n let xSpace = config.xSpace;\n let rows = config.rows;\n let ySpace = config.ySpace;\n\n const totalConfigWidth = Math.trunc(config.x + config.width * cols + xSpace * (cols - 1));\n if (cols === 0 || totalConfigWidth > pageWidth) {\n cols = Math.max(1, Math.trunc((pageWidth - config.x + xSpace) / (config.width + xSpace)));\n xSpace = cols > 1 ? Math.max(0, Math.trunc((pageWidth - config.x - config.width * cols) / (cols - 1))) : 0;\n }\n\n const totalConfigHeight = Math.trunc(config.y + config.height * rows + ySpace * (rows - 1));\n if (rows === 0 || totalConfigHeight > pageHeight) {\n rows = Math.max(1, Math.trunc((ySpace + pageHeight - config.y) / (config.height + ySpace)));\n ySpace = rows > 1 ? Math.max(0, Math.trunc((pageHeight - config.y - config.height * rows) / (rows - 1))) : 0;\n }\n\n return { cols, rows, xSpace, ySpace };\n};\n\nconst removeLegacyBodyMasks = (): void => {\n if (typeof document === 'undefined' || !document.body) {\n return;\n }\n const legacyNodes = document.body.querySelectorAll(`:scope > .${WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS}`);\n legacyNodes.forEach(node => {\n node.parentNode?.removeChild(node);\n });\n};\n\nexport class GiimeWatermark {\n private config: NormalizedWatermarkConfig;\n private state: WatermarkState;\n private containerEl: HTMLDivElement | null = null;\n private mutationObserver: MutationObserver | null = null;\n private resizeTimer: ReturnType<typeof setTimeout> | null = null;\n private isRenderingInternal = false;\n private listenersAttached = false;\n private domReadyListenerAttached = false;\n\n private readonly handleWindowResize = (): void => {\n if (!this.state.active || !this.config.watchResize) {\n return;\n }\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n this.resizeTimer = setTimeout(() => {\n this.render();\n }, 150);\n };\n\n private readonly handleWindowMessage = (event: MessageEvent): void => {\n const data = event?.data;\n if (!data || typeof data !== 'object') {\n return;\n }\n\n if (data.type === WATERMARK_MESSAGE_TYPES.PING && this.state.active) {\n try {\n const sourceWin = event.source as Window | null;\n sourceWin?.postMessage(\n {\n type: WATERMARK_MESSAGE_TYPES.PONG,\n active: true,\n text: this.state.text,\n },\n '*',\n );\n } catch {\n // ignore\n }\n return;\n }\n\n if (\n (data.type === WATERMARK_MESSAGE_TYPES.SUPPRESS || data.type === WATERMARK_MESSAGE_TYPES.PONG) &&\n data.active !== false &&\n isInIframe() &&\n this.config.iframeStrategy !== 'always'\n ) {\n this.suppressWatermark('suppressed-by-ancestor');\n }\n };\n\n constructor(options?: WatermarkOptions) {\n this.config = normalizeWatermarkOptions(options);\n this.state = {\n inIframe: isInIframe(),\n active: false,\n reason: 'disabled',\n text: '',\n userId: '',\n rows: 0,\n cols: 0,\n };\n this.bootstrap();\n }\n\n private bootstrap(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n this.state.reason = 'ssr';\n return;\n }\n\n this.attachGlobalListeners();\n\n if (!this.config.enabled) {\n this.suppressWatermark('disabled');\n return;\n }\n\n const decision = shouldRenderWatermark(this.config.iframeStrategy);\n this.state.inIframe = decision.inIframe;\n\n if (!decision.shouldRender) {\n this.suppressWatermark(\n decision.reason as 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled',\n );\n return;\n }\n\n if (this.config.iframeStrategy === 'ancestor-detect' && decision.inIframe && decision.needsAsyncDetect) {\n detectAncestorWatermarkAsync(this.config.detectTimeoutMs).then(hasAncestor => {\n if (!this.config.enabled) {\n return;\n }\n if (hasAncestor) {\n this.suppressWatermark('suppressed-by-ancestor');\n } else {\n this.activateWatermark('rendered-fallback');\n }\n });\n return;\n }\n\n this.activateWatermark(decision.reason as 'rendered-top' | 'rendered-forced' | 'rendered-fallback');\n }\n\n private activateWatermark(reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback'): void {\n this.state.reason = reason;\n this.state.active = true;\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK_ACTIVE__ = true;\n }\n if (typeof document !== 'undefined' && document.documentElement) {\n document.documentElement.setAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR, 'active');\n }\n\n if (typeof document !== 'undefined' && !document.body) {\n if (!this.domReadyListenerAttached) {\n this.domReadyListenerAttached = true;\n window.addEventListener(\n 'DOMContentLoaded',\n () => {\n this.domReadyListenerAttached = false;\n if (this.state.active) {\n this.render();\n }\n },\n { once: true },\n );\n }\n return;\n }\n\n this.render();\n }\n\n private suppressWatermark(reason: 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled'): void {\n this.state.active = false;\n this.state.reason = reason;\n this.state.rows = 0;\n this.state.cols = 0;\n this.stopMutationObserver();\n\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK_ACTIVE__ = false;\n }\n if (typeof document !== 'undefined') {\n document.documentElement?.setAttribute(WATERMARK_DOM_CONSTANTS.ROOT_ATTR, reason);\n if (this.config.cleanLegacyMask) {\n removeLegacyBodyMasks();\n }\n const existing = document.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID);\n existing?.parentNode?.removeChild(existing);\n }\n this.containerEl = null;\n }\n\n public render(): void {\n if (typeof window === 'undefined' || typeof document === 'undefined' || !document.body) {\n return;\n }\n if (!this.state.active) {\n return;\n }\n\n this.isRenderingInternal = true;\n this.stopMutationObserver();\n\n try {\n if (this.config.cleanLegacyMask) {\n removeLegacyBodyMasks();\n }\n\n const resolvedUserId = resolveWatermarkUserId(this.config);\n const dateStr = formatWatermarkDate();\n const watermarkText = buildWatermarkText(this.config, resolvedUserId, dateStr);\n\n this.state.userId = resolvedUserId;\n this.state.text = watermarkText;\n\n const viewportWidth = Math.max(\n window.innerWidth || 0,\n document.documentElement?.clientWidth || 0,\n document.body.clientWidth || 0,\n 1024,\n );\n const viewportHeight = Math.max(\n window.innerHeight || 0,\n document.documentElement?.clientHeight || 0,\n 768,\n );\n\n const { cols, rows, xSpace, ySpace } = calculateWatermarkGrid(this.config, viewportWidth, viewportHeight);\n\n this.state.cols = cols;\n this.state.rows = rows;\n\n let container = document.getElementById(WATERMARK_DOM_CONSTANTS.CONTAINER_ID) as HTMLDivElement | null;\n\n if (!container) {\n container = document.createElement('div');\n container.id = WATERMARK_DOM_CONSTANTS.CONTAINER_ID;\n container.className = WATERMARK_DOM_CONSTANTS.CONTAINER_CLASS;\n container.setAttribute('data-giime-watermark-container', 'true');\n container.setAttribute('aria-hidden', 'true');\n document.body.appendChild(container);\n }\n\n container.setAttribute(\n 'style',\n [\n 'position: fixed !important',\n 'top: 0px !important',\n 'left: 0px !important',\n 'width: 100vw !important',\n 'height: 100vh !important',\n 'overflow: hidden !important',\n 'pointer-events: none !important',\n 'user-select: none !important',\n '-webkit-user-select: none !important',\n `z-index: ${this.config.zIndex} !important`,\n 'display: block !important',\n 'visibility: visible !important',\n 'opacity: 1 !important',\n 'background: transparent !important',\n ].join('; '),\n );\n\n const fragment = document.createDocumentFragment();\n const rotateStr = `rotate(-${this.config.angle}deg)`;\n\n for (let i = 0; i < rows; i++) {\n const y = this.config.y + (ySpace + this.config.height) * i;\n for (let j = 0; j < cols; j++) {\n const x = this.config.x + (this.config.width + xSpace) * j;\n const maskDiv = document.createElement('div');\n maskDiv.id = `mask_div${i}${j}`;\n maskDiv.className = WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS;\n maskDiv.appendChild(document.createTextNode(watermarkText));\n maskDiv.style.webkitTransform = rotateStr;\n (maskDiv.style as any).MozTransform = rotateStr;\n (maskDiv.style as any).msTransform = rotateStr;\n (maskDiv.style as any).OTransform = rotateStr;\n maskDiv.style.transform = rotateStr;\n maskDiv.style.visibility = '';\n maskDiv.style.position = 'absolute';\n maskDiv.style.left = `${x}px`;\n maskDiv.style.top = `${y}px`;\n maskDiv.style.overflow = 'hidden';\n maskDiv.style.zIndex = String(this.config.zIndex);\n maskDiv.style.pointerEvents = 'none';\n maskDiv.style.opacity = String(this.config.alpha);\n maskDiv.style.fontSize = this.config.fontSize;\n maskDiv.style.fontFamily =\n /^['\"]/.test(this.config.font) || this.config.font.includes(',')\n ? this.config.font\n : `\"${this.config.font}\"`;\n maskDiv.style.color = this.config.color;\n maskDiv.style.textAlign = 'center';\n maskDiv.style.width = `${this.config.width}px`;\n maskDiv.style.height = `${this.config.height}px`;\n maskDiv.style.display = 'block';\n fragment.appendChild(maskDiv);\n }\n }\n\n container.innerHTML = '';\n container.appendChild(fragment);\n this.containerEl = container;\n\n broadcastSuppressToChildFrames(watermarkText);\n } finally {\n this.isRenderingInternal = false;\n if (this.config.antiTamper && this.state.active) {\n this.startMutationObserver();\n }\n }\n }\n\n private startMutationObserver(): void {\n if (\n typeof MutationObserver === 'undefined' ||\n typeof document === 'undefined' ||\n !document.body ||\n this.mutationObserver\n ) {\n return;\n }\n\n this.mutationObserver = new MutationObserver(mutations => {\n if (this.isRenderingInternal || !this.state.active) {\n return;\n }\n\n let needRestore = false;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const added = Array.from(mutation.addedNodes);\n for (const node of added) {\n const el = node as HTMLElement | null;\n if (el?.tagName === 'IFRAME') {\n el.addEventListener(\n 'load',\n () => {\n if (this.state.active) {\n broadcastSuppressToChildFrames(this.state.text);\n }\n },\n { once: true },\n );\n }\n }\n\n const removed = Array.from(mutation.removedNodes);\n if (\n removed.some(\n node =>\n node === this.containerEl ||\n (node as HTMLElement)?.id === WATERMARK_DOM_CONSTANTS.CONTAINER_ID ||\n (node as HTMLElement)?.classList?.contains(WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS),\n )\n ) {\n needRestore = true;\n break;\n }\n }\n if (mutation.type === 'attributes') {\n const targetEl = mutation.target as HTMLElement | null;\n if (\n targetEl === this.containerEl ||\n targetEl?.id === WATERMARK_DOM_CONSTANTS.CONTAINER_ID ||\n targetEl?.classList?.contains(WATERMARK_DOM_CONSTANTS.LEGACY_ITEM_CLASS)\n ) {\n needRestore = true;\n break;\n }\n }\n }\n\n if (needRestore) {\n this.render();\n }\n });\n\n this.mutationObserver.observe(document.body, { childList: true });\n if (this.containerEl) {\n this.mutationObserver.observe(this.containerEl, {\n attributes: true,\n attributeFilter: ['style', 'class', 'id', 'hidden'],\n childList: true,\n subtree: true,\n });\n }\n }\n\n private stopMutationObserver(): void {\n if (this.mutationObserver) {\n this.mutationObserver.disconnect();\n this.mutationObserver = null;\n }\n }\n\n private attachGlobalListeners(): void {\n if (this.listenersAttached || typeof window === 'undefined') {\n return;\n }\n this.listenersAttached = true;\n window.addEventListener('resize', this.handleWindowResize, { passive: true });\n window.addEventListener('message', this.handleWindowMessage);\n }\n\n private detachGlobalListeners(): void {\n if (!this.listenersAttached || typeof window === 'undefined') {\n return;\n }\n this.listenersAttached = false;\n window.removeEventListener('resize', this.handleWindowResize);\n window.removeEventListener('message', this.handleWindowMessage);\n }\n\n public updateConfig(options: WatermarkOptions = {}): this {\n this.config = normalizeWatermarkOptions(options, this.config);\n this.bootstrap();\n return this;\n }\n\n public setUserId(userId: string | number): this {\n this.config.userId = userId;\n return this.refresh();\n }\n\n public refresh(): this {\n if (this.state.active) {\n this.render();\n } else {\n this.bootstrap();\n }\n return this;\n }\n\n public getState(): WatermarkState {\n return { ...this.state };\n }\n\n public getConfig(): NormalizedWatermarkConfig {\n return { ...this.config };\n }\n\n public destroy(): void {\n this.stopMutationObserver();\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = null;\n }\n this.detachGlobalListeners();\n this.suppressWatermark('disabled');\n storeVerifiedUserId = '';\n currentUserStoreBound = false;\n\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : null;\n if (g && g[GIIME_WATERMARK_GLOBAL_SYMBOL] === this) {\n delete g[GIIME_WATERMARK_GLOBAL_SYMBOL];\n }\n if (typeof window !== 'undefined' && (window as any).__GIIME_WATERMARK__ === this) {\n delete (window as any).__GIIME_WATERMARK__;\n }\n }\n}\n\nexport const getWatermarkInstance = (): GiimeWatermark | null => {\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : null;\n if (!g) {\n return null;\n }\n return (g[GIIME_WATERMARK_GLOBAL_SYMBOL] as GiimeWatermark) || null;\n};\n\nlet currentUserStoreBound = false;\n\n/**\n * 自动识别并同步当前登录用户信息(参考 `Clarity.init` 的 `useCurrentUserStore` + `until` 机制)\n * 直接从 `useCurrentUserStore().userInfo.id`(服务端 `/guard/basic/v1/user/getCurrentUser` 鉴权返回)获取用户 ID,防止用户篡改 Cookie\n */\nconst autoIdentifyWatermarkUser = async (instance: GiimeWatermark): Promise<void> => {\n if (currentUserStoreBound) {\n return;\n }\n try {\n const currentUserStore = useCurrentUserStore();\n const loginStore = useLoginStore();\n currentUserStoreBound = true;\n\n // 若当前已有登录 token 且还没有任何组件触发过 getUserInfo,主动拉取一次当前用户信息\n const hasToken = Boolean(Cookies.get('token') || loginStore.userToken);\n if (hasToken && !currentUserStore.userInfo?.id && !currentUserStore.isLoading) {\n currentUserStore.getUserInfo().catch(() => {\n // ignore\n });\n }\n\n // 当用户通过登录弹窗登录成功时,确保拉取最新用户信息\n loginStore.onLoginResult(() => {\n if (!currentUserStore.isLoading) {\n currentUserStore.getUserInfo().catch(() => {\n // ignore\n });\n }\n });\n\n // 实时监听 currentUserStore.userInfo.id 变化(含首次加载及账号切换重登)\n watch(\n () => currentUserStore.userInfo?.id,\n newId => {\n const cleanId = sanitizeUserId(newId);\n if (cleanId && cleanId !== storeVerifiedUserId) {\n storeVerifiedUserId = cleanId;\n // 仅当服务端返回的真实 ID 与首屏渲染的 sso_user_id 不一致时才重绘 DOM,正常用户 0 闪烁\n if (cleanId !== instance.getState().userId) {\n instance.refresh();\n }\n }\n },\n { immediate: true },\n );\n\n // 参考 Clarity:等待 userInfo.id 变为有效值后同步更新水印\n await until(() => currentUserStore.userInfo?.id).toBeTruthy();\n const finalId = sanitizeUserId(currentUserStore.userInfo?.id);\n if (finalId && finalId !== storeVerifiedUserId) {\n storeVerifiedUserId = finalId;\n if (finalId !== instance.getState().userId) {\n instance.refresh();\n }\n }\n } catch {\n // 若在 Pinia 挂载前调用,微任务延迟重试绑定\n }\n};\n\nexport const initWatermark = (options?: WatermarkOptions): GiimeWatermark => {\n const g =\n typeof globalThis !== 'undefined' ? (globalThis as any) : typeof window !== 'undefined' ? (window as any) : {};\n let instance = g[GIIME_WATERMARK_GLOBAL_SYMBOL] as GiimeWatermark | undefined;\n\n if (!instance) {\n instance = new GiimeWatermark(options);\n g[GIIME_WATERMARK_GLOBAL_SYMBOL] = instance;\n if (typeof window !== 'undefined') {\n (window as any).__GIIME_WATERMARK__ = instance;\n }\n } else if (options && Object.keys(options).length > 0) {\n instance.updateConfig(options);\n } else {\n instance.refresh();\n }\n\n // 同步尝试或微任务等待 Pinia 挂载后从 useCurrentUserStore 获取防篡改用户信息\n Promise.resolve().then(() => {\n if (instance) {\n autoIdentifyWatermarkUser(instance);\n }\n });\n\n return instance;\n};\n\nexport const createWatermark = initWatermark;\n\nexport const destroyWatermark = (): void => {\n getWatermarkInstance()?.destroy();\n};\n\nexport const useWatermark = (options?: WatermarkOptions): GiimeWatermark => {\n return initWatermark(options);\n};\n\nexport const Watermark = {\n init: initWatermark,\n create: createWatermark,\n getInstance: getWatermarkInstance,\n destroy: destroyWatermark,\n setUserId(userId: string | number) {\n return initWatermark({ userId });\n },\n refresh() {\n return getWatermarkInstance()?.refresh() ?? initWatermark();\n },\n getState(): WatermarkState | null {\n return getWatermarkInstance()?.getState() ?? null;\n },\n isInIframe,\n shouldRenderWatermark,\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 零配置自执行入口 (@giime/watermark/auto)
|
|
3
|
+
* @description 供 gsmp、gtmsfront 等 Vue 2 项目直接一行替换 `import '@/utils/watermark.js'` -> `import '../watermark/auto'`
|
|
4
|
+
*/
|
|
5
|
+
import { initWatermark, Watermark } from './src/core';
|
|
6
|
+
export { initWatermark, Watermark };
|
|
7
|
+
export default Watermark;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Vue 2 适配器入口 (@giime/watermark/vue2)
|
|
3
|
+
* @description
|
|
4
|
+
* 面向 gsmp、gtmsfront 等 Vue 2.6 / 2.7 项目,支持两种接入方式:
|
|
5
|
+
* 1. 直接一行引入(自动初始化):`import '../../../watermark/vue2'`
|
|
6
|
+
* 2. Vue.use 插件方式(支持传入 store / env 等配置):`Vue.use(watermarkVue2Plugin, { store })`
|
|
7
|
+
*/
|
|
8
|
+
import { type GiimeWatermark, Watermark, initWatermark } from '../core';
|
|
9
|
+
import type { WatermarkOptions } from '../types';
|
|
10
|
+
export type WatermarkVue2PluginOptions = WatermarkOptions;
|
|
11
|
+
/**
|
|
12
|
+
* Vue 2 插件安装器
|
|
13
|
+
*/
|
|
14
|
+
export declare const watermarkVue2Plugin: {
|
|
15
|
+
install(VueCtor: any, options?: WatermarkVue2PluginOptions): GiimeWatermark;
|
|
16
|
+
};
|
|
17
|
+
export { Watermark, initWatermark };
|
|
18
|
+
export default watermarkVue2Plugin;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Vue 3 适配器插件与组合式 API (@giime/watermark/vue3)
|
|
3
|
+
* @description 支持 app.use(watermarkVue3Plugin, options) 与 useWatermark()
|
|
4
|
+
*/
|
|
5
|
+
import { type GiimeWatermark, Watermark, initWatermark } from '../core';
|
|
6
|
+
import type { WatermarkOptions } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Vue 3 插件安装器
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { watermarkVue3Plugin } from '../../../watermark/vue3';
|
|
12
|
+
* app.use(watermarkVue3Plugin);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const watermarkVue3Plugin: {
|
|
16
|
+
install(app: any, options?: WatermarkOptions): GiimeWatermark;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Vue 3 Composition API 获取或初始化全局水印实例
|
|
20
|
+
*/
|
|
21
|
+
export declare const useWatermark: (options?: WatermarkOptions) => GiimeWatermark;
|
|
22
|
+
export { Watermark, initWatermark };
|
|
23
|
+
export default watermarkVue3Plugin;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 核心水印渲染引擎、防篡改守护与全局 Symbol 单例管理
|
|
3
|
+
* @description 视觉样式、网格算法、旋转角度与透明度 100% 还原 gsmp/src/utils/watermark.js,同时修复其所有历史缺陷
|
|
4
|
+
*/
|
|
5
|
+
import type { NormalizedWatermarkConfig, WatermarkOptions, WatermarkState } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* 全局唯一单例 Symbol,保证 Vue 3 (giime)、Vue 2 (@giime/watermark) 及 HTML 脚本共存时绝不重复挂载
|
|
8
|
+
*/
|
|
9
|
+
export declare const GIIME_WATERMARK_GLOBAL_SYMBOL: unique symbol;
|
|
10
|
+
declare global {
|
|
11
|
+
interface Window {
|
|
12
|
+
__GIIME_WATERMARK_ACTIVE__?: boolean;
|
|
13
|
+
__GIIME_WATERMARK__?: GiimeWatermark;
|
|
14
|
+
GiimeWatermark?: typeof Watermark;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 归一化水印配置,100% 对齐 gsmp/src/utils/watermark.js 默认参数
|
|
19
|
+
*/
|
|
20
|
+
export declare const normalizeWatermarkOptions: (options?: WatermarkOptions, base?: NormalizedWatermarkConfig) => NormalizedWatermarkConfig;
|
|
21
|
+
/**
|
|
22
|
+
* 根据当前视口尺寸与配置计算自适应行列数与间距(像素级对齐 gsmp/src/utils/watermark.js 原生计算公式)
|
|
23
|
+
*/
|
|
24
|
+
export declare const calculateWatermarkGrid: (config: NormalizedWatermarkConfig, viewportWidth: number, viewportHeight: number) => {
|
|
25
|
+
cols: number;
|
|
26
|
+
rows: number;
|
|
27
|
+
xSpace: number;
|
|
28
|
+
ySpace: number;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* 清理直接挂在 document.body 下的老版裸 `.mask_div` 节点(避免与容器化水印共存或残留在 iframe 内)
|
|
32
|
+
*/
|
|
33
|
+
export declare const removeLegacyBodyMasks: () => void;
|
|
34
|
+
/**
|
|
35
|
+
* Giime 统一水印管理器实例
|
|
36
|
+
*/
|
|
37
|
+
export declare class GiimeWatermark {
|
|
38
|
+
private config;
|
|
39
|
+
private state;
|
|
40
|
+
private containerEl;
|
|
41
|
+
private mutationObserver;
|
|
42
|
+
private resizeTimer;
|
|
43
|
+
private verifyFallbackTimer;
|
|
44
|
+
private userPollTimer;
|
|
45
|
+
private unsubscribeServerUser;
|
|
46
|
+
private lastKnownToken;
|
|
47
|
+
private isRenderingInternal;
|
|
48
|
+
private listenersAttached;
|
|
49
|
+
private domReadyListenerAttached;
|
|
50
|
+
private readonly handleWindowResize;
|
|
51
|
+
/**
|
|
52
|
+
* 检查登录凭证 `token` 是否变化,或用户是否在控制台篡改了 `sso_user_id` Cookie
|
|
53
|
+
*/
|
|
54
|
+
private readonly checkUserChange;
|
|
55
|
+
private readonly handleVisibilityChange;
|
|
56
|
+
private readonly handleWindowMessage;
|
|
57
|
+
constructor(options?: WatermarkOptions);
|
|
58
|
+
/**
|
|
59
|
+
* 启动并执行嵌套检测与水印挂载
|
|
60
|
+
*/
|
|
61
|
+
private bootstrap;
|
|
62
|
+
/**
|
|
63
|
+
* 激活并渲染当前窗口的水印
|
|
64
|
+
*/
|
|
65
|
+
private activateWatermark;
|
|
66
|
+
/**
|
|
67
|
+
* 调度服务端真实身份核验:
|
|
68
|
+
* 默认等待 `verifyDelayMs`(1200ms),在此期间若宿主项目(如 gsmp)自身已发起 `getCurrentUser` 请求并被 XHR 观察器捕获,则零额外请求;
|
|
69
|
+
* 若宿主页面未调过该接口(如 gtmsfront 的部分独立子页面),定时器到期后自动发起一次兜底请求校验 `token`。
|
|
70
|
+
*/
|
|
71
|
+
private scheduleServerVerification;
|
|
72
|
+
/**
|
|
73
|
+
* 抑制并移除当前窗口的水印(如处于 GSMP 或外层项目的 iframe 中时)
|
|
74
|
+
*/
|
|
75
|
+
private suppressWatermark;
|
|
76
|
+
/**
|
|
77
|
+
* 实际执行水印 DOM 构建与挂载(样式与旧版 gsmp/src/utils/watermark.js 完全一致)
|
|
78
|
+
*/
|
|
79
|
+
render(): void;
|
|
80
|
+
/**
|
|
81
|
+
* 启动防篡改 MutationObserver:防止通过控制台删除水印容器、子节点或修改样式隐藏水印
|
|
82
|
+
*/
|
|
83
|
+
private startMutationObserver;
|
|
84
|
+
private stopMutationObserver;
|
|
85
|
+
private startUserWatcher;
|
|
86
|
+
private stopUserWatcher;
|
|
87
|
+
private attachGlobalListeners;
|
|
88
|
+
private detachGlobalListeners;
|
|
89
|
+
/**
|
|
90
|
+
* 动态更新配置并重新判定/渲染
|
|
91
|
+
*/
|
|
92
|
+
updateConfig(options?: WatermarkOptions): this;
|
|
93
|
+
/**
|
|
94
|
+
* 显式更新用户 ID 并刷新水印
|
|
95
|
+
*/
|
|
96
|
+
setUserId(userId: string | number): this;
|
|
97
|
+
/**
|
|
98
|
+
* 重新读取当前用户身份与窗口状态并刷新水印
|
|
99
|
+
*/
|
|
100
|
+
refresh(): this;
|
|
101
|
+
/**
|
|
102
|
+
* 获取当前水印状态快照
|
|
103
|
+
*/
|
|
104
|
+
getState(): WatermarkState;
|
|
105
|
+
/**
|
|
106
|
+
* 获取当前归一化配置
|
|
107
|
+
*/
|
|
108
|
+
getConfig(): NormalizedWatermarkConfig;
|
|
109
|
+
/**
|
|
110
|
+
* 彻底销毁水印实例与 DOM 节点及监听器
|
|
111
|
+
*/
|
|
112
|
+
destroy(): void;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 获取当前已存在的全局水印实例
|
|
116
|
+
*/
|
|
117
|
+
export declare const getWatermarkInstance: () => GiimeWatermark | null;
|
|
118
|
+
/**
|
|
119
|
+
* 初始化或更新全局唯一水印实例
|
|
120
|
+
*/
|
|
121
|
+
export declare const initWatermark: (options?: WatermarkOptions) => GiimeWatermark;
|
|
122
|
+
/**
|
|
123
|
+
* `initWatermark` 的别名(与 createLoginDialog / createRectSelect 命名风格保持一致)
|
|
124
|
+
*/
|
|
125
|
+
export declare const createWatermark: (options?: WatermarkOptions) => GiimeWatermark;
|
|
126
|
+
/**
|
|
127
|
+
* 销毁全局水印实例
|
|
128
|
+
*/
|
|
129
|
+
export declare const destroyWatermark: () => void;
|
|
130
|
+
/**
|
|
131
|
+
* 统一门面对象 `Watermark`(与 `Clarity.init()` / `GiimeTrack.init()` 保持一致的调用体验)
|
|
132
|
+
*/
|
|
133
|
+
export declare const Watermark: {
|
|
134
|
+
init: (options?: WatermarkOptions) => GiimeWatermark;
|
|
135
|
+
create: (options?: WatermarkOptions) => GiimeWatermark;
|
|
136
|
+
getInstance: () => GiimeWatermark | null;
|
|
137
|
+
destroy: () => void;
|
|
138
|
+
setUserId(userId: string | number): GiimeWatermark;
|
|
139
|
+
refresh(): GiimeWatermark;
|
|
140
|
+
getState(): WatermarkState | null;
|
|
141
|
+
isInIframe: (win?: Window | undefined) => boolean;
|
|
142
|
+
shouldRenderWatermark: (strategy?: import("./types").WatermarkIframeStrategy, win?: Window | undefined) => {
|
|
143
|
+
shouldRender: boolean;
|
|
144
|
+
inIframe: boolean;
|
|
145
|
+
needsAsyncDetect: boolean;
|
|
146
|
+
reason: "rendered-top" | "rendered-forced" | "rendered-fallback" | "suppressed-in-iframe" | "suppressed-by-ancestor" | "disabled" | "ssr";
|
|
147
|
+
};
|
|
148
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Iframe 嵌套关系检测与跨窗口 postMessage 协同协议
|
|
3
|
+
* @description
|
|
4
|
+
* 核心机制(默认策略 `'ancestor-detect'`):
|
|
5
|
+
* 1. 单独打开前端页面(`window.self === window.top`):直接展示水印;
|
|
6
|
+
* 2. 在 GSMP 综合管理平台或已带水印的外层前端页面中通过 iframe 打开子页面:
|
|
7
|
+
* - 同源场景:直接向上检测 `parent / top` 是否存在 `#__giime_watermark__`、`__GIIME_WATERMARK_ACTIVE__` 或旧版 `.mask_div`,有则子页面不显示水印;
|
|
8
|
+
* - 跨源场景:通过 `postMessage` 发送 `giime-watermark:ping`,外层水印收到后回复 `giime-watermark:pong`(外层渲染时也会主动广播 `giime-watermark:suppress`),子页面收到后不显示水印;
|
|
9
|
+
* 3. 单独打开一个**未接入水印**的前端页面 A,其内部通过 iframe 嵌套了接入水印的前端页面 B:
|
|
10
|
+
* - 页面 B 探测发现外层页面 A 既无同源水印 DOM、也未响应 `giime-watermark:pong`,则页面 B 自动在 iframe 内兜底展示水印!
|
|
11
|
+
*/
|
|
12
|
+
import type { WatermarkIframeStrategy } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* 跨窗口 postMessage 通信消息类型常量
|
|
15
|
+
*/
|
|
16
|
+
export declare const WATERMARK_MESSAGE_TYPES: {
|
|
17
|
+
/** 子 iframe 向父窗口/顶层窗口询问是否已有生效中的水印 */
|
|
18
|
+
readonly PING: "giime-watermark:ping";
|
|
19
|
+
/** 父窗口/顶层窗口回复子 iframe:外层水印已激活 */
|
|
20
|
+
readonly PONG: "giime-watermark:pong";
|
|
21
|
+
/** 外层窗口主动通知所有子 iframe 抑制自身水印 */
|
|
22
|
+
readonly SUPPRESS: "giime-watermark:suppress";
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 水印容器 DOM ID 与老版类名常量
|
|
26
|
+
*/
|
|
27
|
+
export declare const WATERMARK_DOM_CONSTANTS: {
|
|
28
|
+
readonly CONTAINER_ID: "__giime_watermark__";
|
|
29
|
+
readonly CONTAINER_CLASS: "giime-watermark-container";
|
|
30
|
+
readonly LEGACY_ITEM_CLASS: "mask_div";
|
|
31
|
+
readonly ROOT_ATTR: "data-giime-watermark";
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* 判断当前窗口是否运行在 `<iframe />` 内部
|
|
35
|
+
*/
|
|
36
|
+
export declare const isInIframe: (win?: Window) => boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 检测同源祖先窗口:
|
|
39
|
+
* - `hasWatermark`: 是否存在任一祖先窗口已经渲染了水印(含新版 `#__giime_watermark__` 或 GSMP/gtmsfront 老版 `.mask_div`)
|
|
40
|
+
* - `allAncestorsAccessible`: 是否所有祖先窗口均同源可访问(若全部同源可访问且均无水印,无需等待跨源 postMessage 超时即可立即判定外层无水印)
|
|
41
|
+
*/
|
|
42
|
+
export declare const inspectSameOriginAncestors: (win?: Window) => {
|
|
43
|
+
hasWatermark: boolean;
|
|
44
|
+
allAncestorsAccessible: boolean;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* 同源场景下向上遍历祖先窗口(parent -> ... -> top),检测是否存在任一祖先已渲染水印
|
|
48
|
+
*/
|
|
49
|
+
export declare const hasSameOriginAncestorWatermark: (win?: Window) => boolean;
|
|
50
|
+
/**
|
|
51
|
+
* 同步判定当前窗口是否应当渲染水印
|
|
52
|
+
*/
|
|
53
|
+
export declare const shouldRenderWatermark: (strategy?: WatermarkIframeStrategy, win?: Window) => {
|
|
54
|
+
shouldRender: boolean;
|
|
55
|
+
inIframe: boolean;
|
|
56
|
+
needsAsyncDetect: boolean;
|
|
57
|
+
reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback' | 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled' | 'ssr';
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* 向所有直接子 iframe 广播抑制水印信号(当外层窗口激活水印时调用)
|
|
61
|
+
*/
|
|
62
|
+
export declare const broadcastSuppressToChildFrames: (text: string, win?: Window) => void;
|
|
63
|
+
/**
|
|
64
|
+
* 在子 iframe 中通过 postMessage 向所有上级窗口(parent -> ... -> top)发起异步握手探测
|
|
65
|
+
* 若在 timeoutMs 内收到任一祖先窗口的 PONG 或 SUPPRESS 响应,则解析为 true(表示外层已有水印)
|
|
66
|
+
*/
|
|
67
|
+
export declare const detectAncestorWatermarkAsync: (timeoutMs?: number, win?: Window) => Promise<boolean>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file @giime/watermark 类型定义
|
|
3
|
+
* @description 同时支持现代小驼峰配置与 gsmp / gtmsfront 历史 watermark_* 下划线配置
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Iframe 嵌套水印展示策略
|
|
7
|
+
* - `'ancestor-detect'`(默认):智能探测祖先窗口是否已有水印(同源 DOM 检测 `#__giime_watermark__` / 老版 `.mask_div` + 跨源 `postMessage` 握手探测):
|
|
8
|
+
* 1. 若外层(如 GSMP 或已接入水印的父项目)已有水印,则子 iframe 自动不显示水印;
|
|
9
|
+
* 2. 若外层页面**未接入水印**(无水印),则子 iframe 自动兜底展示水印!
|
|
10
|
+
* - `'top-only'`:仅顶层窗口(`window.self === window.top`)展示水印,处于任意 iframe 内一律不展示。
|
|
11
|
+
* - `'always'`:无论是否在 iframe 中,始终强制渲染水印。
|
|
12
|
+
* - `'never'`:禁用并销毁水印。
|
|
13
|
+
*/
|
|
14
|
+
export type WatermarkIframeStrategy = 'ancestor-detect' | 'top-only' | 'always' | 'never';
|
|
15
|
+
/**
|
|
16
|
+
* 水印格式化上下文
|
|
17
|
+
*/
|
|
18
|
+
export interface WatermarkFormatContext {
|
|
19
|
+
/** 当前经服务端认证的用户 ID(未登录时为 '') */
|
|
20
|
+
userId: string;
|
|
21
|
+
/** 当前格式化日期(如 '2026年10月26日') */
|
|
22
|
+
date: string;
|
|
23
|
+
/** 水印品牌前缀(默认 '吉客印') */
|
|
24
|
+
prefix: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 兼容 gsmp / gtmsfront 老版 watermark.js 的下划线字段
|
|
28
|
+
*/
|
|
29
|
+
export interface LegacyWatermarkOptions {
|
|
30
|
+
/** 水印自定义完整文本 */
|
|
31
|
+
watermark_txt?: string;
|
|
32
|
+
/** 水印起始位置 X 轴坐标(默认 20) */
|
|
33
|
+
watermark_x?: number;
|
|
34
|
+
/** 水印起始位置 Y 轴坐标(默认 20) */
|
|
35
|
+
watermark_y?: number;
|
|
36
|
+
/** 水印行数(默认 20,会根据视口自适应调整) */
|
|
37
|
+
watermark_rows?: number;
|
|
38
|
+
/** 水印列数(默认 20,会根据视口自适应调整) */
|
|
39
|
+
watermark_cols?: number;
|
|
40
|
+
/** 水印 X 轴间隔(默认 100) */
|
|
41
|
+
watermark_x_space?: number;
|
|
42
|
+
/** 水印 Y 轴间隔(默认 50) */
|
|
43
|
+
watermark_y_space?: number;
|
|
44
|
+
/** 水印字体颜色(默认 '#aaa') */
|
|
45
|
+
watermark_color?: string;
|
|
46
|
+
/** 水印透明度(默认 0.1) */
|
|
47
|
+
watermark_alpha?: number;
|
|
48
|
+
/** 水印字体大小(默认 '15px') */
|
|
49
|
+
watermark_fontsize?: string;
|
|
50
|
+
/** 水印字体(默认 '微软雅黑') */
|
|
51
|
+
watermark_font?: string;
|
|
52
|
+
/** 单个水印块宽度(默认 210) */
|
|
53
|
+
watermark_width?: number;
|
|
54
|
+
/** 单个水印块高度(默认 80) */
|
|
55
|
+
watermark_height?: number;
|
|
56
|
+
/** 水印倾斜角度度数(默认 20,即逆时针旋转 20 度) */
|
|
57
|
+
watermark_angle?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 水印初始化配置项
|
|
61
|
+
*/
|
|
62
|
+
export interface WatermarkOptions extends LegacyWatermarkOptions {
|
|
63
|
+
/** 是否启用水印(默认 true) */
|
|
64
|
+
enabled?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Iframe 嵌套处理策略(默认 `'ancestor-detect'`)
|
|
67
|
+
*/
|
|
68
|
+
iframeStrategy?: WatermarkIframeStrategy;
|
|
69
|
+
/** `'ancestor-detect'` 模式下跨源握手等待超时毫秒数(默认 120) */
|
|
70
|
+
detectTimeoutMs?: number;
|
|
71
|
+
/** 水印品牌前缀(默认 '吉客印') */
|
|
72
|
+
prefix?: string;
|
|
73
|
+
/** 显式指定用户 ID */
|
|
74
|
+
userId?: string | number;
|
|
75
|
+
/** 自定义动态获取用户 ID 的函数 */
|
|
76
|
+
getUserId?: () => string | number | undefined | null;
|
|
77
|
+
/**
|
|
78
|
+
* 传入宿主环境变量对象(可选,如 Vue 2 的 `process.env`),用于辅助解析接口代理地址
|
|
79
|
+
*/
|
|
80
|
+
env?: Record<string, any>;
|
|
81
|
+
/**
|
|
82
|
+
* 自定义获取当前登录用户信息的接口地址(默认自动探测 `/guard/basic/v1/user/getCurrentUser`)
|
|
83
|
+
*/
|
|
84
|
+
userApiUrl?: string;
|
|
85
|
+
/**
|
|
86
|
+
* 是否允许在宿主未请求用户信息接口时,主动请求 `/guard/basic/v1/user/getCurrentUser` 校验用户身份(默认 true)
|
|
87
|
+
*/
|
|
88
|
+
autoFetchUser?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* 主动发起兜底校验请求前的等待时间(毫秒,默认 1200ms):
|
|
91
|
+
* 在此期间若宿主页面(如 gsmp)自身已发起 `getCurrentUser` 请求,将直接复用宿主响应,不发额外请求
|
|
92
|
+
*/
|
|
93
|
+
verifyDelayMs?: number;
|
|
94
|
+
/** 自定义水印文本或格式化函数(默认生成 `吉客印-${userId}-${YYYY年MM月DD日}`) */
|
|
95
|
+
text?: string | ((ctx: WatermarkFormatContext) => string);
|
|
96
|
+
/** 水印起始位置 X 轴坐标(默认 20) */
|
|
97
|
+
x?: number;
|
|
98
|
+
/** 水印起始位置 Y 轴坐标(默认 20) */
|
|
99
|
+
y?: number;
|
|
100
|
+
/** 水印行数(默认 20) */
|
|
101
|
+
rows?: number;
|
|
102
|
+
/** 水印列数(默认 20) */
|
|
103
|
+
cols?: number;
|
|
104
|
+
/** 水印 X 轴间隔(默认 100) */
|
|
105
|
+
xSpace?: number;
|
|
106
|
+
/** 水印 Y 轴间隔(默认 50) */
|
|
107
|
+
ySpace?: number;
|
|
108
|
+
/** 水印字体颜色(默认 '#aaa') */
|
|
109
|
+
color?: string;
|
|
110
|
+
/** 水印透明度(默认 0.1) */
|
|
111
|
+
alpha?: number;
|
|
112
|
+
/** 水印字体大小(默认 '15px') */
|
|
113
|
+
fontSize?: string;
|
|
114
|
+
/** 水印字体(默认 '微软雅黑') */
|
|
115
|
+
font?: string;
|
|
116
|
+
/** 单个水印块宽度(默认 210) */
|
|
117
|
+
width?: number;
|
|
118
|
+
/** 单个水印块高度(默认 80) */
|
|
119
|
+
height?: number;
|
|
120
|
+
/** 水印倾斜角度度数(默认 20) */
|
|
121
|
+
angle?: number;
|
|
122
|
+
/** 水印容器层级 z-index(默认 9999,高于 Element UI / Element Plus 弹窗的 2000+,确保覆盖弹窗内的 iframe) */
|
|
123
|
+
zIndex?: number;
|
|
124
|
+
/** 是否开启 MutationObserver 防篡改保护(默认 true) */
|
|
125
|
+
antiTamper?: boolean;
|
|
126
|
+
/** 是否监听窗口 resize 自动重排(默认 true) */
|
|
127
|
+
watchResize?: boolean;
|
|
128
|
+
/** 是否自动清理页面上遗留的老版裸 `.mask_div` 节点(默认 true) */
|
|
129
|
+
cleanLegacyMask?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 归一化后的内部水印配置
|
|
133
|
+
*/
|
|
134
|
+
export interface NormalizedWatermarkConfig {
|
|
135
|
+
enabled: boolean;
|
|
136
|
+
iframeStrategy: WatermarkIframeStrategy;
|
|
137
|
+
detectTimeoutMs: number;
|
|
138
|
+
prefix: string;
|
|
139
|
+
userId?: string | number;
|
|
140
|
+
getUserId?: () => string | number | undefined | null;
|
|
141
|
+
env?: Record<string, any>;
|
|
142
|
+
userApiUrl?: string;
|
|
143
|
+
autoFetchUser: boolean;
|
|
144
|
+
verifyDelayMs: number;
|
|
145
|
+
text?: string | ((ctx: WatermarkFormatContext) => string);
|
|
146
|
+
x: number;
|
|
147
|
+
y: number;
|
|
148
|
+
rows: number;
|
|
149
|
+
cols: number;
|
|
150
|
+
xSpace: number;
|
|
151
|
+
ySpace: number;
|
|
152
|
+
color: string;
|
|
153
|
+
alpha: number;
|
|
154
|
+
fontSize: string;
|
|
155
|
+
font: string;
|
|
156
|
+
width: number;
|
|
157
|
+
height: number;
|
|
158
|
+
angle: number;
|
|
159
|
+
zIndex: number;
|
|
160
|
+
antiTamper: boolean;
|
|
161
|
+
watchResize: boolean;
|
|
162
|
+
cleanLegacyMask: boolean;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 水印运行状态快照
|
|
166
|
+
*/
|
|
167
|
+
export interface WatermarkState {
|
|
168
|
+
/** 当前窗口是否处于 iframe 内部 */
|
|
169
|
+
inIframe: boolean;
|
|
170
|
+
/** 当前窗口是否实际渲染了水印 */
|
|
171
|
+
active: boolean;
|
|
172
|
+
/** 未渲染或抑制原因 */
|
|
173
|
+
reason: 'rendered-top' | 'rendered-forced' | 'rendered-fallback' | 'suppressed-in-iframe' | 'suppressed-by-ancestor' | 'disabled' | 'ssr';
|
|
174
|
+
/** 当前展示的水印文本 */
|
|
175
|
+
text: string;
|
|
176
|
+
/** 当前解析到的用户 ID */
|
|
177
|
+
userId: string;
|
|
178
|
+
/** 当前渲染的网格行数 */
|
|
179
|
+
rows: number;
|
|
180
|
+
/** 当前渲染的网格列数 */
|
|
181
|
+
cols: number;
|
|
182
|
+
}
|