oxy-uni-ui 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attributes.json +1 -1
- package/components/common/AbortablePromise.ts +4 -0
- package/components/common/abstracts/variable.scss +185 -68
- package/components/common/base64.ts +6 -0
- package/components/common/clickoutside.ts +5 -0
- package/components/common/interceptor.ts +9 -0
- package/components/common/path.ts +4 -0
- package/components/common/props.ts +23 -0
- package/components/common/util.ts +18 -1
- package/components/composables/index.ts +2 -0
- package/components/composables/useCell.ts +8 -1
- package/components/composables/useChildren.ts +27 -1
- package/components/composables/useCountDown.ts +10 -1
- package/components/composables/useDynamicVirtualScroll.ts +9 -0
- package/components/composables/useGlobalLoading.ts +6 -0
- package/components/composables/useGlobalMessage.ts +6 -0
- package/components/composables/useGlobalToast.ts +6 -0
- package/components/composables/useLockScroll.ts +9 -0
- package/components/composables/useParent.ts +65 -14
- package/components/composables/usePopover.ts +9 -0
- package/components/composables/useQueue.ts +8 -0
- package/components/composables/useRaf.ts +10 -0
- package/components/composables/useSharedState.ts +284 -0
- package/components/composables/useTouch.ts +8 -0
- package/components/composables/useTranslate.ts +9 -0
- package/components/composables/useUpload.ts +83 -11
- package/components/composables/useVirtualScroll.ts +7 -0
- package/components/composables/useWindowResize.ts +9 -0
- package/components/oxy-action-sheet/index.scss +5 -5
- package/components/oxy-action-sheet/oxy-action-sheet.vue +11 -0
- package/components/oxy-backtop/index.scss +2 -2
- package/components/oxy-backtop/oxy-backtop.vue +2 -0
- package/components/oxy-badge/oxy-badge.vue +2 -0
- package/components/oxy-badge/types.ts +3 -0
- package/components/oxy-button/index.scss +13 -13
- package/components/oxy-button/oxy-button.vue +11 -0
- package/components/oxy-button/types.ts +3 -3
- package/components/oxy-calendar/index.scss +17 -17
- package/components/oxy-calendar/oxy-calendar.vue +31 -0
- package/components/oxy-calendar/types.ts +3 -0
- package/components/oxy-calendar-view/month/month.vue +2 -0
- package/components/oxy-calendar-view/monthPanel/month-panel.vue +3 -1
- package/components/oxy-calendar-view/monthPanel/types.ts +10 -7
- package/components/oxy-calendar-view/oxy-calendar-view.vue +2 -0
- package/components/oxy-calendar-view/types.ts +3 -1
- package/components/oxy-calendar-view/year/types.ts +33 -1
- package/components/oxy-calendar-view/year/year.vue +2 -0
- package/components/oxy-calendar-view/yearPanel/year-panel.vue +2 -0
- package/components/oxy-card/index.scss +1 -1
- package/components/oxy-card/oxy-card.vue +2 -0
- package/components/oxy-cell/index.scss +3 -1
- package/components/oxy-cell/oxy-cell.vue +6 -4
- package/components/oxy-cell-group/oxy-cell-group.vue +2 -0
- package/components/oxy-checkbox/index.scss +41 -6
- package/components/oxy-checkbox/oxy-checkbox.vue +22 -16
- package/components/oxy-checkbox/types.ts +9 -0
- package/components/oxy-checkbox-group/index.scss +1 -1
- package/components/oxy-checkbox-group/oxy-checkbox-group.vue +2 -0
- package/components/oxy-circle/oxy-circle.vue +2 -0
- package/components/oxy-col/oxy-col.vue +3 -1
- package/components/oxy-col-picker/index.scss +3 -3
- package/components/oxy-col-picker/oxy-col-picker.vue +17 -1
- package/components/oxy-col-picker/types.ts +3 -0
- package/components/oxy-collapse/index.scss +2 -2
- package/components/oxy-collapse/oxy-collapse.vue +9 -0
- package/components/oxy-collapse-item/oxy-collapse-item.vue +4 -2
- package/components/oxy-config-provider/oxy-config-provider.vue +18 -0
- package/components/oxy-config-provider/types.ts +18 -0
- package/components/oxy-corner/index.scss +50 -32
- package/components/oxy-corner/oxy-corner.vue +2 -0
- package/components/oxy-count-down/oxy-count-down.vue +2 -0
- package/components/oxy-count-to/oxy-count-to.vue +12 -1
- package/components/oxy-count-to/types.ts +14 -4
- package/components/oxy-curtain/index.scss +10 -9
- package/components/oxy-curtain/oxy-curtain.vue +2 -0
- package/components/oxy-date-strip/oxy-date-strip.vue +22 -1
- package/components/oxy-date-strip-item/index.scss +4 -4
- package/components/oxy-date-strip-item/oxy-date-strip-item.vue +2 -0
- package/components/oxy-datetime-picker/index.scss +3 -3
- package/components/oxy-datetime-picker/oxy-datetime-picker.vue +11 -1
- package/components/oxy-datetime-picker-view/oxy-datetime-picker-view.vue +2 -0
- package/components/oxy-divider/oxy-divider.vue +2 -0
- package/components/oxy-drop-menu/index.scss +2 -2
- package/components/oxy-drop-menu/oxy-drop-menu.vue +3 -0
- package/components/oxy-drop-menu-item/index.scss +1 -1
- package/components/oxy-drop-menu-item/oxy-drop-menu-item.vue +17 -9
- package/components/oxy-echarts/oxy-echarts.vue +2 -0
- package/components/oxy-fab/index.scss +1 -1
- package/components/oxy-fab/oxy-fab.vue +27 -0
- package/components/oxy-file-list/index.scss +9 -9
- package/components/oxy-file-list/oxy-file-list.vue +29 -17
- package/components/oxy-floating-panel/oxy-floating-panel.vue +34 -10
- package/components/oxy-footer/index.scss +7 -0
- package/components/oxy-footer/oxy-footer.vue +4 -2
- package/components/oxy-footer/types.ts +9 -6
- package/components/oxy-form/oxy-form.vue +13 -1
- package/components/oxy-form-item/oxy-form-item.vue +5 -3
- package/components/oxy-gap/oxy-gap.vue +2 -0
- package/components/oxy-global-loading/oxy-global-loading.vue +18 -5
- package/components/oxy-global-message/oxy-global-message.vue +30 -17
- package/components/oxy-global-toast/oxy-global-toast.vue +18 -5
- package/components/oxy-grid/oxy-grid.vue +6 -0
- package/components/oxy-grid-item/index.scss +1 -1
- package/components/oxy-grid-item/oxy-grid-item.vue +22 -20
- package/components/oxy-guidance/index.scss +9 -9
- package/components/oxy-guidance/oxy-guidance.vue +22 -16
- package/components/oxy-icon/oxy-icon.vue +2 -0
- package/components/oxy-icon/types.ts +3 -0
- package/components/oxy-image-preview/index.scss +75 -0
- package/components/oxy-image-preview/index.ts +56 -0
- package/components/oxy-image-preview/oxy-image-preview.vue +221 -0
- package/components/oxy-image-preview/types.ts +164 -0
- package/components/oxy-img/oxy-img.vue +2 -0
- package/components/oxy-img-cropper/index.scss +2 -2
- package/components/oxy-img-cropper/oxy-img-cropper.vue +6 -0
- package/components/oxy-img-lazy/oxy-img-lazy.vue +9 -0
- package/components/oxy-index-anchor/index.scss +1 -1
- package/components/oxy-index-anchor/oxy-index-anchor.vue +2 -2
- package/components/oxy-index-bar/index.scss +1 -1
- package/components/oxy-index-bar/oxy-index-bar.vue +18 -0
- package/components/oxy-input/index.scss +2 -1
- package/components/oxy-input/oxy-input.vue +18 -4
- package/components/oxy-input/types.ts +6 -0
- package/components/oxy-input-number/index.scss +3 -1
- package/components/oxy-input-number/oxy-input-number.vue +2 -0
- package/components/oxy-keyboard/index.scss +3 -3
- package/components/oxy-keyboard/key/index.vue +2 -0
- package/components/oxy-keyboard/oxy-keyboard.vue +11 -2
- package/components/oxy-link/index.scss +8 -4
- package/components/oxy-link/oxy-link.vue +9 -3
- package/components/oxy-link/types.ts +2 -2
- package/components/oxy-list/oxy-list.vue +2 -0
- package/components/oxy-list/types.ts +7 -0
- package/components/oxy-loading/oxy-loading.vue +6 -0
- package/components/oxy-loadmore/index.scss +1 -1
- package/components/oxy-loadmore/oxy-loadmore.vue +2 -0
- package/components/oxy-long-press-menu/index.scss +1 -1
- package/components/oxy-long-press-menu/oxy-long-press-menu.vue +42 -13
- package/components/oxy-message-box/index.scss +223 -36
- package/components/oxy-message-box/index.ts +49 -23
- package/components/oxy-message-box/oxy-message-box.vue +181 -56
- package/components/oxy-message-box/types.ts +60 -2
- package/components/oxy-navbar/index.scss +1 -1
- package/components/oxy-navbar/oxy-navbar.vue +9 -6
- package/components/oxy-navbar-capsule/oxy-navbar-capsule.vue +2 -0
- package/components/oxy-notice-bar/index.scss +1 -1
- package/components/oxy-notice-bar/oxy-notice-bar.vue +29 -0
- package/components/oxy-notify/index.ts +16 -12
- package/components/oxy-notify/oxy-notify.vue +11 -4
- package/components/oxy-overlay/oxy-overlay.vue +34 -2
- package/components/oxy-pagination/oxy-pagination.vue +2 -0
- package/components/oxy-password-input/oxy-password-input.vue +2 -0
- package/components/oxy-picker/index.scss +7 -7
- package/components/oxy-picker/oxy-picker.vue +11 -0
- package/components/oxy-picker-view/index.scss +1 -1
- package/components/oxy-picker-view/oxy-picker-view.vue +2 -0
- package/components/oxy-popover/index.scss +2 -2
- package/components/oxy-popover/oxy-popover.vue +4 -1
- package/components/oxy-popup/oxy-popup.vue +8 -0
- package/components/oxy-progress/index.scss +2 -2
- package/components/oxy-progress/oxy-progress.vue +7 -0
- package/components/oxy-qrcode/draw.ts +15 -1
- package/components/oxy-qrcode/oxy-qrcode.vue +10 -3
- package/components/oxy-radio/index.scss +8 -8
- package/components/oxy-radio/oxy-radio.vue +13 -11
- package/components/oxy-radio-group/index.scss +1 -1
- package/components/oxy-radio-group/oxy-radio-group.vue +2 -0
- package/components/oxy-rate/oxy-rate.vue +5 -0
- package/components/oxy-rate/types.ts +2 -2
- package/components/oxy-resize/oxy-resize.vue +12 -0
- package/components/oxy-rich-text/index.scss +9 -9
- package/components/oxy-rich-text/oxy-rich-text.vue +6 -0
- package/components/oxy-rich-text/types.ts +15 -0
- package/components/oxy-root-portal/oxy-root-portal.vue +23 -15
- package/components/oxy-row/oxy-row.vue +2 -0
- package/components/oxy-search/index.scss +3 -3
- package/components/oxy-search/oxy-search.vue +19 -0
- package/components/oxy-segmented/index.scss +4 -4
- package/components/oxy-segmented/oxy-segmented.vue +2 -0
- package/components/oxy-select/index.scss +25 -25
- package/components/oxy-select/oxy-select.vue +27 -0
- package/components/oxy-select/types.ts +3 -0
- package/components/oxy-select-picker/index.scss +5 -5
- package/components/oxy-select-picker/oxy-select-picker.vue +7 -0
- package/components/oxy-sidebar/oxy-sidebar.vue +2 -0
- package/components/oxy-sidebar-item/index.scss +3 -3
- package/components/oxy-sidebar-item/oxy-sidebar-item.vue +17 -31
- package/components/oxy-signature/oxy-signature.vue +17 -0
- package/components/oxy-skeleton/oxy-skeleton.vue +7 -1
- package/components/oxy-slide-verify/index.scss +95 -0
- package/components/oxy-slide-verify/oxy-slide-verify.vue +244 -0
- package/components/oxy-slide-verify/types.ts +98 -0
- package/components/oxy-slider/oxy-slider.vue +3 -0
- package/components/oxy-sort-button/index.scss +6 -5
- package/components/oxy-sort-button/oxy-sort-button.vue +6 -0
- package/components/oxy-splitter/index.scss +9 -0
- package/components/oxy-splitter/oxy-splitter.vue +23 -2
- package/components/oxy-splitter-panel/index.scss +7 -5
- package/components/oxy-splitter-panel/oxy-splitter-panel.vue +93 -89
- package/components/oxy-status-tip/index.scss +3 -3
- package/components/oxy-status-tip/oxy-status-tip.vue +2 -0
- package/components/oxy-step/index.scss +4 -4
- package/components/oxy-step/oxy-step.vue +15 -13
- package/components/oxy-steps/oxy-steps.vue +2 -0
- package/components/oxy-sticky/oxy-sticky.vue +5 -3
- package/components/oxy-stream-render/oxy-stream-render.vue +29 -0
- package/components/oxy-swipe-action/oxy-swipe-action.vue +8 -0
- package/components/oxy-swiper/oxy-swiper.vue +6 -0
- package/components/oxy-swiper-nav/index.scss +4 -4
- package/components/oxy-switch/index.scss +6 -3
- package/components/oxy-switch/oxy-switch.vue +10 -0
- package/components/oxy-tab/index.scss +1 -7
- package/components/oxy-tab/oxy-tab.vue +12 -10
- package/components/oxy-tabbar/oxy-tabbar.vue +5 -0
- package/components/oxy-tabbar-item/oxy-tabbar-item.vue +11 -9
- package/components/oxy-table/index.scss +1 -1
- package/components/oxy-table/oxy-table.vue +8 -0
- package/components/oxy-table/types.ts +3 -0
- package/components/oxy-table-col/oxy-table-col.vue +21 -19
- package/components/oxy-tabs/index.scss +11 -11
- package/components/oxy-tabs/oxy-tabs.vue +17 -0
- package/components/oxy-tag/index.scss +176 -17
- package/components/oxy-tag/oxy-tag.vue +29 -2
- package/components/oxy-tag/types.ts +16 -0
- package/components/oxy-text/oxy-text.vue +12 -1
- package/components/oxy-textarea/index.scss +3 -2
- package/components/oxy-textarea/oxy-textarea.vue +10 -4
- package/components/oxy-toast/index.ts +21 -20
- package/components/oxy-toast/oxy-toast.vue +30 -5
- package/components/oxy-toast/types.ts +20 -9
- package/components/oxy-tooltip/index.scss +1 -1
- package/components/oxy-tooltip/oxy-tooltip.vue +2 -0
- package/components/oxy-transition/index.scss +3 -1
- package/components/oxy-transition/oxy-transition.vue +14 -0
- package/components/oxy-tree/index.scss +3 -3
- package/components/oxy-tree/oxy-tree.vue +28 -5
- package/components/oxy-tree/types.ts +57 -1
- package/components/oxy-upload/index.scss +9 -9
- package/components/oxy-upload/oxy-upload.vue +5 -3
- package/components/oxy-verification-code/oxy-verification-code.vue +24 -0
- package/components/oxy-video-preview/index.scss +12 -7
- package/components/oxy-video-preview/index.ts +64 -0
- package/components/oxy-video-preview/oxy-video-preview.vue +102 -31
- package/components/oxy-video-preview/types.ts +54 -8
- package/components/oxy-virtual-scroll/index.scss +1 -1
- package/components/oxy-virtual-scroll/oxy-virtual-scroll.vue +2 -0
- package/components/oxy-voice-player/index.scss +64 -64
- package/components/oxy-voice-player/oxy-voice-player.vue +38 -10
- package/components/oxy-waterfall/oxy-waterfall.vue +13 -0
- package/components/oxy-waterfall/types.ts +7 -0
- package/components/oxy-waterfall-item/oxy-waterfall-item.vue +9 -0
- package/components/oxy-watermark/oxy-watermark.vue +2 -0
- package/dev-tools.ts +2 -0
- package/devTools/components/DevToolsOverlay.vue +56 -0
- package/devTools/components/DevToolsUiHost.vue +589 -0
- package/devTools/config.js +55 -0
- package/devTools/core/components/mpDevBubble.vue +174 -0
- package/devTools/core/libs/createH5Bubble.js +156 -0
- package/devTools/core/libs/devCache.js +151 -0
- package/devTools/core/libs/devOptions.js +163 -0
- package/devTools/core/libs/devUi.js +219 -0
- package/devTools/core/libs/drawView.js +140 -0
- package/devTools/core/libs/errorReport.js +64 -0
- package/devTools/core/libs/jsonCompress.js +334 -0
- package/devTools/core/libs/logReport.js +59 -0
- package/devTools/core/libs/pageLinkList.js +125 -0
- package/devTools/core/libs/timeFormat.js +94 -0
- package/devTools/core/proxy/console.js +430 -0
- package/devTools/core/proxy/index.js +36 -0
- package/devTools/core/proxy/request.js +495 -0
- package/devTools/core/proxy/storage.js +113 -0
- package/devTools/core/proxy/uniBus.js +153 -0
- package/devTools/core/proxy/uniListen.js +192 -0
- package/devTools/core/proxy/vueMixin.js +120 -0
- package/devTools/index.js +168 -0
- package/devTools/page/components/bottomTools.vue +1046 -0
- package/devTools/page/components/dialog/addStorage.vue +204 -0
- package/devTools/page/components/dialog/createDir.vue +366 -0
- package/devTools/page/components/dialog/editDialog.vue +192 -0
- package/devTools/page/components/dialog/routeDialog.vue +184 -0
- package/devTools/page/components/dialog/sendRequest.vue +603 -0
- package/devTools/page/components/dialog/textFileEditDialog.vue +391 -0
- package/devTools/page/components/libs/appDelDir.js +86 -0
- package/devTools/page/components/libs/dirReader.js +248 -0
- package/devTools/page/components/libs/fileSize.js +15 -0
- package/devTools/page/components/libs/getRuntimeInfo.js +134 -0
- package/devTools/page/components/listItem/consoleItem.vue +314 -0
- package/devTools/page/components/listItem/errorItem.vue +292 -0
- package/devTools/page/components/listItem/fileSysItem.vue +533 -0
- package/devTools/page/components/listItem/infoList.vue +100 -0
- package/devTools/page/components/listItem/jsRunnerItem.vue +255 -0
- package/devTools/page/components/listItem/logItem.vue +193 -0
- package/devTools/page/components/listItem/networkItem.vue +398 -0
- package/devTools/page/components/listItem/objectAnalysis.vue +651 -0
- package/devTools/page/components/listItem/pages.vue +319 -0
- package/devTools/page/components/listItem/routeItem.vue +153 -0
- package/devTools/page/components/listItem/setting.vue +734 -0
- package/devTools/page/components/listItem/storageList.vue +681 -0
- package/devTools/page/components/listItem/tools.vue +315 -0
- package/devTools/page/components/listItem/vuexList.vue +599 -0
- package/devTools/page/components/main.vue +1867 -0
- package/devTools/page/components/mixins/animationControl.js +91 -0
- package/devTools/page/components/mixins/mp.js +83 -0
- package/devTools/page/components/ui/btnTabs.vue +90 -0
- package/devTools/page/components/ui/codeHisPicker.vue +172 -0
- package/devTools/page/components/ui/h5Cell.vue +13 -0
- package/devTools/page/components/ui/menuBtn.vue +94 -0
- package/devTools/page/components/ui/mobileSwiperScroll.vue +74 -0
- package/devTools/page/components/ui/requestSpeedLimit.vue +52 -0
- package/devTools/page/components/ui/requestTimeoutMock.vue +55 -0
- package/devTools/page/components/ui/subTitleBar.vue +101 -0
- package/devTools/page/static/copy.png +0 -0
- package/devTools/page/static/delete.png +0 -0
- package/devTools/page/static/fileSys/AI.png +0 -0
- package/devTools/page/static/fileSys/DWG.png +0 -0
- package/devTools/page/static/fileSys/EXE.png +0 -0
- package/devTools/page/static/fileSys/GIF.png +0 -0
- package/devTools/page/static/fileSys/HTML.png +0 -0
- package/devTools/page/static/fileSys/PSD.png +0 -0
- package/devTools/page/static/fileSys/RVT.png +0 -0
- package/devTools/page/static/fileSys/SKP.png +0 -0
- package/devTools/page/static/fileSys/SVG.png +0 -0
- package/devTools/page/static/fileSys/excel.png +0 -0
- package/devTools/page/static/fileSys/pdf.png +0 -0
- package/devTools/page/static/fileSys/pptl.png +0 -0
- package/devTools/page/static/fileSys/shipin.png +0 -0
- package/devTools/page/static/fileSys/tupian.png +0 -0
- package/devTools/page/static/fileSys/txt.png +0 -0
- package/devTools/page/static/fileSys/weizhiwenjian.png +0 -0
- package/devTools/page/static/fileSys/wenjianjia.png +0 -0
- package/devTools/page/static/fileSys/word.png +0 -0
- package/devTools/page/static/fileSys/yasuo.png +0 -0
- package/devTools/page/static/fileSys/yinpin.png +0 -0
- package/devTools/page/static/fold.png +0 -0
- package/devTools/page/static/menu.png +0 -0
- package/devTools/page/static/refresh.png +0 -0
- package/devTools/page/static/unfold.png +0 -0
- package/devTools/tools.vue +25 -0
- package/devTools/type/devTools.d.ts +406 -0
- package/global.d.ts +2 -0
- package/index.ts +2 -0
- package/locale/lang/en-US.ts +51 -2
- package/locale/lang/zh-CN.ts +51 -2
- package/oxy-dev-tools/components/DevToolsUiHost.vue +555 -0
- package/oxy-dev-tools/config.js +61 -0
- package/oxy-dev-tools/core/components/mpDevBubble.vue +176 -0
- package/oxy-dev-tools/core/libs/createH5Bubble.js +156 -0
- package/oxy-dev-tools/core/libs/devCache.js +149 -0
- package/oxy-dev-tools/core/libs/devOptions.js +160 -0
- package/oxy-dev-tools/core/libs/devUi.js +219 -0
- package/oxy-dev-tools/core/libs/drawView.js +144 -0
- package/oxy-dev-tools/core/libs/errorReport.js +60 -0
- package/oxy-dev-tools/core/libs/jsonCompress.js +328 -0
- package/oxy-dev-tools/core/libs/logReport.js +55 -0
- package/oxy-dev-tools/core/libs/pageLinkList.js +121 -0
- package/oxy-dev-tools/core/libs/timeFormat.js +93 -0
- package/oxy-dev-tools/core/proxy/console.js +398 -0
- package/oxy-dev-tools/core/proxy/index.js +33 -0
- package/oxy-dev-tools/core/proxy/request.js +473 -0
- package/oxy-dev-tools/core/proxy/storage.js +96 -0
- package/oxy-dev-tools/core/proxy/uniBus.js +148 -0
- package/oxy-dev-tools/core/proxy/uniListen.js +190 -0
- package/oxy-dev-tools/core/proxy/vueMixin.js +115 -0
- package/oxy-dev-tools/index.ts +183 -0
- package/oxy-dev-tools/oxy-dev-tools.vue +62 -0
- package/oxy-dev-tools/page/components/bottomTools.vue +933 -0
- package/oxy-dev-tools/page/components/dialog/addStorage.vue +184 -0
- package/oxy-dev-tools/page/components/dialog/createDir.vue +352 -0
- package/oxy-dev-tools/page/components/dialog/editDialog.vue +178 -0
- package/oxy-dev-tools/page/components/dialog/routeDialog.vue +170 -0
- package/oxy-dev-tools/page/components/dialog/sendRequest.vue +530 -0
- package/oxy-dev-tools/page/components/dialog/textFileEditDialog.vue +379 -0
- package/oxy-dev-tools/page/components/libs/appDelDir.js +77 -0
- package/oxy-dev-tools/page/components/libs/dirReader.js +239 -0
- package/oxy-dev-tools/page/components/libs/fileSize.js +15 -0
- package/oxy-dev-tools/page/components/libs/getRuntimeInfo.js +132 -0
- package/oxy-dev-tools/page/components/listItem/consoleItem.vue +292 -0
- package/oxy-dev-tools/page/components/listItem/errorItem.vue +268 -0
- package/oxy-dev-tools/page/components/listItem/fileSysItem.vue +511 -0
- package/oxy-dev-tools/page/components/listItem/infoList.vue +89 -0
- package/oxy-dev-tools/page/components/listItem/jsRunnerItem.vue +236 -0
- package/oxy-dev-tools/page/components/listItem/logItem.vue +185 -0
- package/oxy-dev-tools/page/components/listItem/networkItem.vue +362 -0
- package/oxy-dev-tools/page/components/listItem/objectAnalysis.vue +642 -0
- package/oxy-dev-tools/page/components/listItem/pages.vue +285 -0
- package/oxy-dev-tools/page/components/listItem/routeItem.vue +140 -0
- package/oxy-dev-tools/page/components/listItem/setting.vue +687 -0
- package/oxy-dev-tools/page/components/listItem/storageList.vue +623 -0
- package/oxy-dev-tools/page/components/listItem/tools.vue +273 -0
- package/oxy-dev-tools/page/components/listItem/vuexList.vue +559 -0
- package/oxy-dev-tools/page/components/main.vue +1824 -0
- package/oxy-dev-tools/page/components/mixins/animationControl.js +80 -0
- package/oxy-dev-tools/page/components/mixins/mp.js +76 -0
- package/oxy-dev-tools/page/components/ui/btnTabs.vue +77 -0
- package/oxy-dev-tools/page/components/ui/codeHisPicker.vue +161 -0
- package/oxy-dev-tools/page/components/ui/h5Cell.vue +13 -0
- package/oxy-dev-tools/page/components/ui/menuBtn.vue +87 -0
- package/oxy-dev-tools/page/components/ui/mobileSwiperScroll.vue +71 -0
- package/oxy-dev-tools/page/components/ui/requestSpeedLimit.vue +47 -0
- package/oxy-dev-tools/page/components/ui/requestTimeoutMock.vue +50 -0
- package/oxy-dev-tools/page/components/ui/subTitleBar.vue +87 -0
- package/oxy-dev-tools/page/static/copy.png +0 -0
- package/oxy-dev-tools/page/static/delete.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/AI.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/DWG.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/EXE.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/GIF.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/HTML.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/PSD.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/RVT.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/SKP.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/SVG.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/excel.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/pdf.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/pptl.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/shipin.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/tupian.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/txt.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/weizhiwenjian.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/wenjianjia.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/word.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/yasuo.png +0 -0
- package/oxy-dev-tools/page/static/fileSys/yinpin.png +0 -0
- package/oxy-dev-tools/page/static/fold.png +0 -0
- package/oxy-dev-tools/page/static/menu.png +0 -0
- package/oxy-dev-tools/page/static/refresh.png +0 -0
- package/oxy-dev-tools/page/static/unfold.png +0 -0
- package/oxy-dev-tools/tools.vue +22 -0
- package/oxy-dev-tools/type/devTools.d.ts +406 -0
- package/package.json +2 -2
- package/styles/all.scss +125 -0
- package/tags.json +1 -1
- package/vite-plugins/vite-plugin-host-class.ts +166 -0
- package/web-types.json +1 -1
|
@@ -13,34 +13,65 @@
|
|
|
13
13
|
:root-portal="rootPortal"
|
|
14
14
|
>
|
|
15
15
|
<view :class="rootClass">
|
|
16
|
+
<oxy-icon v-if="messageState.showClose" custom-class="oxy-message-box__close" name="close" @click="toggleModal('close')" />
|
|
17
|
+
<slot name="header" />
|
|
18
|
+
|
|
16
19
|
<view :class="bodyClass">
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
</
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
:
|
|
26
|
-
:
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
20
|
+
<slot name="image">
|
|
21
|
+
<image v-if="messageState.headerImage" mode="widthFix" class="oxy-message-box__img" :src="messageState.headerImage"></image>
|
|
22
|
+
</slot>
|
|
23
|
+
|
|
24
|
+
<slot name="title" :icon="messageState.icon" :title="messageState.title" :iconProps="messageState.iconProps">
|
|
25
|
+
<view v-if="messageState.iconProps?.name || messageState.title" class="oxy-message-box__title">
|
|
26
|
+
<oxy-icon
|
|
27
|
+
v-if="messageState.iconProps?.name"
|
|
28
|
+
:custom-class="`oxy-message-box__icon ${iconTypeClass}`"
|
|
29
|
+
:name="messageState.iconProps.name"
|
|
30
|
+
:color="messageState.iconProps.color"
|
|
31
|
+
:size="messageState.iconProps.size"
|
|
32
|
+
></oxy-icon>
|
|
33
|
+
{{ messageState.title }}
|
|
34
|
+
</view>
|
|
35
|
+
</slot>
|
|
36
|
+
|
|
37
|
+
<view class="oxy-message-box__content" v-if="messageState.type === 'prompt' || !!messageState.msg || $slots.default">
|
|
38
|
+
<slot
|
|
39
|
+
:msg="messageState.msg"
|
|
40
|
+
:type="messageState.type"
|
|
41
|
+
:inputValue="messageState.inputValue"
|
|
42
|
+
:showErr="messageState.showErr"
|
|
43
|
+
:inputError="messageState.inputError"
|
|
44
|
+
>
|
|
45
|
+
<block v-if="messageState.type === 'prompt'">
|
|
46
|
+
<view v-if="messageState.msg" class="oxy-message-box__content-text oxy-message-box__content-text--prompt">
|
|
47
|
+
{{ messageState.msg }}
|
|
48
|
+
</view>
|
|
49
|
+
<oxy-input
|
|
50
|
+
v-model="messageState.inputValue"
|
|
51
|
+
:type="messageState.inputType"
|
|
52
|
+
:size="messageState.inputSize"
|
|
53
|
+
:placeholder="messageState.inputPlaceholder || translate('inputPlaceholder')"
|
|
54
|
+
@input="inputValChange"
|
|
55
|
+
/>
|
|
56
|
+
<view v-if="messageState.showErr" class="oxy-message-box__input-error">
|
|
57
|
+
{{ messageState.inputError || translate('inputNoValidate') }}
|
|
58
|
+
</view>
|
|
59
|
+
</block>
|
|
60
|
+
<view v-else class="oxy-message-box__content-text">{{ messageState.msg }}</view>
|
|
61
|
+
</slot>
|
|
34
62
|
</view>
|
|
35
63
|
</view>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
|
|
65
|
+
<slot name="actions" :confirm="() => toggleModal('confirm')" :cancel="() => toggleModal('cancel')" :close="() => toggleModal('close')">
|
|
66
|
+
<view :class="actionsClass">
|
|
67
|
+
<oxy-button v-bind="customCancelProps" v-if="showCancelButton" @click="toggleModal('cancel')">
|
|
68
|
+
{{ messageState.cancelButtonText || translate('cancel') }}
|
|
69
|
+
</oxy-button>
|
|
70
|
+
<oxy-button v-bind="customConfirmProps" v-if="showConfirmButton" @click="toggleModal('confirm')">
|
|
71
|
+
{{ messageState.confirmButtonText || translate('confirm') }}
|
|
72
|
+
</oxy-button>
|
|
73
|
+
</view>
|
|
74
|
+
</slot>
|
|
44
75
|
</view>
|
|
45
76
|
</oxy-popup>
|
|
46
77
|
</view>
|
|
@@ -49,7 +80,9 @@
|
|
|
49
80
|
export default {
|
|
50
81
|
name: 'oxy-message-box',
|
|
51
82
|
options: {
|
|
83
|
+
// #ifndef MP-TOUTIAO
|
|
52
84
|
virtualHost: true,
|
|
85
|
+
// #endif
|
|
53
86
|
addGlobalClass: true,
|
|
54
87
|
styleIsolation: 'shared'
|
|
55
88
|
}
|
|
@@ -60,10 +93,11 @@ export default {
|
|
|
60
93
|
import OxyPopup from '../oxy-popup/oxy-popup.vue'
|
|
61
94
|
import OxyButton from '../oxy-button/oxy-button.vue'
|
|
62
95
|
import OxyInput from '../oxy-input/oxy-input.vue'
|
|
63
|
-
import
|
|
64
|
-
import {
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
96
|
+
import OxyIcon from '../oxy-icon/oxy-icon.vue'
|
|
97
|
+
import { computed, onUnmounted, reactive, ref, watch } from 'vue'
|
|
98
|
+
import { messageBoxProps, MESSAGE_BUILTIN_ICON_MAP, type MessageBuiltinIconType, type MessageOptionsWithCallBack, type MessageResult } from './types'
|
|
99
|
+
import { initMessageOptions, removeMessageOptions, resolveMessageScopeId } from '.'
|
|
100
|
+
import { deepAssign, isDef, isFunction, isPromise, isString, isUndefined, omitBy, resolveSizeWithScreenWidth } from '../common/util'
|
|
67
101
|
import { useTranslate } from '../composables/useTranslate'
|
|
68
102
|
import type { ButtonProps } from '../oxy-button/types'
|
|
69
103
|
|
|
@@ -71,20 +105,41 @@ const props = defineProps(messageBoxProps)
|
|
|
71
105
|
|
|
72
106
|
const { translate } = useTranslate('message-box')
|
|
73
107
|
|
|
108
|
+
const iconType = ref<string>('')
|
|
109
|
+
|
|
110
|
+
const iconTypeClass = computed(() => {
|
|
111
|
+
return iconType.value ? `is-${iconType.value}` : ''
|
|
112
|
+
})
|
|
113
|
+
|
|
74
114
|
const rootClass = computed(() => {
|
|
75
115
|
return `oxy-message-box__container ${props.customClass}`
|
|
76
116
|
})
|
|
77
117
|
|
|
78
118
|
const bodyClass = computed(() => {
|
|
79
|
-
return `oxy-message-box__body ${
|
|
119
|
+
return `oxy-message-box__body ${messageState.type === 'prompt' ? 'is-prompt' : ''}`
|
|
80
120
|
})
|
|
81
121
|
|
|
82
122
|
const popupWidth = computed(() => {
|
|
83
123
|
return resolveSizeWithScreenWidth(messageState.width || props.width, { defaultUnit: 'rpx' })
|
|
84
124
|
})
|
|
85
125
|
|
|
86
|
-
const
|
|
87
|
-
|
|
126
|
+
const showCancelButton = computed(() => {
|
|
127
|
+
return !!messageState.showCancelButton && messageState.cancelButtonProps !== null
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
const showConfirmButton = computed(() => {
|
|
131
|
+
return messageState.confirmButtonProps !== null
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
const actionsClass = computed(() => {
|
|
135
|
+
const verticalClass = messageState.actionLayout === 'vertical' ? 'oxy-message-box__actions--vertical' : ''
|
|
136
|
+
const layoutClass = messageState.actionLayout === 'vertical' || showCancelButton.value ? 'oxy-message-box__flex' : 'oxy-message-box__block'
|
|
137
|
+
const themeClass = messageState.theme === 'text' ? 'is-text' : ''
|
|
138
|
+
return `oxy-message-box__actions ${verticalClass} ${layoutClass} ${themeClass}`
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
const scopeId = resolveMessageScopeId()
|
|
142
|
+
const messageOption = initMessageOptions(props.selector, scopeId)
|
|
88
143
|
|
|
89
144
|
const messageState = reactive<MessageOptionsWithCallBack>({
|
|
90
145
|
msg: '', // 消息内容
|
|
@@ -95,6 +150,11 @@ const messageState = reactive<MessageOptionsWithCallBack>({
|
|
|
95
150
|
confirmButtonText: '', // 确定按钮文案
|
|
96
151
|
cancelButtonText: '', // 取消按钮文案
|
|
97
152
|
type: 'alert', // 弹框类型
|
|
153
|
+
theme: 'button', // 按钮风格
|
|
154
|
+
actionLayout: 'horizontal', // 按钮布局
|
|
155
|
+
headerImage: '', // 头图
|
|
156
|
+
icon: '', // 快捷图标名
|
|
157
|
+
showClose: false, // 关闭按钮
|
|
98
158
|
inputType: 'text', // 输入框类型
|
|
99
159
|
inputValue: '', // 输入框初始值
|
|
100
160
|
inputPlaceholder: '', // 输入框placeholder
|
|
@@ -113,9 +173,18 @@ const customConfirmProps = computed(() => {
|
|
|
113
173
|
{
|
|
114
174
|
block: true
|
|
115
175
|
},
|
|
116
|
-
isDef(messageState.confirmButtonProps)
|
|
176
|
+
isDef(messageState.confirmButtonProps) && messageState.confirmButtonProps !== null && typeof messageState.confirmButtonProps === 'object'
|
|
177
|
+
? omitBy(messageState.confirmButtonProps, isUndefined)
|
|
178
|
+
: {}
|
|
117
179
|
)
|
|
118
|
-
|
|
180
|
+
|
|
181
|
+
if (messageState.theme === 'text') {
|
|
182
|
+
buttonProps.type = 'text'
|
|
183
|
+
// oxy-button 在 text 且 round=true 时会清除默认 min-width,保证操作栏可等分布局
|
|
184
|
+
buttonProps.round = true
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
buttonProps.customClass = `${buttonProps.customClass || ''} oxy-message-box__actions-btn oxy-message-box__actions-btn--confirm`
|
|
119
188
|
return buttonProps
|
|
120
189
|
})
|
|
121
190
|
|
|
@@ -128,8 +197,17 @@ const customCancelProps = computed(() => {
|
|
|
128
197
|
block: true,
|
|
129
198
|
type: 'info'
|
|
130
199
|
},
|
|
131
|
-
isDef(messageState.cancelButtonProps)
|
|
200
|
+
isDef(messageState.cancelButtonProps) && messageState.cancelButtonProps !== null && typeof messageState.cancelButtonProps === 'object'
|
|
201
|
+
? omitBy(messageState.cancelButtonProps, isUndefined)
|
|
202
|
+
: {}
|
|
132
203
|
)
|
|
204
|
+
|
|
205
|
+
if (messageState.theme === 'text') {
|
|
206
|
+
buttonProps.type = 'text'
|
|
207
|
+
// oxy-button 在 text 且 round=true 时会清除默认 min-width,保证操作栏可等分布局
|
|
208
|
+
buttonProps.round = true
|
|
209
|
+
}
|
|
210
|
+
|
|
133
211
|
buttonProps.customClass = `${buttonProps.customClass || ''} oxy-message-box__actions-btn`
|
|
134
212
|
return buttonProps
|
|
135
213
|
})
|
|
@@ -157,45 +235,75 @@ watch(
|
|
|
157
235
|
}
|
|
158
236
|
)
|
|
159
237
|
|
|
238
|
+
onUnmounted(() => {
|
|
239
|
+
removeMessageOptions(props.selector, scopeId)
|
|
240
|
+
})
|
|
241
|
+
|
|
160
242
|
/**
|
|
161
243
|
* 点击操作
|
|
162
244
|
* @param action
|
|
163
245
|
*/
|
|
164
|
-
function toggleModal(action: 'confirm' | 'cancel' | 'modal') {
|
|
246
|
+
function toggleModal(action: 'confirm' | 'cancel' | 'modal' | 'close') {
|
|
165
247
|
if (action === 'modal' && !messageState.closeOnClickModal) {
|
|
166
248
|
return
|
|
167
249
|
}
|
|
168
250
|
if (messageState.type === 'prompt' && action === 'confirm' && !validate()) {
|
|
169
251
|
return
|
|
170
252
|
}
|
|
253
|
+
|
|
171
254
|
switch (action) {
|
|
172
255
|
case 'confirm':
|
|
173
256
|
if (messageState.beforeConfirm) {
|
|
174
|
-
messageState.
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
257
|
+
const inputValue = messageState.inputValue || ''
|
|
258
|
+
let handled = false
|
|
259
|
+
|
|
260
|
+
const finishConfirm = (isPass: boolean) => {
|
|
261
|
+
if (handled) return
|
|
262
|
+
handled = true
|
|
263
|
+
if (isPass) {
|
|
264
|
+
handleConfirm({
|
|
265
|
+
action: 'confirm',
|
|
266
|
+
value: inputValue
|
|
267
|
+
})
|
|
182
268
|
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const result = messageState.beforeConfirm({
|
|
272
|
+
value: inputValue,
|
|
273
|
+
resolve: finishConfirm
|
|
183
274
|
})
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
275
|
+
|
|
276
|
+
if (isPromise(result)) {
|
|
277
|
+
result
|
|
278
|
+
.then((isPass) => {
|
|
279
|
+
finishConfirm(!!isPass)
|
|
280
|
+
})
|
|
281
|
+
.catch(() => {})
|
|
282
|
+
return
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (typeof result === 'boolean') {
|
|
286
|
+
finishConfirm(result)
|
|
287
|
+
return
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return
|
|
189
291
|
}
|
|
292
|
+
|
|
293
|
+
handleConfirm({
|
|
294
|
+
action: 'confirm',
|
|
295
|
+
value: messageState.inputValue
|
|
296
|
+
})
|
|
190
297
|
break
|
|
191
298
|
case 'cancel':
|
|
192
299
|
handleCancel({
|
|
193
|
-
action:
|
|
300
|
+
action: 'cancel'
|
|
194
301
|
})
|
|
195
302
|
break
|
|
196
|
-
|
|
303
|
+
case 'modal':
|
|
304
|
+
case 'close':
|
|
197
305
|
handleCancel({
|
|
198
|
-
action:
|
|
306
|
+
action: action
|
|
199
307
|
})
|
|
200
308
|
break
|
|
201
309
|
}
|
|
@@ -224,7 +332,7 @@ function handleCancel(result: MessageResult) {
|
|
|
224
332
|
}
|
|
225
333
|
|
|
226
334
|
/**
|
|
227
|
-
*
|
|
335
|
+
* 如果存在校验规则行为,则进行判断校验是否通过规则。默认不存在校验直接通过。
|
|
228
336
|
*/
|
|
229
337
|
function validate() {
|
|
230
338
|
if (messageState.inputPattern && !messageState.inputPattern.test(String(messageState.inputValue))) {
|
|
@@ -251,9 +359,11 @@ function resetErr(val: boolean) {
|
|
|
251
359
|
messageState.showErr = false
|
|
252
360
|
}
|
|
253
361
|
}
|
|
362
|
+
|
|
254
363
|
function inputValChange({ value }: { value: string | number }) {
|
|
255
364
|
if (value === '') {
|
|
256
365
|
messageState.showErr = false
|
|
366
|
+
messageState.inputValue = value
|
|
257
367
|
return
|
|
258
368
|
}
|
|
259
369
|
messageState.inputValue = value
|
|
@@ -267,15 +377,19 @@ function reset(option: MessageOptionsWithCallBack) {
|
|
|
267
377
|
if (option) {
|
|
268
378
|
messageState.title = isDef(option.title) ? option.title : ''
|
|
269
379
|
messageState.showCancelButton = isDef(option.showCancelButton) ? option.showCancelButton : false
|
|
270
|
-
messageState.show = option.show
|
|
271
|
-
messageState.closeOnClickModal = option.closeOnClickModal
|
|
380
|
+
messageState.show = !!option.show
|
|
381
|
+
messageState.closeOnClickModal = isDef(option.closeOnClickModal) ? option.closeOnClickModal : true
|
|
272
382
|
messageState.confirmButtonText = option.confirmButtonText
|
|
273
383
|
messageState.cancelButtonText = option.cancelButtonText
|
|
274
384
|
messageState.msg = option.msg
|
|
275
385
|
messageState.type = option.type
|
|
386
|
+
messageState.theme = isDef(option.theme) ? option.theme : 'button'
|
|
387
|
+
messageState.actionLayout = isDef(option.actionLayout) ? option.actionLayout : 'horizontal'
|
|
388
|
+
messageState.headerImage = isDef(option.headerImage) ? option.headerImage : ''
|
|
389
|
+
messageState.icon = isDef(option.icon) ? option.icon : ''
|
|
276
390
|
messageState.inputType = option.inputType
|
|
277
391
|
messageState.inputSize = option.inputSize
|
|
278
|
-
messageState.inputValue = option.inputValue
|
|
392
|
+
messageState.inputValue = isDef(option.inputValue) ? option.inputValue : ''
|
|
279
393
|
messageState.inputPlaceholder = option.inputPlaceholder
|
|
280
394
|
messageState.inputPattern = option.inputPattern!
|
|
281
395
|
messageState.inputValidate = option.inputValidate
|
|
@@ -287,8 +401,19 @@ function reset(option: MessageOptionsWithCallBack) {
|
|
|
287
401
|
messageState.zIndex = option.zIndex
|
|
288
402
|
messageState.lazyRender = option.lazyRender
|
|
289
403
|
messageState.width = isDef(option.width) ? option.width : props.width
|
|
404
|
+
messageState.showClose = isDef(option.showClose) ? option.showClose : false
|
|
290
405
|
messageState.confirmButtonProps = option.confirmButtonProps
|
|
291
406
|
messageState.cancelButtonProps = option.cancelButtonProps
|
|
407
|
+
|
|
408
|
+
const iconName = option.iconProps?.name || option.icon
|
|
409
|
+
if (isString(iconName) && iconName in MESSAGE_BUILTIN_ICON_MAP) {
|
|
410
|
+
const builtinIcon = MESSAGE_BUILTIN_ICON_MAP[iconName as MessageBuiltinIconType]
|
|
411
|
+
messageState.iconProps = { ...option.iconProps, name: builtinIcon }
|
|
412
|
+
iconType.value = iconName
|
|
413
|
+
} else {
|
|
414
|
+
messageState.iconProps = option.iconProps
|
|
415
|
+
iconType.value = ''
|
|
416
|
+
}
|
|
292
417
|
}
|
|
293
418
|
}
|
|
294
419
|
</script>
|
|
@@ -1,13 +1,36 @@
|
|
|
1
1
|
import { baseProps, makeStringProp, makeBooleanProp } from '../common/props'
|
|
2
2
|
import type { ButtonProps } from '../oxy-button/types'
|
|
3
|
+
import type { IconProps } from '../oxy-icon/types'
|
|
3
4
|
import { type InputSize, type InputType } from '../oxy-input/types'
|
|
4
5
|
|
|
5
6
|
export type MessageType = 'alert' | 'confirm' | 'prompt'
|
|
7
|
+
export type MessageTheme = 'button' | 'text'
|
|
8
|
+
export type MessageActionLayout = 'horizontal' | 'vertical'
|
|
9
|
+
export type MessageBuiltinIconType = 'success' | 'info' | 'warning' | 'danger'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 内置图标类型和 oxy-icon 图标名映射
|
|
13
|
+
*/
|
|
14
|
+
export const MESSAGE_BUILTIN_ICON_MAP: Record<MessageBuiltinIconType, string> = {
|
|
15
|
+
success: 'check-circle-filled',
|
|
16
|
+
info: 'info-circle-filled',
|
|
17
|
+
warning: 'warning',
|
|
18
|
+
danger: 'error-circle-filled'
|
|
19
|
+
}
|
|
6
20
|
|
|
7
21
|
export type MessageBeforeConfirmOption = {
|
|
22
|
+
/**
|
|
23
|
+
* 弹框当前输入值(仅 prompt 时有意义)
|
|
24
|
+
*/
|
|
25
|
+
value: string | number
|
|
26
|
+
/**
|
|
27
|
+
* 兼容旧版 beforeConfirm 回调方式,调用后决定是否继续确认
|
|
28
|
+
*/
|
|
8
29
|
resolve: (isPass: boolean) => void
|
|
9
30
|
}
|
|
10
31
|
|
|
32
|
+
export type MessageBeforeConfirm = (options: MessageBeforeConfirmOption) => void | boolean | Promise<boolean>
|
|
33
|
+
|
|
11
34
|
export type MessageOptions = {
|
|
12
35
|
/**
|
|
13
36
|
* 标题
|
|
@@ -37,6 +60,41 @@ export type MessageOptions = {
|
|
|
37
60
|
* 弹框类型
|
|
38
61
|
*/
|
|
39
62
|
type?: MessageType
|
|
63
|
+
/**
|
|
64
|
+
* 弹框操作按钮风格
|
|
65
|
+
* @default 'button'
|
|
66
|
+
*/
|
|
67
|
+
theme?: MessageTheme
|
|
68
|
+
/**
|
|
69
|
+
* 操作按钮布局方式
|
|
70
|
+
* @default 'horizontal'
|
|
71
|
+
*/
|
|
72
|
+
actionLayout?: MessageActionLayout
|
|
73
|
+
/**
|
|
74
|
+
* 顶部头图地址
|
|
75
|
+
* @default ''
|
|
76
|
+
*/
|
|
77
|
+
headerImage?: string
|
|
78
|
+
/**
|
|
79
|
+
* 图标名称,支持内置类型(success / info / warning / danger)或 oxy-icon 图标名
|
|
80
|
+
* @default ''
|
|
81
|
+
*/
|
|
82
|
+
icon?: MessageBuiltinIconType | string
|
|
83
|
+
/**
|
|
84
|
+
* 图标颜色(优先级高于内置类型颜色)
|
|
85
|
+
* @default ''
|
|
86
|
+
*/
|
|
87
|
+
iconColor?: string
|
|
88
|
+
/**
|
|
89
|
+
* 图标组件透传属性
|
|
90
|
+
* @default undefined
|
|
91
|
+
*/
|
|
92
|
+
iconProps?: Partial<IconProps>
|
|
93
|
+
/**
|
|
94
|
+
* 是否显示右上角关闭按钮
|
|
95
|
+
* @default false
|
|
96
|
+
*/
|
|
97
|
+
showClose?: boolean
|
|
40
98
|
/**
|
|
41
99
|
* 当type为prompt时,输入框类型
|
|
42
100
|
*/
|
|
@@ -84,7 +142,7 @@ export type MessageOptions = {
|
|
|
84
142
|
/**
|
|
85
143
|
* 确认前钩子
|
|
86
144
|
*/
|
|
87
|
-
beforeConfirm?:
|
|
145
|
+
beforeConfirm?: MessageBeforeConfirm
|
|
88
146
|
/**
|
|
89
147
|
* 取消按钮Props
|
|
90
148
|
*/
|
|
@@ -101,7 +159,7 @@ export type MessageOptionsWithCallBack = MessageOptions & {
|
|
|
101
159
|
fail?: (res: MessageResult) => void
|
|
102
160
|
}
|
|
103
161
|
|
|
104
|
-
export type ActionType = 'confirm' | 'cancel' | 'modal'
|
|
162
|
+
export type ActionType = 'confirm' | 'cancel' | 'modal' | 'close'
|
|
105
163
|
|
|
106
164
|
export type InputValidate = (inputValue: string | number) => boolean
|
|
107
165
|
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view :style="placeholderStyle">
|
|
3
3
|
<view :class="`oxy-navbar ${customClass} ${fixed ? 'is-fixed' : ''} ${bordered ? 'is-border' : ''}`" :style="rootStyle">
|
|
4
|
-
<view
|
|
5
|
-
class="oxy-navbar__content"
|
|
6
|
-
:style="{ width: fixed && avoidMenuButtonMode === 'full' ? unitConvert(navWidth, 0, { output: 'px' }) : '100%' }"
|
|
7
|
-
>
|
|
4
|
+
<view class="oxy-navbar__content" :style="{ width: avoidMenuButtonMode === 'full' ? unitConvert(navWidth, 0, { output: 'px' }) : '100%' }">
|
|
8
5
|
<view class="oxy-navbar__capsule" v-if="$slots.capsule">
|
|
9
6
|
<slot name="capsule" />
|
|
10
7
|
</view>
|
|
@@ -42,7 +39,9 @@
|
|
|
42
39
|
export default {
|
|
43
40
|
name: 'oxy-navbar',
|
|
44
41
|
options: {
|
|
42
|
+
// #ifndef MP-TOUTIAO
|
|
45
43
|
virtualHost: true,
|
|
44
|
+
// #endif
|
|
46
45
|
addGlobalClass: true,
|
|
47
46
|
styleIsolation: 'shared'
|
|
48
47
|
}
|
|
@@ -93,7 +92,7 @@ const rootStyle = computed(() => {
|
|
|
93
92
|
|
|
94
93
|
const rightStyle = computed(() => {
|
|
95
94
|
const style: CSSProperties = {}
|
|
96
|
-
if (props.
|
|
95
|
+
if (props.avoidMenuButtonMode === 'right' && navWidth.value !== 'auto') {
|
|
97
96
|
style['right'] = `calc(100% - ${unitConvert(navWidth.value, 0, { output: 'px' })})`
|
|
98
97
|
}
|
|
99
98
|
return style
|
|
@@ -104,7 +103,7 @@ onMounted(() => {
|
|
|
104
103
|
setPlaceholderHeight()
|
|
105
104
|
}
|
|
106
105
|
// #ifdef MP-WEIXIN
|
|
107
|
-
if (props.
|
|
106
|
+
if (props.avoidMenuButtonMode) {
|
|
108
107
|
const menuBtnInfo = uni.getMenuButtonBoundingClientRect()
|
|
109
108
|
navWidth.value = menuBtnInfo.left
|
|
110
109
|
}
|
|
@@ -125,6 +124,10 @@ function handleClickRight() {
|
|
|
125
124
|
|
|
126
125
|
const { proxy } = getCurrentInstance() as any
|
|
127
126
|
|
|
127
|
+
/**
|
|
128
|
+
* 计算占位高度。fixed 模式下,查询 navbar 的 rect 得到实际占用高度,
|
|
129
|
+
* 转换为 rpx 用于占位,避免内容被 fixed 导航栏遮挡。
|
|
130
|
+
*/
|
|
128
131
|
function setPlaceholderHeight() {
|
|
129
132
|
if (!props.fixed || !props.placeholder) {
|
|
130
133
|
placeholderHeight.value = ''
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
export default {
|
|
20
20
|
name: 'oxy-notice-bar',
|
|
21
21
|
options: {
|
|
22
|
+
// #ifndef MP-TOUTIAO
|
|
22
23
|
virtualHost: true,
|
|
24
|
+
// #endif
|
|
23
25
|
addGlobalClass: true,
|
|
24
26
|
styleIsolation: 'shared'
|
|
25
27
|
}
|
|
@@ -130,10 +132,17 @@ function reset() {
|
|
|
130
132
|
startTransition()
|
|
131
133
|
}
|
|
132
134
|
|
|
135
|
+
/**
|
|
136
|
+
* 启动滚动动画(横向走马灯或纵向轮播)
|
|
137
|
+
* 在 nextTick 后调用 scroll() 计算并设置 CSS transition
|
|
138
|
+
*/
|
|
133
139
|
function startTransition() {
|
|
134
140
|
nextTick(() => scroll())
|
|
135
141
|
}
|
|
136
142
|
|
|
143
|
+
/**
|
|
144
|
+
* 停止动画:清除所有 transition 属性并重置状态
|
|
145
|
+
*/
|
|
137
146
|
function stopTransition() {
|
|
138
147
|
transitionState.transitionProperty = 'unset'
|
|
139
148
|
transitionState.transitionDelay = 'unset'
|
|
@@ -149,6 +158,12 @@ function handleClose() {
|
|
|
149
158
|
emit('close')
|
|
150
159
|
}
|
|
151
160
|
|
|
161
|
+
/**
|
|
162
|
+
* 设置 CSS transition 属性(横向 translateX 或纵向 translateY)
|
|
163
|
+
* @param duration - 动画时长(秒)
|
|
164
|
+
* @param delay - 延迟时间(秒)
|
|
165
|
+
* @param translate - 位移距离(像素)
|
|
166
|
+
*/
|
|
152
167
|
function setTransition({ duration, delay, translate }: { duration: number; delay: number; translate: number }) {
|
|
153
168
|
transitionState.transitionProperty = 'all'
|
|
154
169
|
transitionState.transitionDelay = `${delay}s`
|
|
@@ -161,6 +176,10 @@ function queryRect() {
|
|
|
161
176
|
return Promise.all([getRect($wrap, false, proxy), getRect($content, false, proxy)])
|
|
162
177
|
}
|
|
163
178
|
|
|
179
|
+
/**
|
|
180
|
+
* 纵向滚动动画:根据当前索引计算 translateY,实现轮播滚动
|
|
181
|
+
* @param height - 内容区域总高度
|
|
182
|
+
*/
|
|
164
183
|
async function verticalAnimate(height: number) {
|
|
165
184
|
const translate = -(height / (textArray.value.length + 1)) * (currentIndex.value + 1)
|
|
166
185
|
setTransition({
|
|
@@ -170,6 +189,11 @@ async function verticalAnimate(height: number) {
|
|
|
170
189
|
})
|
|
171
190
|
}
|
|
172
191
|
|
|
192
|
+
/**
|
|
193
|
+
* 核心滚动逻辑:查询容器/内容尺寸后计算动画参数
|
|
194
|
+
* 横向模式:设置 translateX 动画使内容从右到左滚动
|
|
195
|
+
* 纵向模式(多条文本):调用 verticalAnimate 逐条轮播
|
|
196
|
+
*/
|
|
173
197
|
async function scroll() {
|
|
174
198
|
const [wRect, cRect] = await queryRect()
|
|
175
199
|
if (!wRect.width || !cRect.width || !cRect.height) return
|
|
@@ -201,6 +225,11 @@ function next() {
|
|
|
201
225
|
emit('next', currentIndex.value)
|
|
202
226
|
}
|
|
203
227
|
|
|
228
|
+
/**
|
|
229
|
+
* 动画结束回调:无缝循环
|
|
230
|
+
* 横向模式:瞬间重置到右侧,查询新宽度后继续滚动
|
|
231
|
+
* 纵向模式:轮播下一条文本
|
|
232
|
+
*/
|
|
204
233
|
function animationEnd() {
|
|
205
234
|
if (isHorizontal.value) {
|
|
206
235
|
setTransition({
|
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
import { inject, provide, reactive, ref } from 'vue'
|
|
2
1
|
import type { NotifyProps } from './types'
|
|
3
2
|
import { deepMerge, isString } from '../common/util'
|
|
3
|
+
import { createSharedState } from '../composables/useSharedState'
|
|
4
4
|
|
|
5
5
|
let timer: ReturnType<typeof setTimeout>
|
|
6
6
|
let currentOptions = getDefaultOptions()
|
|
7
7
|
const notifyDefaultOptionKey = '__NOTIFY_OPTION__'
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
export const setNotifyDefaultOptions = (options: NotifyProps) => {
|
|
10
10
|
currentOptions = deepMerge(currentOptions, options) as NotifyProps
|
|
11
11
|
}
|
|
12
12
|
export const resetNotifyDefaultOptions = () => {
|
|
13
13
|
currentOptions = getDefaultOptions()
|
|
14
14
|
}
|
|
15
|
-
export const useNotify = (selector: string = '') => {
|
|
16
|
-
const notifyOptionKey = getNotifyOptionKey(selector)
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const {
|
|
17
|
+
getState: getNotifyOptions,
|
|
18
|
+
initState: initNotifyOptions,
|
|
19
|
+
removeState: removeNotifyOptions,
|
|
20
|
+
resolveScopeId: resolveNotifyScopeId
|
|
21
|
+
} = createSharedState<NotifyProps>(() => currentOptions, { namespace: 'notify' })
|
|
22
|
+
|
|
23
|
+
export { getNotifyOptions, initNotifyOptions, removeNotifyOptions, resolveNotifyScopeId }
|
|
24
|
+
|
|
25
|
+
export const useNotify = (selector: string = '') => {
|
|
26
|
+
const scopeId = resolveNotifyScopeId()
|
|
23
27
|
const showNotify = (option: NotifyProps | string) => {
|
|
28
|
+
const notifyOption = initNotifyOptions(selector, scopeId)
|
|
24
29
|
const options = deepMerge(currentOptions, isString(option) ? { message: option } : option) as NotifyProps
|
|
25
30
|
notifyOption.value = deepMerge(options, { visible: true })
|
|
26
31
|
if (notifyOption.value.duration && notifyOption.value.duration > 0) {
|
|
@@ -29,10 +34,9 @@ export const useNotify = (selector: string = '') => {
|
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
36
|
const closeNotify = () => {
|
|
37
|
+
const notifyOption = initNotifyOptions(selector, scopeId)
|
|
32
38
|
timer && clearTimeout(timer)
|
|
33
|
-
|
|
34
|
-
notifyOption.value.visible = false
|
|
35
|
-
}
|
|
39
|
+
notifyOption.value.visible = false
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
return {
|