From 96dcae61aedf4ef23adb090fac1e6e5c6b9e7a4e Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Sat, 15 Jul 2023 17:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 26 + App.vue | 30 +- api/oa.js | 21 + api/oaApi.js | 60 + api/pubic.js | 17 + api/upload.js | 59 + api/user.js | 743 +++++++++ components/tabbar.vue | 154 ++ components/verify/utils/ase.js | 12 + components/verify/verify.vue | 515 +++++++ components/verify/verifyPoint/verifyPoint.vue | 544 +++++++ .../verify/verifySlider/verifySlider.vue | 648 ++++++++ config/app.js | 53 + config/cache.js | 41 + libs/login.js | 104 ++ libs/routine.js | 186 +++ libs/uniApi.js | 474 ++++++ main.js | 37 +- manifest.json | 136 +- nk-oa/.gitignore | 26 + nk-oa/App.vue | 23 + nk-oa/api/oa.js | 21 + nk-oa/api/oaApi.js | 60 + nk-oa/api/pubic.js | 17 + nk-oa/api/upload.js | 59 + nk-oa/api/user.js | 743 +++++++++ nk-oa/components/tabbar.vue | 154 ++ nk-oa/components/verify/utils/ase.js | 12 + nk-oa/components/verify/verify.vue | 515 +++++++ .../verify/verifyPoint/verifyPoint.vue | 544 +++++++ .../verify/verifySlider/verifySlider.vue | 648 ++++++++ nk-oa/config/app.js | 53 + nk-oa/config/cache.js | 41 + nk-oa/index.html | 20 + nk-oa/libs/login.js | 104 ++ nk-oa/libs/routine.js | 186 +++ nk-oa/libs/uniApi.js | 474 ++++++ nk-oa/main.js | 25 + nk-oa/manifest.json | 72 + nk-oa/pages.json | 137 ++ nk-oa/pages/index/index.vue | 52 + nk-oa/pages/oaExamine/oaExamine.vue | 260 ++++ nk-oa/pages/oaHome/oaHome.vue | 389 +++++ nk-oa/pages/oaMy/oaMy.vue | 227 +++ nk-oa/pages/oaTask/oaTask.vue | 344 +++++ nk-oa/pages/users/login.vue | 294 ++++ nk-oa/pages/views/application.vue | 102 ++ nk-oa/pages/views/com_approve.vue | 195 +++ nk-oa/pages/views/leave_request.vue | 536 +++++++ nk-oa/pages/views/new_task.vue | 604 ++++++++ nk-oa/pages/views/personal_center.vue | 181 +++ nk-oa/pages/views/personal_center_two.vue | 219 +++ nk-oa/pages/views/public_document.vue | 178 +++ nk-oa/pages/views/task_details.vue | 392 +++++ nk-oa/static/css/base.css | 427 ++++++ nk-oa/static/css/style.scss | 907 +++++++++++ nk-oa/static/logo.png | Bin 0 -> 4023 bytes nk-oa/static/server/server.js | 380 +++++ nk-oa/static/tabs-icon/Task-a.png | Bin 0 -> 1776 bytes nk-oa/static/tabs-icon/Task.png | Bin 0 -> 1999 bytes nk-oa/static/tabs-icon/approval-a.png | Bin 0 -> 1066 bytes nk-oa/static/tabs-icon/approval.png | Bin 0 -> 1277 bytes nk-oa/static/tabs-icon/home-a.png | Bin 0 -> 1543 bytes nk-oa/static/tabs-icon/home.png | Bin 0 -> 1703 bytes nk-oa/static/tabs-icon/my-a.png | Bin 0 -> 1711 bytes nk-oa/static/tabs-icon/my.png | Bin 0 -> 2029 bytes nk-oa/store/getters.js | 11 + nk-oa/store/index.js | 20 + nk-oa/store/modules/app.js | 70 + nk-oa/store/modules/index.js | 13 + nk-oa/uni.scss | 78 + nk-oa/uni_modules/uview-ui/LICENSE | 21 + nk-oa/uni_modules/uview-ui/README.md | 66 + nk-oa/uni_modules/uview-ui/changelog.md | 362 +++++ .../uview-ui/components/u--form/u--form.vue | 78 + .../uview-ui/components/u--image/u--image.vue | 47 + .../uview-ui/components/u--input/u--input.vue | 73 + .../uview-ui/components/u--text/u--text.vue | 44 + .../components/u--textarea/u--textarea.vue | 48 + .../components/u-action-sheet/props.js | 54 + .../u-action-sheet/u-action-sheet.vue | 278 ++++ .../uview-ui/components/u-album/props.js | 59 + .../uview-ui/components/u-album/u-album.vue | 259 ++++ .../uview-ui/components/u-alert/props.js | 44 + .../uview-ui/components/u-alert/u-alert.vue | 243 +++ .../components/u-avatar-group/props.js | 52 + .../u-avatar-group/u-avatar-group.vue | 103 ++ .../uview-ui/components/u-avatar/props.js | 78 + .../uview-ui/components/u-avatar/u-avatar.vue | 172 +++ .../uview-ui/components/u-back-top/props.js | 54 + .../components/u-back-top/u-back-top.vue | 129 ++ .../uview-ui/components/u-badge/props.js | 72 + .../uview-ui/components/u-badge/u-badge.vue | 171 +++ .../uview-ui/components/u-button/nvue.scss | 46 + .../uview-ui/components/u-button/props.js | 161 ++ .../uview-ui/components/u-button/u-button.vue | 490 ++++++ .../uview-ui/components/u-button/vue.scss | 80 + .../uview-ui/components/u-calendar/header.vue | 99 ++ .../uview-ui/components/u-calendar/month.vue | 579 +++++++ .../uview-ui/components/u-calendar/props.js | 144 ++ .../components/u-calendar/u-calendar.vue | 384 +++++ .../uview-ui/components/u-calendar/util.js | 85 ++ .../components/u-car-keyboard/props.js | 14 + .../u-car-keyboard/u-car-keyboard.vue | 311 ++++ .../uview-ui/components/u-cell-group/props.js | 14 + .../components/u-cell-group/u-cell-group.vue | 61 + .../uview-ui/components/u-cell/props.js | 110 ++ .../uview-ui/components/u-cell/u-cell.vue | 229 +++ .../components/u-checkbox-group/props.js | 82 + .../u-checkbox-group/u-checkbox-group.vue | 103 ++ .../uview-ui/components/u-checkbox/props.js | 69 + .../components/u-checkbox/u-checkbox.vue | 344 +++++ .../components/u-circle-progress/props.js | 8 + .../u-circle-progress/u-circle-progress.vue | 198 +++ .../uview-ui/components/u-code-input/props.js | 79 + .../components/u-code-input/u-code-input.vue | 252 ++++ .../uview-ui/components/u-code/props.js | 34 + .../uview-ui/components/u-code/u-code.vue | 129 ++ .../uview-ui/components/u-col/props.js | 29 + .../uview-ui/components/u-col/u-col.vue | 162 ++ .../components/u-collapse-item/props.js | 59 + .../u-collapse-item/u-collapse-item.vue | 225 +++ .../uview-ui/components/u-collapse/props.js | 19 + .../components/u-collapse/u-collapse.vue | 90 ++ .../components/u-column-notice/props.js | 55 + .../u-column-notice/u-column-notice.vue | 160 ++ .../uview-ui/components/u-count-down/props.js | 24 + .../components/u-count-down/u-count-down.vue | 163 ++ .../uview-ui/components/u-count-down/utils.js | 62 + .../uview-ui/components/u-count-to/props.js | 59 + .../components/u-count-to/u-count-to.vue | 184 +++ .../components/u-datetime-picker/props.js | 116 ++ .../u-datetime-picker/u-datetime-picker.vue | 360 +++++ .../uview-ui/components/u-divider/props.js | 44 + .../components/u-divider/u-divider.vue | 116 ++ .../components/u-dropdown-item/props.js | 36 + .../u-dropdown-item/u-dropdown-item.vue | 127 ++ .../uview-ui/components/u-dropdown/props.js | 65 + .../components/u-dropdown/u-dropdown.vue | 127 ++ .../uview-ui/components/u-empty/props.js | 59 + .../uview-ui/components/u-empty/u-empty.vue | 128 ++ .../uview-ui/components/u-form-item/props.js | 48 + .../components/u-form-item/u-form-item.vue | 235 +++ .../uview-ui/components/u-form/props.js | 45 + .../uview-ui/components/u-form/u-form.vue | 214 +++ .../uview-ui/components/u-gap/props.js | 24 + .../uview-ui/components/u-gap/u-gap.vue | 38 + .../uview-ui/components/u-grid-item/props.js | 14 + .../components/u-grid-item/u-grid-item.vue | 209 +++ .../uview-ui/components/u-grid/props.js | 19 + .../uview-ui/components/u-grid/u-grid.vue | 97 ++ .../uview-ui/components/u-icon/icons.js | 214 +++ .../uview-ui/components/u-icon/props.js | 89 ++ .../uview-ui/components/u-icon/u-icon.vue | 234 +++ .../uview-ui/components/u-image/props.js | 84 ++ .../uview-ui/components/u-image/u-image.vue | 232 +++ .../components/u-index-anchor/props.js | 29 + .../u-index-anchor/u-index-anchor.vue | 91 ++ .../uview-ui/components/u-index-item/props.js | 5 + .../components/u-index-item/u-index-item.vue | 87 ++ .../uview-ui/components/u-index-list/props.js | 29 + .../components/u-index-list/u-index-list.vue | 440 ++++++ .../uview-ui/components/u-input/props.js | 187 +++ .../uview-ui/components/u-input/u-input.vue | 354 +++++ .../uview-ui/components/u-keyboard/props.js | 84 ++ .../components/u-keyboard/u-keyboard.vue | 164 ++ .../components/u-line-progress/props.js | 28 + .../u-line-progress/u-line-progress.vue | 144 ++ .../uview-ui/components/u-line/props.js | 33 + .../uview-ui/components/u-line/u-line.vue | 62 + .../uview-ui/components/u-link/props.js | 39 + .../uview-ui/components/u-link/u-link.vue | 83 + .../uview-ui/components/u-list-item/props.js | 9 + .../components/u-list-item/u-list-item.vue | 116 ++ .../uview-ui/components/u-list/props.js | 76 + .../uview-ui/components/u-list/u-list.vue | 157 ++ .../components/u-loading-icon/props.js | 59 + .../u-loading-icon/u-loading-icon.vue | 343 +++++ .../components/u-loading-page/props.js | 49 + .../u-loading-page/u-loading-page.vue | 115 ++ .../uview-ui/components/u-loadmore/props.js | 94 ++ .../components/u-loadmore/u-loadmore.vue | 150 ++ .../uview-ui/components/u-modal/props.js | 84 ++ .../uview-ui/components/u-modal/u-modal.vue | 227 +++ .../uview-ui/components/u-navbar/props.js | 84 ++ .../uview-ui/components/u-navbar/u-navbar.vue | 186 +++ .../uview-ui/components/u-no-network/props.js | 19 + .../components/u-no-network/u-no-network.vue | 220 +++ .../uview-ui/components/u-notice-bar/props.js | 70 + .../components/u-notice-bar/u-notice-bar.vue | 101 ++ .../uview-ui/components/u-notify/props.js | 49 + .../uview-ui/components/u-notify/u-notify.vue | 211 +++ .../uview-ui/components/u-number-box/props.js | 109 ++ .../components/u-number-box/u-number-box.vue | 416 +++++ .../components/u-number-keyboard/props.js | 19 + .../u-number-keyboard/u-number-keyboard.vue | 196 +++ .../uview-ui/components/u-overlay/props.js | 24 + .../components/u-overlay/u-overlay.vue | 68 + .../uview-ui/components/u-parse/node/node.vue | 499 ++++++ .../uview-ui/components/u-parse/parser.js | 1075 +++++++++++++ .../uview-ui/components/u-parse/props.js | 45 + .../uview-ui/components/u-parse/u-parse.vue | 366 +++++ .../components/u-picker-column/props.js | 5 + .../u-picker-column/u-picker-column.vue | 27 + .../uview-ui/components/u-picker/props.js | 79 + .../uview-ui/components/u-picker/u-picker.vue | 283 ++++ .../uview-ui/components/u-popup/props.js | 79 + .../uview-ui/components/u-popup/u-popup.vue | 304 ++++ .../components/u-radio-group/props.js | 85 ++ .../u-radio-group/u-radio-group.vue | 108 ++ .../uview-ui/components/u-radio/props.js | 64 + .../uview-ui/components/u-radio/u-radio.vue | 339 +++++ .../uview-ui/components/u-rate/props.js | 69 + .../uview-ui/components/u-rate/u-rate.vue | 306 ++++ .../uview-ui/components/u-read-more/props.js | 61 + .../components/u-read-more/u-read-more.vue | 157 ++ .../uview-ui/components/u-row-notice/props.js | 39 + .../components/u-row-notice/u-row-notice.vue | 330 ++++ .../uview-ui/components/u-row/props.js | 19 + .../uview-ui/components/u-row/u-row.vue | 93 ++ .../components/u-safe-bottom/props.js | 5 + .../u-safe-bottom/u-safe-bottom.vue | 56 + .../uview-ui/components/u-scroll-list/nvue.js | 28 + .../components/u-scroll-list/other.js | 0 .../components/u-scroll-list/props.js | 34 + .../components/u-scroll-list/scrollWxs.wxs | 50 + .../u-scroll-list/u-scroll-list.vue | 224 +++ .../uview-ui/components/u-search/props.js | 118 ++ .../uview-ui/components/u-search/u-search.vue | 303 ++++ .../uview-ui/components/u-skeleton/props.js | 59 + .../components/u-skeleton/u-skeleton.vue | 244 +++ .../uview-ui/components/u-slider/mpother.js | 113 ++ .../uview-ui/components/u-slider/mpwxs.js | 42 + .../uview-ui/components/u-slider/mpwxs.wxs | 121 ++ .../components/u-slider/nvue - 副本.js | 180 +++ .../uview-ui/components/u-slider/nvue.js | 193 +++ .../uview-ui/components/u-slider/props.js | 54 + .../uview-ui/components/u-slider/u-slider.vue | 55 + .../uview-ui/components/u-status-bar/props.js | 8 + .../components/u-status-bar/u-status-bar.vue | 46 + .../uview-ui/components/u-steps-item/props.js | 24 + .../components/u-steps-item/u-steps-item.vue | 316 ++++ .../uview-ui/components/u-steps/props.js | 39 + .../uview-ui/components/u-steps/u-steps.vue | 80 + .../uview-ui/components/u-sticky/props.js | 40 + .../uview-ui/components/u-sticky/u-sticky.vue | 212 +++ .../uview-ui/components/u-subsection/props.js | 49 + .../components/u-subsection/u-subsection.vue | 299 ++++ .../u-swipe-action-item/index - backup.wxs | 256 ++++ .../components/u-swipe-action-item/index.wxs | 225 +++ .../u-swipe-action-item/nvue - backup.js | 270 ++++ .../components/u-swipe-action-item/nvue.js | 174 +++ .../components/u-swipe-action-item/props.js | 41 + .../u-swipe-action-item.vue | 190 +++ .../components/u-swipe-action-item/wxs.js | 15 + .../components/u-swipe-action/props.js | 9 + .../u-swipe-action/u-swipe-action.vue | 67 + .../components/u-swiper-indicator/props.js | 29 + .../u-swiper-indicator/u-swiper-indicator.vue | 110 ++ .../uview-ui/components/u-swiper/props.js | 125 ++ .../uview-ui/components/u-swiper/u-swiper.vue | 255 ++++ .../uview-ui/components/u-switch/props.js | 54 + .../uview-ui/components/u-switch/u-switch.vue | 177 +++ .../components/u-tabbar-item/props.js | 35 + .../u-tabbar-item/u-tabbar-item.vue | 142 ++ .../uview-ui/components/u-tabbar/props.js | 44 + .../uview-ui/components/u-tabbar/u-tabbar.vue | 141 ++ .../uview-ui/components/u-table/props.js | 5 + .../uview-ui/components/u-table/u-table.vue | 29 + .../uview-ui/components/u-tabs-item/props.js | 5 + .../components/u-tabs-item/u-tabs-item.vue | 29 + .../uview-ui/components/u-tabs/props.js | 64 + .../uview-ui/components/u-tabs/u-tabs.vue | 354 +++++ .../uview-ui/components/u-tag/props.js | 84 ++ .../uview-ui/components/u-tag/u-tag.vue | 358 +++++ .../uview-ui/components/u-td/props.js | 5 + .../uview-ui/components/u-td/u-td.vue | 31 + .../uview-ui/components/u-text/props.js | 110 ++ .../uview-ui/components/u-text/u-text.vue | 223 +++ .../uview-ui/components/u-text/value.js | 85 ++ .../uview-ui/components/u-textarea/props.js | 119 ++ .../components/u-textarea/u-textarea.vue | 239 +++ .../uview-ui/components/u-toast/u-toast.vue | 291 ++++ .../uview-ui/components/u-toolbar/props.js | 34 + .../components/u-toolbar/u-toolbar.vue | 102 ++ .../components/u-tooltip/clipboard.min.js | 58 + .../uview-ui/components/u-tooltip/props.js | 59 + .../components/u-tooltip/u-tooltip.vue | 365 +++++ .../uview-ui/components/u-tr/props.js | 5 + .../uview-ui/components/u-tr/u-tr.vue | 31 + .../components/u-transition/nvue.ani-map.js | 68 + .../uview-ui/components/u-transition/props.js | 24 + .../components/u-transition/transition.js | 157 ++ .../components/u-transition/u-transition.vue | 92 ++ .../u-transition/vue.ani-style.scss | 113 ++ .../uview-ui/components/u-upload/mixin.js | 21 + .../uview-ui/components/u-upload/props.js | 124 ++ .../uview-ui/components/u-upload/u-upload.vue | 558 +++++++ .../uview-ui/components/u-upload/utils.js | 151 ++ .../uview-ui/components/uview-ui/uview-ui.vue | 15 + nk-oa/uni_modules/uview-ui/index.js | 79 + nk-oa/uni_modules/uview-ui/index.scss | 23 + .../uni_modules/uview-ui/libs/config/color.js | 17 + .../uview-ui/libs/config/config.js | 34 + .../uni_modules/uview-ui/libs/config/props.js | 190 +++ .../uview-ui/libs/config/props/actionSheet.js | 25 + .../uview-ui/libs/config/props/album.js | 25 + .../uview-ui/libs/config/props/alert.js | 22 + .../uview-ui/libs/config/props/avatar.js | 28 + .../uview-ui/libs/config/props/avatarGroup.js | 23 + .../uview-ui/libs/config/props/backtop.js | 27 + .../uview-ui/libs/config/props/badge.js | 27 + .../uview-ui/libs/config/props/button.js | 42 + .../uview-ui/libs/config/props/calendar.js | 42 + .../uview-ui/libs/config/props/carKeyboard.js | 15 + .../uview-ui/libs/config/props/cell.js | 35 + .../uview-ui/libs/config/props/cellGroup.js | 17 + .../uview-ui/libs/config/props/checkbox.js | 27 + .../libs/config/props/checkboxGroup.js | 29 + .../libs/config/props/circleProgress.js | 15 + .../uview-ui/libs/config/props/code.js | 21 + .../uview-ui/libs/config/props/codeInput.js | 29 + .../uview-ui/libs/config/props/col.js | 19 + .../uview-ui/libs/config/props/collapse.js | 17 + .../libs/config/props/collapseItem.js | 25 + .../libs/config/props/columnNotice.js | 24 + .../uview-ui/libs/config/props/countDown.js | 18 + .../uview-ui/libs/config/props/countTo.js | 25 + .../libs/config/props/datetimePicker.js | 36 + .../uview-ui/libs/config/props/divider.js | 23 + .../uview-ui/libs/config/props/empty.js | 26 + .../uview-ui/libs/config/props/form.js | 22 + .../uview-ui/libs/config/props/formItem.js | 23 + .../uview-ui/libs/config/props/gap.js | 19 + .../uview-ui/libs/config/props/grid.js | 17 + .../uview-ui/libs/config/props/gridItem.js | 16 + .../uview-ui/libs/config/props/icon.js | 36 + .../uview-ui/libs/config/props/image.js | 30 + .../uview-ui/libs/config/props/indexAnchor.js | 19 + .../uview-ui/libs/config/props/indexList.js | 19 + .../uview-ui/libs/config/props/input.js | 48 + .../uview-ui/libs/config/props/keyboard.js | 30 + .../uview-ui/libs/config/props/line.js | 20 + .../libs/config/props/lineProgress.js | 19 + .../uview-ui/libs/config/props/link.js | 26 + .../uview-ui/libs/config/props/list.js | 28 + .../uview-ui/libs/config/props/listItem.js | 15 + .../uview-ui/libs/config/props/loadingIcon.js | 30 + .../uview-ui/libs/config/props/loadingPage.js | 23 + .../uview-ui/libs/config/props/loadmore.js | 32 + .../uview-ui/libs/config/props/modal.js | 30 + .../uview-ui/libs/config/props/navbar.js | 32 + .../uview-ui/libs/config/props/noNetwork.js | 18 + .../uview-ui/libs/config/props/noticeBar.js | 27 + .../uview-ui/libs/config/props/notify.js | 22 + .../uview-ui/libs/config/props/numberBox.js | 35 + .../libs/config/props/numberKeyboard.js | 17 + .../uview-ui/libs/config/props/overlay.js | 18 + .../uview-ui/libs/config/props/parse.js | 22 + .../uview-ui/libs/config/props/picker.js | 29 + .../uview-ui/libs/config/props/popup.js | 29 + .../uview-ui/libs/config/props/radio.js | 27 + .../uview-ui/libs/config/props/radioGroup.js | 30 + .../uview-ui/libs/config/props/rate.js | 26 + .../uview-ui/libs/config/props/readMore.js | 22 + .../uview-ui/libs/config/props/row.js | 17 + .../uview-ui/libs/config/props/rowNotice.js | 21 + .../uview-ui/libs/config/props/scrollList.js | 20 + .../uview-ui/libs/config/props/search.js | 37 + .../uview-ui/libs/config/props/section.js | 24 + .../uview-ui/libs/config/props/skeleton.js | 25 + .../uview-ui/libs/config/props/slider.js | 25 + .../uview-ui/libs/config/props/statusBar.js | 15 + .../uview-ui/libs/config/props/steps.js | 21 + .../uview-ui/libs/config/props/stepsItem.js | 18 + .../uview-ui/libs/config/props/sticky.js | 20 + .../uview-ui/libs/config/props/subsection.js | 23 + .../uview-ui/libs/config/props/swipeAction.js | 15 + .../libs/config/props/swipeActionItem.js | 21 + .../uview-ui/libs/config/props/swiper.js | 39 + .../libs/config/props/swipterIndicator.js | 19 + .../uview-ui/libs/config/props/switch.js | 24 + .../uview-ui/libs/config/props/tabbar.js | 22 + .../uview-ui/libs/config/props/tabbarItem.js | 20 + .../uview-ui/libs/config/props/tabs.js | 32 + .../uview-ui/libs/config/props/tag.js | 29 + .../uview-ui/libs/config/props/text.js | 38 + .../uview-ui/libs/config/props/textarea.js | 36 + .../uview-ui/libs/config/props/toast.js | 30 + .../uview-ui/libs/config/props/toolbar.js | 21 + .../uview-ui/libs/config/props/tooltip.js | 25 + .../uview-ui/libs/config/props/transition.js | 18 + .../uview-ui/libs/config/props/upload.js | 36 + .../uview-ui/libs/config/zIndex.js | 20 + .../uni_modules/uview-ui/libs/css/color.scss | 155 ++ .../uni_modules/uview-ui/libs/css/common.scss | 97 ++ .../uview-ui/libs/css/components.scss | 15 + nk-oa/uni_modules/uview-ui/libs/css/flex.scss | 257 ++++ nk-oa/uni_modules/uview-ui/libs/css/h5.scss | 0 .../uni_modules/uview-ui/libs/css/mixin.scss | 8 + nk-oa/uni_modules/uview-ui/libs/css/mp.scss | 0 nk-oa/uni_modules/uview-ui/libs/css/nvue.scss | 0 nk-oa/uni_modules/uview-ui/libs/css/vue.scss | 27 + .../uview-ui/libs/function/colorGradient.js | 134 ++ .../uview-ui/libs/function/debounce.js | 29 + .../uview-ui/libs/function/digit.js | 167 ++ .../uview-ui/libs/function/index.js | 731 +++++++++ .../uview-ui/libs/function/platform.js | 75 + .../uview-ui/libs/function/test.js | 288 ++++ .../uview-ui/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 97 ++ .../luch-request/core/InterceptorManager.js | 50 + .../libs/luch-request/core/Request.js | 198 +++ .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 29 + .../libs/luch-request/core/dispatchRequest.js | 3 + .../libs/luch-request/core/mergeConfig.js | 103 ++ .../uview-ui/libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uview-ui/libs/luch-request/index.d.ts | 116 ++ .../uview-ui/libs/luch-request/index.js | 3 + .../uview-ui/libs/luch-request/utils.js | 131 ++ .../uview-ui/libs/luch-request/utils/clone.js | 264 ++++ .../uni_modules/uview-ui/libs/mixin/button.js | 13 + .../uni_modules/uview-ui/libs/mixin/mixin.js | 160 ++ .../uview-ui/libs/mixin/mpMixin.js | 8 + .../uview-ui/libs/mixin/mpShare.js | 13 + .../uview-ui/libs/mixin/openType.js | 25 + .../uni_modules/uview-ui/libs/mixin/style.js | 228 +++ .../uni_modules/uview-ui/libs/mixin/touch.js | 59 + .../uview-ui/libs/util/async-validator.js | 1343 +++++++++++++++++ .../uview-ui/libs/util/calendar.js | 546 +++++++ nk-oa/uni_modules/uview-ui/libs/util/dayjs.js | 308 ++++ .../uni_modules/uview-ui/libs/util/emitter.js | 51 + nk-oa/uni_modules/uview-ui/libs/util/route.js | 124 ++ nk-oa/uni_modules/uview-ui/package.json | 84 ++ nk-oa/uni_modules/uview-ui/theme.scss | 44 + nk-oa/utils/cache.js | 140 ++ nk-oa/utils/http.js | 89 ++ nk-oa/utils/oahttp.js | 84 ++ nk-oa/utils/request.js | 75 + pages.json | 153 +- pages/index/index.vue | 52 + pages/oaExamine/oaExamine.vue | 260 ++++ pages/oaHome/oaHome.vue | 389 +++++ pages/oaMy/oaMy.vue | 227 +++ pages/oaTask/oaTask.vue | 344 +++++ pages/users/login.vue | 294 ++++ pages/views/application.vue | 102 ++ pages/views/com_approve.vue | 195 +++ pages/views/leave_request.vue | 536 +++++++ pages/views/new_task.vue | 604 ++++++++ pages/views/personal_center.vue | 181 +++ pages/views/personal_center_two.vue | 219 +++ pages/views/public_document.vue | 178 +++ pages/views/task_details.vue | 392 +++++ static/css/base.css | 427 ++++++ static/css/style.scss | 907 +++++++++++ static/server/server.js | 380 +++++ static/tabs-icon/Task-a.png | Bin 0 -> 1776 bytes static/tabs-icon/Task.png | Bin 0 -> 1999 bytes static/tabs-icon/approval-a.png | Bin 0 -> 1066 bytes static/tabs-icon/approval.png | Bin 0 -> 1277 bytes static/tabs-icon/home-a.png | Bin 0 -> 1543 bytes static/tabs-icon/home.png | Bin 0 -> 1703 bytes static/tabs-icon/my-a.png | Bin 0 -> 1711 bytes static/tabs-icon/my.png | Bin 0 -> 2029 bytes store/getters.js | 11 + store/index.js | 20 + store/modules/app.js | 70 + store/modules/index.js | 13 + uni.scss | 2 + uni_modules/uview-ui/LICENSE | 21 + uni_modules/uview-ui/README.md | 66 + uni_modules/uview-ui/changelog.md | 362 +++++ .../uview-ui/components/u--form/u--form.vue | 78 + .../uview-ui/components/u--image/u--image.vue | 47 + .../uview-ui/components/u--input/u--input.vue | 73 + .../uview-ui/components/u--text/u--text.vue | 44 + .../components/u--textarea/u--textarea.vue | 48 + .../components/u-action-sheet/props.js | 54 + .../u-action-sheet/u-action-sheet.vue | 278 ++++ .../uview-ui/components/u-album/props.js | 59 + .../uview-ui/components/u-album/u-album.vue | 259 ++++ .../uview-ui/components/u-alert/props.js | 44 + .../uview-ui/components/u-alert/u-alert.vue | 243 +++ .../components/u-avatar-group/props.js | 52 + .../u-avatar-group/u-avatar-group.vue | 103 ++ .../uview-ui/components/u-avatar/props.js | 78 + .../uview-ui/components/u-avatar/u-avatar.vue | 172 +++ .../uview-ui/components/u-back-top/props.js | 54 + .../components/u-back-top/u-back-top.vue | 129 ++ .../uview-ui/components/u-badge/props.js | 72 + .../uview-ui/components/u-badge/u-badge.vue | 171 +++ .../uview-ui/components/u-button/nvue.scss | 46 + .../uview-ui/components/u-button/props.js | 161 ++ .../uview-ui/components/u-button/u-button.vue | 490 ++++++ .../uview-ui/components/u-button/vue.scss | 80 + .../uview-ui/components/u-calendar/header.vue | 99 ++ .../uview-ui/components/u-calendar/month.vue | 579 +++++++ .../uview-ui/components/u-calendar/props.js | 144 ++ .../components/u-calendar/u-calendar.vue | 384 +++++ .../uview-ui/components/u-calendar/util.js | 85 ++ .../components/u-car-keyboard/props.js | 14 + .../u-car-keyboard/u-car-keyboard.vue | 311 ++++ .../uview-ui/components/u-cell-group/props.js | 14 + .../components/u-cell-group/u-cell-group.vue | 61 + .../uview-ui/components/u-cell/props.js | 110 ++ .../uview-ui/components/u-cell/u-cell.vue | 229 +++ .../components/u-checkbox-group/props.js | 82 + .../u-checkbox-group/u-checkbox-group.vue | 103 ++ .../uview-ui/components/u-checkbox/props.js | 69 + .../components/u-checkbox/u-checkbox.vue | 344 +++++ .../components/u-circle-progress/props.js | 8 + .../u-circle-progress/u-circle-progress.vue | 198 +++ .../uview-ui/components/u-code-input/props.js | 79 + .../components/u-code-input/u-code-input.vue | 252 ++++ .../uview-ui/components/u-code/props.js | 34 + .../uview-ui/components/u-code/u-code.vue | 129 ++ .../uview-ui/components/u-col/props.js | 29 + .../uview-ui/components/u-col/u-col.vue | 162 ++ .../components/u-collapse-item/props.js | 59 + .../u-collapse-item/u-collapse-item.vue | 225 +++ .../uview-ui/components/u-collapse/props.js | 19 + .../components/u-collapse/u-collapse.vue | 90 ++ .../components/u-column-notice/props.js | 55 + .../u-column-notice/u-column-notice.vue | 160 ++ .../uview-ui/components/u-count-down/props.js | 24 + .../components/u-count-down/u-count-down.vue | 163 ++ .../uview-ui/components/u-count-down/utils.js | 62 + .../uview-ui/components/u-count-to/props.js | 59 + .../components/u-count-to/u-count-to.vue | 184 +++ .../components/u-datetime-picker/props.js | 116 ++ .../u-datetime-picker/u-datetime-picker.vue | 360 +++++ .../uview-ui/components/u-divider/props.js | 44 + .../components/u-divider/u-divider.vue | 116 ++ .../components/u-dropdown-item/props.js | 36 + .../u-dropdown-item/u-dropdown-item.vue | 127 ++ .../uview-ui/components/u-dropdown/props.js | 65 + .../components/u-dropdown/u-dropdown.vue | 127 ++ .../uview-ui/components/u-empty/props.js | 59 + .../uview-ui/components/u-empty/u-empty.vue | 128 ++ .../uview-ui/components/u-form-item/props.js | 48 + .../components/u-form-item/u-form-item.vue | 235 +++ .../uview-ui/components/u-form/props.js | 45 + .../uview-ui/components/u-form/u-form.vue | 214 +++ .../uview-ui/components/u-gap/props.js | 24 + .../uview-ui/components/u-gap/u-gap.vue | 38 + .../uview-ui/components/u-grid-item/props.js | 14 + .../components/u-grid-item/u-grid-item.vue | 209 +++ .../uview-ui/components/u-grid/props.js | 19 + .../uview-ui/components/u-grid/u-grid.vue | 97 ++ .../uview-ui/components/u-icon/icons.js | 214 +++ .../uview-ui/components/u-icon/props.js | 89 ++ .../uview-ui/components/u-icon/u-icon.vue | 234 +++ .../uview-ui/components/u-image/props.js | 84 ++ .../uview-ui/components/u-image/u-image.vue | 232 +++ .../components/u-index-anchor/props.js | 29 + .../u-index-anchor/u-index-anchor.vue | 91 ++ .../uview-ui/components/u-index-item/props.js | 5 + .../components/u-index-item/u-index-item.vue | 87 ++ .../uview-ui/components/u-index-list/props.js | 29 + .../components/u-index-list/u-index-list.vue | 440 ++++++ .../uview-ui/components/u-input/props.js | 187 +++ .../uview-ui/components/u-input/u-input.vue | 354 +++++ .../uview-ui/components/u-keyboard/props.js | 84 ++ .../components/u-keyboard/u-keyboard.vue | 164 ++ .../components/u-line-progress/props.js | 28 + .../u-line-progress/u-line-progress.vue | 144 ++ .../uview-ui/components/u-line/props.js | 33 + .../uview-ui/components/u-line/u-line.vue | 62 + .../uview-ui/components/u-link/props.js | 39 + .../uview-ui/components/u-link/u-link.vue | 83 + .../uview-ui/components/u-list-item/props.js | 9 + .../components/u-list-item/u-list-item.vue | 116 ++ .../uview-ui/components/u-list/props.js | 76 + .../uview-ui/components/u-list/u-list.vue | 157 ++ .../components/u-loading-icon/props.js | 59 + .../u-loading-icon/u-loading-icon.vue | 343 +++++ .../components/u-loading-page/props.js | 49 + .../u-loading-page/u-loading-page.vue | 115 ++ .../uview-ui/components/u-loadmore/props.js | 94 ++ .../components/u-loadmore/u-loadmore.vue | 150 ++ .../uview-ui/components/u-modal/props.js | 84 ++ .../uview-ui/components/u-modal/u-modal.vue | 227 +++ .../uview-ui/components/u-navbar/props.js | 84 ++ .../uview-ui/components/u-navbar/u-navbar.vue | 186 +++ .../uview-ui/components/u-no-network/props.js | 19 + .../components/u-no-network/u-no-network.vue | 220 +++ .../uview-ui/components/u-notice-bar/props.js | 70 + .../components/u-notice-bar/u-notice-bar.vue | 101 ++ .../uview-ui/components/u-notify/props.js | 49 + .../uview-ui/components/u-notify/u-notify.vue | 211 +++ .../uview-ui/components/u-number-box/props.js | 109 ++ .../components/u-number-box/u-number-box.vue | 416 +++++ .../components/u-number-keyboard/props.js | 19 + .../u-number-keyboard/u-number-keyboard.vue | 196 +++ .../uview-ui/components/u-overlay/props.js | 24 + .../components/u-overlay/u-overlay.vue | 68 + .../uview-ui/components/u-parse/node/node.vue | 499 ++++++ .../uview-ui/components/u-parse/parser.js | 1075 +++++++++++++ .../uview-ui/components/u-parse/props.js | 45 + .../uview-ui/components/u-parse/u-parse.vue | 366 +++++ .../components/u-picker-column/props.js | 5 + .../u-picker-column/u-picker-column.vue | 27 + .../uview-ui/components/u-picker/props.js | 79 + .../uview-ui/components/u-picker/u-picker.vue | 283 ++++ .../uview-ui/components/u-popup/props.js | 79 + .../uview-ui/components/u-popup/u-popup.vue | 304 ++++ .../components/u-radio-group/props.js | 85 ++ .../u-radio-group/u-radio-group.vue | 108 ++ .../uview-ui/components/u-radio/props.js | 64 + .../uview-ui/components/u-radio/u-radio.vue | 339 +++++ .../uview-ui/components/u-rate/props.js | 69 + .../uview-ui/components/u-rate/u-rate.vue | 306 ++++ .../uview-ui/components/u-read-more/props.js | 61 + .../components/u-read-more/u-read-more.vue | 157 ++ .../uview-ui/components/u-row-notice/props.js | 39 + .../components/u-row-notice/u-row-notice.vue | 330 ++++ .../uview-ui/components/u-row/props.js | 19 + .../uview-ui/components/u-row/u-row.vue | 93 ++ .../components/u-safe-bottom/props.js | 5 + .../u-safe-bottom/u-safe-bottom.vue | 56 + .../uview-ui/components/u-scroll-list/nvue.js | 28 + .../components/u-scroll-list/other.js | 0 .../components/u-scroll-list/props.js | 34 + .../components/u-scroll-list/scrollWxs.wxs | 50 + .../u-scroll-list/u-scroll-list.vue | 224 +++ .../uview-ui/components/u-search/props.js | 118 ++ .../uview-ui/components/u-search/u-search.vue | 303 ++++ .../uview-ui/components/u-skeleton/props.js | 59 + .../components/u-skeleton/u-skeleton.vue | 244 +++ .../uview-ui/components/u-slider/mpother.js | 113 ++ .../uview-ui/components/u-slider/mpwxs.js | 42 + .../uview-ui/components/u-slider/mpwxs.wxs | 121 ++ .../components/u-slider/nvue - 副本.js | 180 +++ .../uview-ui/components/u-slider/nvue.js | 193 +++ .../uview-ui/components/u-slider/props.js | 54 + .../uview-ui/components/u-slider/u-slider.vue | 55 + .../uview-ui/components/u-status-bar/props.js | 8 + .../components/u-status-bar/u-status-bar.vue | 46 + .../uview-ui/components/u-steps-item/props.js | 24 + .../components/u-steps-item/u-steps-item.vue | 316 ++++ .../uview-ui/components/u-steps/props.js | 39 + .../uview-ui/components/u-steps/u-steps.vue | 80 + .../uview-ui/components/u-sticky/props.js | 40 + .../uview-ui/components/u-sticky/u-sticky.vue | 212 +++ .../uview-ui/components/u-subsection/props.js | 49 + .../components/u-subsection/u-subsection.vue | 299 ++++ .../u-swipe-action-item/index - backup.wxs | 256 ++++ .../components/u-swipe-action-item/index.wxs | 225 +++ .../u-swipe-action-item/nvue - backup.js | 270 ++++ .../components/u-swipe-action-item/nvue.js | 174 +++ .../components/u-swipe-action-item/props.js | 41 + .../u-swipe-action-item.vue | 190 +++ .../components/u-swipe-action-item/wxs.js | 15 + .../components/u-swipe-action/props.js | 9 + .../u-swipe-action/u-swipe-action.vue | 67 + .../components/u-swiper-indicator/props.js | 29 + .../u-swiper-indicator/u-swiper-indicator.vue | 110 ++ .../uview-ui/components/u-swiper/props.js | 125 ++ .../uview-ui/components/u-swiper/u-swiper.vue | 255 ++++ .../uview-ui/components/u-switch/props.js | 54 + .../uview-ui/components/u-switch/u-switch.vue | 177 +++ .../components/u-tabbar-item/props.js | 35 + .../u-tabbar-item/u-tabbar-item.vue | 142 ++ .../uview-ui/components/u-tabbar/props.js | 44 + .../uview-ui/components/u-tabbar/u-tabbar.vue | 141 ++ .../uview-ui/components/u-table/props.js | 5 + .../uview-ui/components/u-table/u-table.vue | 29 + .../uview-ui/components/u-tabs-item/props.js | 5 + .../components/u-tabs-item/u-tabs-item.vue | 29 + .../uview-ui/components/u-tabs/props.js | 64 + .../uview-ui/components/u-tabs/u-tabs.vue | 354 +++++ .../uview-ui/components/u-tag/props.js | 84 ++ .../uview-ui/components/u-tag/u-tag.vue | 358 +++++ uni_modules/uview-ui/components/u-td/props.js | 5 + uni_modules/uview-ui/components/u-td/u-td.vue | 31 + .../uview-ui/components/u-text/props.js | 110 ++ .../uview-ui/components/u-text/u-text.vue | 223 +++ .../uview-ui/components/u-text/value.js | 85 ++ .../uview-ui/components/u-textarea/props.js | 119 ++ .../components/u-textarea/u-textarea.vue | 239 +++ .../uview-ui/components/u-toast/u-toast.vue | 291 ++++ .../uview-ui/components/u-toolbar/props.js | 34 + .../components/u-toolbar/u-toolbar.vue | 102 ++ .../components/u-tooltip/clipboard.min.js | 58 + .../uview-ui/components/u-tooltip/props.js | 59 + .../components/u-tooltip/u-tooltip.vue | 365 +++++ uni_modules/uview-ui/components/u-tr/props.js | 5 + uni_modules/uview-ui/components/u-tr/u-tr.vue | 31 + .../components/u-transition/nvue.ani-map.js | 68 + .../uview-ui/components/u-transition/props.js | 24 + .../components/u-transition/transition.js | 157 ++ .../components/u-transition/u-transition.vue | 92 ++ .../u-transition/vue.ani-style.scss | 113 ++ .../uview-ui/components/u-upload/mixin.js | 21 + .../uview-ui/components/u-upload/props.js | 124 ++ .../uview-ui/components/u-upload/u-upload.vue | 558 +++++++ .../uview-ui/components/u-upload/utils.js | 151 ++ .../uview-ui/components/uview-ui/uview-ui.vue | 15 + uni_modules/uview-ui/index.js | 79 + uni_modules/uview-ui/index.scss | 23 + uni_modules/uview-ui/libs/config/color.js | 17 + uni_modules/uview-ui/libs/config/config.js | 34 + uni_modules/uview-ui/libs/config/props.js | 190 +++ .../uview-ui/libs/config/props/actionSheet.js | 25 + .../uview-ui/libs/config/props/album.js | 25 + .../uview-ui/libs/config/props/alert.js | 22 + .../uview-ui/libs/config/props/avatar.js | 28 + .../uview-ui/libs/config/props/avatarGroup.js | 23 + .../uview-ui/libs/config/props/backtop.js | 27 + .../uview-ui/libs/config/props/badge.js | 27 + .../uview-ui/libs/config/props/button.js | 42 + .../uview-ui/libs/config/props/calendar.js | 42 + .../uview-ui/libs/config/props/carKeyboard.js | 15 + .../uview-ui/libs/config/props/cell.js | 35 + .../uview-ui/libs/config/props/cellGroup.js | 17 + .../uview-ui/libs/config/props/checkbox.js | 27 + .../libs/config/props/checkboxGroup.js | 29 + .../libs/config/props/circleProgress.js | 15 + .../uview-ui/libs/config/props/code.js | 21 + .../uview-ui/libs/config/props/codeInput.js | 29 + uni_modules/uview-ui/libs/config/props/col.js | 19 + .../uview-ui/libs/config/props/collapse.js | 17 + .../libs/config/props/collapseItem.js | 25 + .../libs/config/props/columnNotice.js | 24 + .../uview-ui/libs/config/props/countDown.js | 18 + .../uview-ui/libs/config/props/countTo.js | 25 + .../libs/config/props/datetimePicker.js | 36 + .../uview-ui/libs/config/props/divider.js | 23 + .../uview-ui/libs/config/props/empty.js | 26 + .../uview-ui/libs/config/props/form.js | 22 + .../uview-ui/libs/config/props/formItem.js | 23 + uni_modules/uview-ui/libs/config/props/gap.js | 19 + .../uview-ui/libs/config/props/grid.js | 17 + .../uview-ui/libs/config/props/gridItem.js | 16 + .../uview-ui/libs/config/props/icon.js | 36 + .../uview-ui/libs/config/props/image.js | 30 + .../uview-ui/libs/config/props/indexAnchor.js | 19 + .../uview-ui/libs/config/props/indexList.js | 19 + .../uview-ui/libs/config/props/input.js | 48 + .../uview-ui/libs/config/props/keyboard.js | 30 + .../uview-ui/libs/config/props/line.js | 20 + .../libs/config/props/lineProgress.js | 19 + .../uview-ui/libs/config/props/link.js | 26 + .../uview-ui/libs/config/props/list.js | 28 + .../uview-ui/libs/config/props/listItem.js | 15 + .../uview-ui/libs/config/props/loadingIcon.js | 30 + .../uview-ui/libs/config/props/loadingPage.js | 23 + .../uview-ui/libs/config/props/loadmore.js | 32 + .../uview-ui/libs/config/props/modal.js | 30 + .../uview-ui/libs/config/props/navbar.js | 32 + .../uview-ui/libs/config/props/noNetwork.js | 18 + .../uview-ui/libs/config/props/noticeBar.js | 27 + .../uview-ui/libs/config/props/notify.js | 22 + .../uview-ui/libs/config/props/numberBox.js | 35 + .../libs/config/props/numberKeyboard.js | 17 + .../uview-ui/libs/config/props/overlay.js | 18 + .../uview-ui/libs/config/props/parse.js | 22 + .../uview-ui/libs/config/props/picker.js | 29 + .../uview-ui/libs/config/props/popup.js | 29 + .../uview-ui/libs/config/props/radio.js | 27 + .../uview-ui/libs/config/props/radioGroup.js | 30 + .../uview-ui/libs/config/props/rate.js | 26 + .../uview-ui/libs/config/props/readMore.js | 22 + uni_modules/uview-ui/libs/config/props/row.js | 17 + .../uview-ui/libs/config/props/rowNotice.js | 21 + .../uview-ui/libs/config/props/scrollList.js | 20 + .../uview-ui/libs/config/props/search.js | 37 + .../uview-ui/libs/config/props/section.js | 24 + .../uview-ui/libs/config/props/skeleton.js | 25 + .../uview-ui/libs/config/props/slider.js | 25 + .../uview-ui/libs/config/props/statusBar.js | 15 + .../uview-ui/libs/config/props/steps.js | 21 + .../uview-ui/libs/config/props/stepsItem.js | 18 + .../uview-ui/libs/config/props/sticky.js | 20 + .../uview-ui/libs/config/props/subsection.js | 23 + .../uview-ui/libs/config/props/swipeAction.js | 15 + .../libs/config/props/swipeActionItem.js | 21 + .../uview-ui/libs/config/props/swiper.js | 39 + .../libs/config/props/swipterIndicator.js | 19 + .../uview-ui/libs/config/props/switch.js | 24 + .../uview-ui/libs/config/props/tabbar.js | 22 + .../uview-ui/libs/config/props/tabbarItem.js | 20 + .../uview-ui/libs/config/props/tabs.js | 32 + uni_modules/uview-ui/libs/config/props/tag.js | 29 + .../uview-ui/libs/config/props/text.js | 38 + .../uview-ui/libs/config/props/textarea.js | 36 + .../uview-ui/libs/config/props/toast.js | 30 + .../uview-ui/libs/config/props/toolbar.js | 21 + .../uview-ui/libs/config/props/tooltip.js | 25 + .../uview-ui/libs/config/props/transition.js | 18 + .../uview-ui/libs/config/props/upload.js | 36 + uni_modules/uview-ui/libs/config/zIndex.js | 20 + uni_modules/uview-ui/libs/css/color.scss | 155 ++ uni_modules/uview-ui/libs/css/common.scss | 97 ++ uni_modules/uview-ui/libs/css/components.scss | 15 + uni_modules/uview-ui/libs/css/flex.scss | 257 ++++ uni_modules/uview-ui/libs/css/h5.scss | 0 uni_modules/uview-ui/libs/css/mixin.scss | 8 + uni_modules/uview-ui/libs/css/mp.scss | 0 uni_modules/uview-ui/libs/css/nvue.scss | 0 uni_modules/uview-ui/libs/css/vue.scss | 27 + .../uview-ui/libs/function/colorGradient.js | 134 ++ .../uview-ui/libs/function/debounce.js | 29 + uni_modules/uview-ui/libs/function/digit.js | 167 ++ uni_modules/uview-ui/libs/function/index.js | 731 +++++++++ .../uview-ui/libs/function/platform.js | 75 + uni_modules/uview-ui/libs/function/test.js | 288 ++++ .../uview-ui/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 97 ++ .../luch-request/core/InterceptorManager.js | 50 + .../libs/luch-request/core/Request.js | 198 +++ .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 29 + .../libs/luch-request/core/dispatchRequest.js | 3 + .../libs/luch-request/core/mergeConfig.js | 103 ++ .../uview-ui/libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uview-ui/libs/luch-request/index.d.ts | 116 ++ .../uview-ui/libs/luch-request/index.js | 3 + .../uview-ui/libs/luch-request/utils.js | 131 ++ .../uview-ui/libs/luch-request/utils/clone.js | 264 ++++ uni_modules/uview-ui/libs/mixin/button.js | 13 + uni_modules/uview-ui/libs/mixin/mixin.js | 160 ++ uni_modules/uview-ui/libs/mixin/mpMixin.js | 8 + uni_modules/uview-ui/libs/mixin/mpShare.js | 13 + uni_modules/uview-ui/libs/mixin/openType.js | 25 + uni_modules/uview-ui/libs/mixin/style.js | 228 +++ uni_modules/uview-ui/libs/mixin/touch.js | 59 + .../uview-ui/libs/util/async-validator.js | 1343 +++++++++++++++++ uni_modules/uview-ui/libs/util/calendar.js | 546 +++++++ uni_modules/uview-ui/libs/util/dayjs.js | 308 ++++ uni_modules/uview-ui/libs/util/emitter.js | 51 + uni_modules/uview-ui/libs/util/route.js | 124 ++ uni_modules/uview-ui/package.json | 84 ++ uni_modules/uview-ui/theme.scss | 44 + utils/cache.js | 140 ++ utils/http.js | 89 ++ utils/oahttp.js | 84 ++ utils/request.js | 75 + 846 files changed, 97268 insertions(+), 129 deletions(-) create mode 100644 .gitignore create mode 100644 api/oa.js create mode 100644 api/oaApi.js create mode 100644 api/pubic.js create mode 100644 api/upload.js create mode 100644 api/user.js create mode 100644 components/tabbar.vue create mode 100644 components/verify/utils/ase.js create mode 100644 components/verify/verify.vue create mode 100644 components/verify/verifyPoint/verifyPoint.vue create mode 100644 components/verify/verifySlider/verifySlider.vue create mode 100644 config/app.js create mode 100644 config/cache.js create mode 100644 libs/login.js create mode 100644 libs/routine.js create mode 100644 libs/uniApi.js create mode 100644 nk-oa/.gitignore create mode 100644 nk-oa/App.vue create mode 100644 nk-oa/api/oa.js create mode 100644 nk-oa/api/oaApi.js create mode 100644 nk-oa/api/pubic.js create mode 100644 nk-oa/api/upload.js create mode 100644 nk-oa/api/user.js create mode 100644 nk-oa/components/tabbar.vue create mode 100644 nk-oa/components/verify/utils/ase.js create mode 100644 nk-oa/components/verify/verify.vue create mode 100644 nk-oa/components/verify/verifyPoint/verifyPoint.vue create mode 100644 nk-oa/components/verify/verifySlider/verifySlider.vue create mode 100644 nk-oa/config/app.js create mode 100644 nk-oa/config/cache.js create mode 100644 nk-oa/index.html create mode 100644 nk-oa/libs/login.js create mode 100644 nk-oa/libs/routine.js create mode 100644 nk-oa/libs/uniApi.js create mode 100644 nk-oa/main.js create mode 100644 nk-oa/manifest.json create mode 100644 nk-oa/pages.json create mode 100644 nk-oa/pages/index/index.vue create mode 100644 nk-oa/pages/oaExamine/oaExamine.vue create mode 100644 nk-oa/pages/oaHome/oaHome.vue create mode 100644 nk-oa/pages/oaMy/oaMy.vue create mode 100644 nk-oa/pages/oaTask/oaTask.vue create mode 100644 nk-oa/pages/users/login.vue create mode 100644 nk-oa/pages/views/application.vue create mode 100644 nk-oa/pages/views/com_approve.vue create mode 100644 nk-oa/pages/views/leave_request.vue create mode 100644 nk-oa/pages/views/new_task.vue create mode 100644 nk-oa/pages/views/personal_center.vue create mode 100644 nk-oa/pages/views/personal_center_two.vue create mode 100644 nk-oa/pages/views/public_document.vue create mode 100644 nk-oa/pages/views/task_details.vue create mode 100644 nk-oa/static/css/base.css create mode 100644 nk-oa/static/css/style.scss create mode 100644 nk-oa/static/logo.png create mode 100644 nk-oa/static/server/server.js create mode 100644 nk-oa/static/tabs-icon/Task-a.png create mode 100644 nk-oa/static/tabs-icon/Task.png create mode 100644 nk-oa/static/tabs-icon/approval-a.png create mode 100644 nk-oa/static/tabs-icon/approval.png create mode 100644 nk-oa/static/tabs-icon/home-a.png create mode 100644 nk-oa/static/tabs-icon/home.png create mode 100644 nk-oa/static/tabs-icon/my-a.png create mode 100644 nk-oa/static/tabs-icon/my.png create mode 100644 nk-oa/store/getters.js create mode 100644 nk-oa/store/index.js create mode 100644 nk-oa/store/modules/app.js create mode 100644 nk-oa/store/modules/index.js create mode 100644 nk-oa/uni.scss create mode 100644 nk-oa/uni_modules/uview-ui/LICENSE create mode 100644 nk-oa/uni_modules/uview-ui/README.md create mode 100644 nk-oa/uni_modules/uview-ui/changelog.md create mode 100644 nk-oa/uni_modules/uview-ui/components/u--form/u--form.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u--image/u--image.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u--input/u--input.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u--text/u--text.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u--textarea/u--textarea.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-action-sheet/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-album/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-album/u-album.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-alert/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-alert/u-alert.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-avatar-group/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-avatar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-avatar/u-avatar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-back-top/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-back-top/u-back-top.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-badge/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-badge/u-badge.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-button/nvue.scss create mode 100644 nk-oa/uni_modules/uview-ui/components/u-button/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-button/u-button.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-button/vue.scss create mode 100644 nk-oa/uni_modules/uview-ui/components/u-calendar/header.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-calendar/month.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-calendar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-calendar/u-calendar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-calendar/util.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-car-keyboard/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-cell-group/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-cell/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-cell/u-cell.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-checkbox-group/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-checkbox/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-circle-progress/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-code-input/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-code-input/u-code-input.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-code/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-code/u-code.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-col/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-col/u-col.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-collapse-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-collapse/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-collapse/u-collapse.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-column-notice/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-count-down/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-count-down/u-count-down.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-count-down/utils.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-count-to/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-count-to/u-count-to.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-datetime-picker/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-divider/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-divider/u-divider.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-dropdown-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-dropdown/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-empty/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-empty/u-empty.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-form-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-form-item/u-form-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-form/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-form/u-form.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-gap/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-gap/u-gap.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-grid-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-grid/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-grid/u-grid.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-icon/icons.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-icon/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-icon/u-icon.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-image/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-image/u-image.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-anchor/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-item/u-index-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-list/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-index-list/u-index-list.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-input/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-input/u-input.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-keyboard/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-line-progress/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-line/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-line/u-line.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-link/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-link/u-link.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-list-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-list-item/u-list-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-list/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-list/u-list.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loading-icon/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loading-page/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loadmore/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-modal/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-modal/u-modal.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-navbar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-navbar/u-navbar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-no-network/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-no-network/u-no-network.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-notice-bar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-notify/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-notify/u-notify.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-number-box/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-number-box/u-number-box.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-number-keyboard/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-overlay/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-overlay/u-overlay.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-parse/node/node.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-parse/parser.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-parse/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-parse/u-parse.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-picker-column/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-picker/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-picker/u-picker.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-popup/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-popup/u-popup.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-radio-group/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-radio/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-radio/u-radio.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-rate/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-rate/u-rate.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-read-more/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-read-more/u-read-more.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-row-notice/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-row/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-row/u-row.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-safe-bottom/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-scroll-list/nvue.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-scroll-list/other.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-scroll-list/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs create mode 100644 nk-oa/uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-search/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-search/u-search.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-skeleton/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/mpother.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/mpwxs.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/mpwxs.wxs create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/nvue - 副本.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/nvue.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-slider/u-slider.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-status-bar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-steps-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-steps/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-steps/u-steps.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-sticky/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-sticky/u-sticky.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-subsection/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-subsection/u-subsection.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/index.wxs create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/nvue.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action-item/wxs.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swiper-indicator/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swiper/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-swiper/u-swiper.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-switch/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-switch/u-switch.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabbar-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabbar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-table/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-table/u-table.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabs-item/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabs/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tabs/u-tabs.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tag/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tag/u-tag.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-td/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-td/u-td.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-text/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-text/u-text.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-text/value.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-textarea/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-textarea/u-textarea.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-toast/u-toast.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-toolbar/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tooltip/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tr/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-tr/u-tr.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-transition/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-transition/transition.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-transition/u-transition.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss create mode 100644 nk-oa/uni_modules/uview-ui/components/u-upload/mixin.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-upload/props.js create mode 100644 nk-oa/uni_modules/uview-ui/components/u-upload/u-upload.vue create mode 100644 nk-oa/uni_modules/uview-ui/components/u-upload/utils.js create mode 100644 nk-oa/uni_modules/uview-ui/components/uview-ui/uview-ui.vue create mode 100644 nk-oa/uni_modules/uview-ui/index.js create mode 100644 nk-oa/uni_modules/uview-ui/index.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/color.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/config.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/actionSheet.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/album.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/alert.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/avatar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/avatarGroup.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/backtop.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/badge.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/button.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/calendar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/carKeyboard.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/cell.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/cellGroup.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/checkbox.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/checkboxGroup.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/circleProgress.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/code.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/codeInput.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/col.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/collapse.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/collapseItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/columnNotice.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/countDown.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/countTo.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/datetimePicker.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/divider.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/empty.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/form.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/formItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/gap.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/grid.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/gridItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/icon.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/image.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/indexAnchor.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/indexList.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/input.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/keyboard.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/line.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/lineProgress.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/link.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/list.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/listItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/loadingIcon.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/loadingPage.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/loadmore.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/modal.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/navbar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/noNetwork.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/noticeBar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/notify.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/numberBox.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/numberKeyboard.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/overlay.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/parse.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/picker.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/popup.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/radio.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/radioGroup.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/rate.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/readMore.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/row.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/rowNotice.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/scrollList.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/search.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/section.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/skeleton.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/slider.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/statusBar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/steps.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/stepsItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/sticky.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/subsection.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/swipeAction.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/swipeActionItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/swiper.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/swipterIndicator.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/switch.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/tabbar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/tabbarItem.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/tabs.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/tag.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/text.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/textarea.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/toast.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/toolbar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/tooltip.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/transition.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/props/upload.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/config/zIndex.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/color.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/common.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/components.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/flex.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/h5.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/mixin.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/mp.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/nvue.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/css/vue.scss create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/colorGradient.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/debounce.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/digit.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/index.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/platform.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/test.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/function/throttle.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/adapters/index.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/Request.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/defaults.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/core/settle.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/index.d.ts create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/index.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/utils.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/luch-request/utils/clone.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/button.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/mixin.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/mpMixin.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/mpShare.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/openType.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/style.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/mixin/touch.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/util/async-validator.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/util/calendar.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/util/dayjs.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/util/emitter.js create mode 100644 nk-oa/uni_modules/uview-ui/libs/util/route.js create mode 100644 nk-oa/uni_modules/uview-ui/package.json create mode 100644 nk-oa/uni_modules/uview-ui/theme.scss create mode 100644 nk-oa/utils/cache.js create mode 100644 nk-oa/utils/http.js create mode 100644 nk-oa/utils/oahttp.js create mode 100644 nk-oa/utils/request.js create mode 100644 pages/index/index.vue create mode 100644 pages/oaExamine/oaExamine.vue create mode 100644 pages/oaHome/oaHome.vue create mode 100644 pages/oaMy/oaMy.vue create mode 100644 pages/oaTask/oaTask.vue create mode 100644 pages/users/login.vue create mode 100644 pages/views/application.vue create mode 100644 pages/views/com_approve.vue create mode 100644 pages/views/leave_request.vue create mode 100644 pages/views/new_task.vue create mode 100644 pages/views/personal_center.vue create mode 100644 pages/views/personal_center_two.vue create mode 100644 pages/views/public_document.vue create mode 100644 pages/views/task_details.vue create mode 100644 static/css/base.css create mode 100644 static/css/style.scss create mode 100644 static/server/server.js create mode 100644 static/tabs-icon/Task-a.png create mode 100644 static/tabs-icon/Task.png create mode 100644 static/tabs-icon/approval-a.png create mode 100644 static/tabs-icon/approval.png create mode 100644 static/tabs-icon/home-a.png create mode 100644 static/tabs-icon/home.png create mode 100644 static/tabs-icon/my-a.png create mode 100644 static/tabs-icon/my.png create mode 100644 store/getters.js create mode 100644 store/index.js create mode 100644 store/modules/app.js create mode 100644 store/modules/index.js create mode 100644 uni_modules/uview-ui/LICENSE create mode 100644 uni_modules/uview-ui/README.md create mode 100644 uni_modules/uview-ui/changelog.md create mode 100644 uni_modules/uview-ui/components/u--form/u--form.vue create mode 100644 uni_modules/uview-ui/components/u--image/u--image.vue create mode 100644 uni_modules/uview-ui/components/u--input/u--input.vue create mode 100644 uni_modules/uview-ui/components/u--text/u--text.vue create mode 100644 uni_modules/uview-ui/components/u--textarea/u--textarea.vue create mode 100644 uni_modules/uview-ui/components/u-action-sheet/props.js create mode 100644 uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 uni_modules/uview-ui/components/u-album/props.js create mode 100644 uni_modules/uview-ui/components/u-album/u-album.vue create mode 100644 uni_modules/uview-ui/components/u-alert/props.js create mode 100644 uni_modules/uview-ui/components/u-alert/u-alert.vue create mode 100644 uni_modules/uview-ui/components/u-avatar-group/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue create mode 100644 uni_modules/uview-ui/components/u-avatar/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar/u-avatar.vue create mode 100644 uni_modules/uview-ui/components/u-back-top/props.js create mode 100644 uni_modules/uview-ui/components/u-back-top/u-back-top.vue create mode 100644 uni_modules/uview-ui/components/u-badge/props.js create mode 100644 uni_modules/uview-ui/components/u-badge/u-badge.vue create mode 100644 uni_modules/uview-ui/components/u-button/nvue.scss create mode 100644 uni_modules/uview-ui/components/u-button/props.js create mode 100644 uni_modules/uview-ui/components/u-button/u-button.vue create mode 100644 uni_modules/uview-ui/components/u-button/vue.scss create mode 100644 uni_modules/uview-ui/components/u-calendar/header.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/month.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/props.js create mode 100644 uni_modules/uview-ui/components/u-calendar/u-calendar.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/util.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-cell-group/props.js create mode 100644 uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 uni_modules/uview-ui/components/u-cell/props.js create mode 100644 uni_modules/uview-ui/components/u-cell/u-cell.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 uni_modules/uview-ui/components/u-circle-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 uni_modules/uview-ui/components/u-code-input/props.js create mode 100644 uni_modules/uview-ui/components/u-code-input/u-code-input.vue create mode 100644 uni_modules/uview-ui/components/u-code/props.js create mode 100644 uni_modules/uview-ui/components/u-code/u-code.vue create mode 100644 uni_modules/uview-ui/components/u-col/props.js create mode 100644 uni_modules/uview-ui/components/u-col/u-col.vue create mode 100644 uni_modules/uview-ui/components/u-collapse-item/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 uni_modules/uview-ui/components/u-collapse/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse/u-collapse.vue create mode 100644 uni_modules/uview-ui/components/u-column-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/props.js create mode 100644 uni_modules/uview-ui/components/u-count-down/u-count-down.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/utils.js create mode 100644 uni_modules/uview-ui/components/u-count-to/props.js create mode 100644 uni_modules/uview-ui/components/u-count-to/u-count-to.vue create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue create mode 100644 uni_modules/uview-ui/components/u-divider/props.js create mode 100644 uni_modules/uview-ui/components/u-divider/u-divider.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 uni_modules/uview-ui/components/u-empty/props.js create mode 100644 uni_modules/uview-ui/components/u-empty/u-empty.vue create mode 100644 uni_modules/uview-ui/components/u-form-item/props.js create mode 100644 uni_modules/uview-ui/components/u-form-item/u-form-item.vue create mode 100644 uni_modules/uview-ui/components/u-form/props.js create mode 100644 uni_modules/uview-ui/components/u-form/u-form.vue create mode 100644 uni_modules/uview-ui/components/u-gap/props.js create mode 100644 uni_modules/uview-ui/components/u-gap/u-gap.vue create mode 100644 uni_modules/uview-ui/components/u-grid-item/props.js create mode 100644 uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 uni_modules/uview-ui/components/u-grid/props.js create mode 100644 uni_modules/uview-ui/components/u-grid/u-grid.vue create mode 100644 uni_modules/uview-ui/components/u-icon/icons.js create mode 100644 uni_modules/uview-ui/components/u-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-icon/u-icon.vue create mode 100644 uni_modules/uview-ui/components/u-image/props.js create mode 100644 uni_modules/uview-ui/components/u-image/u-image.vue create mode 100644 uni_modules/uview-ui/components/u-index-anchor/props.js create mode 100644 uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 uni_modules/uview-ui/components/u-index-item/props.js create mode 100644 uni_modules/uview-ui/components/u-index-item/u-index-item.vue create mode 100644 uni_modules/uview-ui/components/u-index-list/props.js create mode 100644 uni_modules/uview-ui/components/u-index-list/u-index-list.vue create mode 100644 uni_modules/uview-ui/components/u-input/props.js create mode 100644 uni_modules/uview-ui/components/u-input/u-input.vue create mode 100644 uni_modules/uview-ui/components/u-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-line-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 uni_modules/uview-ui/components/u-line/props.js create mode 100644 uni_modules/uview-ui/components/u-line/u-line.vue create mode 100644 uni_modules/uview-ui/components/u-link/props.js create mode 100644 uni_modules/uview-ui/components/u-link/u-link.vue create mode 100644 uni_modules/uview-ui/components/u-list-item/props.js create mode 100644 uni_modules/uview-ui/components/u-list-item/u-list-item.vue create mode 100644 uni_modules/uview-ui/components/u-list/props.js create mode 100644 uni_modules/uview-ui/components/u-list/u-list.vue create mode 100644 uni_modules/uview-ui/components/u-loading-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue create mode 100644 uni_modules/uview-ui/components/u-loading-page/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 uni_modules/uview-ui/components/u-loadmore/props.js create mode 100644 uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 uni_modules/uview-ui/components/u-modal/props.js create mode 100644 uni_modules/uview-ui/components/u-modal/u-modal.vue create mode 100644 uni_modules/uview-ui/components/u-navbar/props.js create mode 100644 uni_modules/uview-ui/components/u-navbar/u-navbar.vue create mode 100644 uni_modules/uview-ui/components/u-no-network/props.js create mode 100644 uni_modules/uview-ui/components/u-no-network/u-no-network.vue create mode 100644 uni_modules/uview-ui/components/u-notice-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 uni_modules/uview-ui/components/u-notify/props.js create mode 100644 uni_modules/uview-ui/components/u-notify/u-notify.vue create mode 100644 uni_modules/uview-ui/components/u-number-box/props.js create mode 100644 uni_modules/uview-ui/components/u-number-box/u-number-box.vue create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-overlay/props.js create mode 100644 uni_modules/uview-ui/components/u-overlay/u-overlay.vue create mode 100644 uni_modules/uview-ui/components/u-parse/node/node.vue create mode 100644 uni_modules/uview-ui/components/u-parse/parser.js create mode 100644 uni_modules/uview-ui/components/u-parse/props.js create mode 100644 uni_modules/uview-ui/components/u-parse/u-parse.vue create mode 100644 uni_modules/uview-ui/components/u-picker-column/props.js create mode 100644 uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue create mode 100644 uni_modules/uview-ui/components/u-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-picker/u-picker.vue create mode 100644 uni_modules/uview-ui/components/u-popup/props.js create mode 100644 uni_modules/uview-ui/components/u-popup/u-popup.vue create mode 100644 uni_modules/uview-ui/components/u-radio-group/props.js create mode 100644 uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 uni_modules/uview-ui/components/u-radio/props.js create mode 100644 uni_modules/uview-ui/components/u-radio/u-radio.vue create mode 100644 uni_modules/uview-ui/components/u-rate/props.js create mode 100644 uni_modules/uview-ui/components/u-rate/u-rate.vue create mode 100644 uni_modules/uview-ui/components/u-read-more/props.js create mode 100644 uni_modules/uview-ui/components/u-read-more/u-read-more.vue create mode 100644 uni_modules/uview-ui/components/u-row-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 uni_modules/uview-ui/components/u-row/props.js create mode 100644 uni_modules/uview-ui/components/u-row/u-row.vue create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/props.js create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue create mode 100644 uni_modules/uview-ui/components/u-scroll-list/nvue.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/other.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/props.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue create mode 100644 uni_modules/uview-ui/components/u-search/props.js create mode 100644 uni_modules/uview-ui/components/u-search/u-search.vue create mode 100644 uni_modules/uview-ui/components/u-skeleton/props.js create mode 100644 uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 uni_modules/uview-ui/components/u-slider/mpother.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.wxs create mode 100644 uni_modules/uview-ui/components/u-slider/nvue - 副本.js create mode 100644 uni_modules/uview-ui/components/u-slider/nvue.js create mode 100644 uni_modules/uview-ui/components/u-slider/props.js create mode 100644 uni_modules/uview-ui/components/u-slider/u-slider.vue create mode 100644 uni_modules/uview-ui/components/u-status-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue create mode 100644 uni_modules/uview-ui/components/u-steps-item/props.js create mode 100644 uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue create mode 100644 uni_modules/uview-ui/components/u-steps/props.js create mode 100644 uni_modules/uview-ui/components/u-steps/u-steps.vue create mode 100644 uni_modules/uview-ui/components/u-sticky/props.js create mode 100644 uni_modules/uview-ui/components/u-sticky/u-sticky.vue create mode 100644 uni_modules/uview-ui/components/u-subsection/props.js create mode 100644 uni_modules/uview-ui/components/u-subsection/u-subsection.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/wxs.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue create mode 100644 uni_modules/uview-ui/components/u-swiper/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper/u-swiper.vue create mode 100644 uni_modules/uview-ui/components/u-switch/props.js create mode 100644 uni_modules/uview-ui/components/u-switch/u-switch.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 uni_modules/uview-ui/components/u-table/props.js create mode 100644 uni_modules/uview-ui/components/u-table/u-table.vue create mode 100644 uni_modules/uview-ui/components/u-tabs-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabs/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs/u-tabs.vue create mode 100644 uni_modules/uview-ui/components/u-tag/props.js create mode 100644 uni_modules/uview-ui/components/u-tag/u-tag.vue create mode 100644 uni_modules/uview-ui/components/u-td/props.js create mode 100644 uni_modules/uview-ui/components/u-td/u-td.vue create mode 100644 uni_modules/uview-ui/components/u-text/props.js create mode 100644 uni_modules/uview-ui/components/u-text/u-text.vue create mode 100644 uni_modules/uview-ui/components/u-text/value.js create mode 100644 uni_modules/uview-ui/components/u-textarea/props.js create mode 100644 uni_modules/uview-ui/components/u-textarea/u-textarea.vue create mode 100644 uni_modules/uview-ui/components/u-toast/u-toast.vue create mode 100644 uni_modules/uview-ui/components/u-toolbar/props.js create mode 100644 uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue create mode 100644 uni_modules/uview-ui/components/u-tooltip/clipboard.min.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/props.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue create mode 100644 uni_modules/uview-ui/components/u-tr/props.js create mode 100644 uni_modules/uview-ui/components/u-tr/u-tr.vue create mode 100644 uni_modules/uview-ui/components/u-transition/nvue.ani-map.js create mode 100644 uni_modules/uview-ui/components/u-transition/props.js create mode 100644 uni_modules/uview-ui/components/u-transition/transition.js create mode 100644 uni_modules/uview-ui/components/u-transition/u-transition.vue create mode 100644 uni_modules/uview-ui/components/u-transition/vue.ani-style.scss create mode 100644 uni_modules/uview-ui/components/u-upload/mixin.js create mode 100644 uni_modules/uview-ui/components/u-upload/props.js create mode 100644 uni_modules/uview-ui/components/u-upload/u-upload.vue create mode 100644 uni_modules/uview-ui/components/u-upload/utils.js create mode 100644 uni_modules/uview-ui/components/uview-ui/uview-ui.vue create mode 100644 uni_modules/uview-ui/index.js create mode 100644 uni_modules/uview-ui/index.scss create mode 100644 uni_modules/uview-ui/libs/config/color.js create mode 100644 uni_modules/uview-ui/libs/config/config.js create mode 100644 uni_modules/uview-ui/libs/config/props.js create mode 100644 uni_modules/uview-ui/libs/config/props/actionSheet.js create mode 100644 uni_modules/uview-ui/libs/config/props/album.js create mode 100644 uni_modules/uview-ui/libs/config/props/alert.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatar.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatarGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/backtop.js create mode 100644 uni_modules/uview-ui/libs/config/props/badge.js create mode 100644 uni_modules/uview-ui/libs/config/props/button.js create mode 100644 uni_modules/uview-ui/libs/config/props/calendar.js create mode 100644 uni_modules/uview-ui/libs/config/props/carKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/cell.js create mode 100644 uni_modules/uview-ui/libs/config/props/cellGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkbox.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkboxGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/circleProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/code.js create mode 100644 uni_modules/uview-ui/libs/config/props/codeInput.js create mode 100644 uni_modules/uview-ui/libs/config/props/col.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapse.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapseItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/columnNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/countDown.js create mode 100644 uni_modules/uview-ui/libs/config/props/countTo.js create mode 100644 uni_modules/uview-ui/libs/config/props/datetimePicker.js create mode 100644 uni_modules/uview-ui/libs/config/props/divider.js create mode 100644 uni_modules/uview-ui/libs/config/props/empty.js create mode 100644 uni_modules/uview-ui/libs/config/props/form.js create mode 100644 uni_modules/uview-ui/libs/config/props/formItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/gap.js create mode 100644 uni_modules/uview-ui/libs/config/props/grid.js create mode 100644 uni_modules/uview-ui/libs/config/props/gridItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/icon.js create mode 100644 uni_modules/uview-ui/libs/config/props/image.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexAnchor.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexList.js create mode 100644 uni_modules/uview-ui/libs/config/props/input.js create mode 100644 uni_modules/uview-ui/libs/config/props/keyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/line.js create mode 100644 uni_modules/uview-ui/libs/config/props/lineProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/link.js create mode 100644 uni_modules/uview-ui/libs/config/props/list.js create mode 100644 uni_modules/uview-ui/libs/config/props/listItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingIcon.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingPage.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadmore.js create mode 100644 uni_modules/uview-ui/libs/config/props/modal.js create mode 100644 uni_modules/uview-ui/libs/config/props/navbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/noNetwork.js create mode 100644 uni_modules/uview-ui/libs/config/props/noticeBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/notify.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberBox.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/overlay.js create mode 100644 uni_modules/uview-ui/libs/config/props/parse.js create mode 100644 uni_modules/uview-ui/libs/config/props/picker.js create mode 100644 uni_modules/uview-ui/libs/config/props/popup.js create mode 100644 uni_modules/uview-ui/libs/config/props/radio.js create mode 100644 uni_modules/uview-ui/libs/config/props/radioGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/rate.js create mode 100644 uni_modules/uview-ui/libs/config/props/readMore.js create mode 100644 uni_modules/uview-ui/libs/config/props/row.js create mode 100644 uni_modules/uview-ui/libs/config/props/rowNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/scrollList.js create mode 100644 uni_modules/uview-ui/libs/config/props/search.js create mode 100644 uni_modules/uview-ui/libs/config/props/section.js create mode 100644 uni_modules/uview-ui/libs/config/props/skeleton.js create mode 100644 uni_modules/uview-ui/libs/config/props/slider.js create mode 100644 uni_modules/uview-ui/libs/config/props/statusBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/steps.js create mode 100644 uni_modules/uview-ui/libs/config/props/stepsItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/sticky.js create mode 100644 uni_modules/uview-ui/libs/config/props/subsection.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeAction.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeActionItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/swiper.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipterIndicator.js create mode 100644 uni_modules/uview-ui/libs/config/props/switch.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbarItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabs.js create mode 100644 uni_modules/uview-ui/libs/config/props/tag.js create mode 100644 uni_modules/uview-ui/libs/config/props/text.js create mode 100644 uni_modules/uview-ui/libs/config/props/textarea.js create mode 100644 uni_modules/uview-ui/libs/config/props/toast.js create mode 100644 uni_modules/uview-ui/libs/config/props/toolbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tooltip.js create mode 100644 uni_modules/uview-ui/libs/config/props/transition.js create mode 100644 uni_modules/uview-ui/libs/config/props/upload.js create mode 100644 uni_modules/uview-ui/libs/config/zIndex.js create mode 100644 uni_modules/uview-ui/libs/css/color.scss create mode 100644 uni_modules/uview-ui/libs/css/common.scss create mode 100644 uni_modules/uview-ui/libs/css/components.scss create mode 100644 uni_modules/uview-ui/libs/css/flex.scss create mode 100644 uni_modules/uview-ui/libs/css/h5.scss create mode 100644 uni_modules/uview-ui/libs/css/mixin.scss create mode 100644 uni_modules/uview-ui/libs/css/mp.scss create mode 100644 uni_modules/uview-ui/libs/css/nvue.scss create mode 100644 uni_modules/uview-ui/libs/css/vue.scss create mode 100644 uni_modules/uview-ui/libs/function/colorGradient.js create mode 100644 uni_modules/uview-ui/libs/function/debounce.js create mode 100644 uni_modules/uview-ui/libs/function/digit.js create mode 100644 uni_modules/uview-ui/libs/function/index.js create mode 100644 uni_modules/uview-ui/libs/function/platform.js create mode 100644 uni_modules/uview-ui/libs/function/test.js create mode 100644 uni_modules/uview-ui/libs/function/throttle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/Request.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/settle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/index.d.ts create mode 100644 uni_modules/uview-ui/libs/luch-request/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uview-ui/libs/mixin/button.js create mode 100644 uni_modules/uview-ui/libs/mixin/mixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpMixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpShare.js create mode 100644 uni_modules/uview-ui/libs/mixin/openType.js create mode 100644 uni_modules/uview-ui/libs/mixin/style.js create mode 100644 uni_modules/uview-ui/libs/mixin/touch.js create mode 100644 uni_modules/uview-ui/libs/util/async-validator.js create mode 100644 uni_modules/uview-ui/libs/util/calendar.js create mode 100644 uni_modules/uview-ui/libs/util/dayjs.js create mode 100644 uni_modules/uview-ui/libs/util/emitter.js create mode 100644 uni_modules/uview-ui/libs/util/route.js create mode 100644 uni_modules/uview-ui/package.json create mode 100644 uni_modules/uview-ui/theme.scss create mode 100644 utils/cache.js create mode 100644 utils/http.js create mode 100644 utils/oahttp.js create mode 100644 utils/request.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5931c11 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +node_modules +/dist +.hbuilderx + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +build.sh +.idea +unpackage +*.bak diff --git a/App.vue b/App.vue index 8c2b732..ad1984f 100644 --- a/App.vue +++ b/App.vue @@ -1,17 +1,23 @@ diff --git a/api/oa.js b/api/oa.js new file mode 100644 index 0000000..96119bb --- /dev/null +++ b/api/oa.js @@ -0,0 +1,21 @@ +import oahttp from "@/utils/oahttp.js"; + +//获取代办事项 已处理事项 +export const getMatters = (data) => oahttp.get('/approve/list', data, { noAuth: true }) + +//获取任务列表 +export const getTaskListApi = (data) => oahttp.get('/task/list', data) +//获取 我发起的审批 +export const getExamineListApi = () => oahttp.get('/approve/my_list') +//获取工资详情信息 +export const getSalaryDeatilsApi = () => oahttp.get('/user/info') +//获取部门 +export const getDepartmentApi = () => oahttp.get('/index/get_department_tree') +//获取部门人员 +export const getDepartmentPersonApi = (data) => oahttp.get('/index/get_employee', data) +//新建任务 +export const addNewTaskApi = (data) => oahttp.post('/task/add', data) +//获取文档列表 +export const getDocumentListApi = (data) => oahttp.get('/knowledge/list', data) +//获取个人信息 +export const getPersonInfoApi = () => oahttp.get('/user/index') diff --git a/api/oaApi.js b/api/oaApi.js new file mode 100644 index 0000000..a760698 --- /dev/null +++ b/api/oaApi.js @@ -0,0 +1,60 @@ +import oahttp from "@/utils/oahttp.js"; + +/** + * 获取代办事项 已处理事项 + */ +export const getIndexListAPI = (data) => oahttp.get('/index/list', data) + +/** + * 获取任务列表 + */ +export const getTaskListAPI = (data) => oahttp.get('/task/list', data) + +/** + * 获取我的任务 + */ +export const getMyTaskListAPI = (data) => oahttp.get('/task/datalist', data) + +/** + * 获取任务详情 + */ +export const getTaskDetailsAPI = (data) => oahttp.get('/task/read', data) +/** + * 我发起的审批 + */ +export const getApproveMyListAPI = (data) => oahttp.get('/approve/my_list', data) +/** + * 我审批的 + */ +export const getHandleListAPI = (data) => oahttp.get('/approve/handle_list', data) +/** + * 抄送给我的 + */ +export const getCopyOfMyListAPI = (data) => oahttp.get('/approve/copy', data) +/* + * 待办事项 + */ +export const getApproveListAPI = (data) => oahttp.get('/approve/list', data) +/** + * 获取个人中心数据 + */ +export const getUserIndexAPI = (data) => oahttp.get('/user/index', data) +/** + * 保存个人信息修改 + */ +export const PostUserPerSubmitAPI = (data) => oahttp.post('/user/personal_submit', data) +/** + * 获取审核流程 + * index/get_flow?type=1 + */ +export const getFlowAPI = (data) => oahttp.get('/index/get_flow', data) +/** + * 获取审核步骤人员 + */ +export const getFlowUsersAPI = (data) => oahttp.get('/index/get_flow_users', data, { noVerify: true }) +/** 获取部门树形节点列表 */ +export const getDepartmentTreeAPI = () => oahttp.get('/index/get_department_tree') +/** 获取某个部门的员工 */ +export const getEmployeeAPI = (data) => oahttp.get('/index/get_employee', data) +/** 发起审批 */ +export const PostApproveAddAPI = (data) => oahttp.post('/approve/add', data) diff --git a/api/pubic.js b/api/pubic.js new file mode 100644 index 0000000..4533f7f --- /dev/null +++ b/api/pubic.js @@ -0,0 +1,17 @@ +import request from '@/utils/request.js' +export function commonAuth(data) { + return request.post( + "auth", data, { + noAuth: true + } + ); +} +/** + * 小程序用户登录 + * @param data object 小程序用户登陆信息 + */ +export function login(data) { + return request.post("auth/mp", data, { + noAuth: true + }); +} diff --git a/api/upload.js b/api/upload.js new file mode 100644 index 0000000..1c6e395 --- /dev/null +++ b/api/upload.js @@ -0,0 +1,59 @@ +// import base from "@/config/baseUrl"; +// let baseUrl = 'https://ceshi.excellentkk.cn/api'; +import { HTTP_REQUEST_URL_TWO, HTTP_REQUEST_URL_THREE, HEADER } from '@/config/app'; +let header = HEADER; + +function uploads(src, type) { + return new Promise((resolve, reject) => { + // console.log('上传', type === 'img' ? '图片' : '视频', ':', src) + let a = uni.uploadFile({ + // url: base.baseUrl + '/upload?token=', + url: HTTP_REQUEST_URL_TWO + '/api' + '/upload?token=', + filePath: src, + name: 'file', + success: (res) => { + let data = JSON.parse(res.data) + if (data.code != 1) { + uni.$u.toast(data.msg) + return false + } else { + resolve(data.data.url) // 返回线上地址 + } + }, + fail: (err) => { + reject(err) + console.log('upload-上传失败', err) + } + }); + }) +} + +function oaUploads(src, type) { + return new Promise((resolve, reject) => { + // console.log('上传', type === 'img' ? '图片' : '视频', ':', src) + let a = uni.uploadFile({ + url: HTTP_REQUEST_URL_THREE + '/api/v1/index/upload', + filePath: src, + name: 'file', + header: header, + success: (res) => { + let data = JSON.parse(res.data) + if (data.code == 200) { + resolve(data.data) // 返回线上地址 + } else { + uni.$u.toast(data.msg) + return false + } + }, + fail: (err) => { + reject(err) + console.log('upload-上传失败', err) + } + }); + }) +} + +export { + uploads, + oaUploads +} diff --git a/api/user.js b/api/user.js new file mode 100644 index 0000000..784ac2b --- /dev/null +++ b/api/user.js @@ -0,0 +1,743 @@ +import request from "@/utils/request.js"; +import Cache from '@/utils/cache' +import http from "@/utils/http.js"; +/** + * 获取后台账号密码 + */ +export const getBackstageAPI = (data) => http.get('/User/get_backstage', data) +// 获取已录入公司 +export const getEnterListMsgAPI = (data) => http.get('/enter/list', data) +// 录入公司 +export const postEntercompanyAPI = (data) => request.post('entercompany', data) +// 获取地址 +export const getSiteAPI = (data) => http.get('/User/index', data) +export const getShimingAPI = (data) => http.get('/User/get_shiming', data) +export const postRealnameAPI = (data) => http.post('/User/realname', data) +/** + * 获取用户信息 + * + */ +export function getUserInfo() { + return request.get('user'); +} +/** + * 头像 + * + */ +export function editAvatar(data) { + return request.post('user/change/info', data); +} + +// 修改昵称 +export function updateInfo(data) { + return request.post('user/change/avatar', data); +} +/** + * h5用户登录 + * @param data object 用户账号密码 + */ +export function loginH5(data) { + return request.post("auth/login", data, { + noAuth: true + }); +} +/** + * h5用户手机号登录 + * @param data object 用户手机号 也只能 + */ +export function loginMobile(data) { + return request.post("auth/smslogin", data, { + noAuth: true + }); +} +/** + * h5用户手机号登录 + * @param data object 用户手机号 也只能 + */ +export function loginMpPhone(data) { + return request.post("auth/mp_phone", data, { + noAuth: true + }); +} +/** + * 验证码key + */ +export function getCodeApi() { + return request.get("verify_code", {}, { + noAuth: true + }); +} + +/** + * h5用户发送验证码 + * @param data object 用户手机号 + */ +export function registerVerify(data) { + return request.post("auth/verify", data, { + noAuth: true + }); +} +/** + * h5用户手机号注册 + * @param data object 用户手机号 验证码 密码 + */ +export function register(data) { + return request.post("auth/register", data, { + noAuth: true + }); +} + +/** + * 用户手机号修改密码 + * @param data object 用户手机号 验证码 密码 + */ +export function registerReset(data) { + return request.post("/register/reset", data, { + noAuth: true + }); +} +/** + * 用户手机号忘记密码 + */ +export function registerForget(data) { + return request.post("user/change_pwd", data, { + noAuth: true + }); +} +/** + * 获取用户中心菜单 + * + */ +export function getMenuList() { + return request.get("common/menus", {}, { + noAuth: true + }); +} +/* + * 签到用户信息 + * */ +export function getSignUser() { + return request.get("user/sign/info"); +} + +/** + * 获取签到配置 + * + */ +export function getSignConfig() { + return request.get('sign/config') +} +/** + * 获取签到列表 + * @param object data + */ +export function getSignList(data) { + return request.get('user/sign/lst', data); +} +/** + * 用户签到 + */ +export function setSignIntegral() { + return request.post('user/sign/create') +} + +/** + * 签到列表(年月) + * @param object data + * + */ +export function getSignMonthList(data) { + return request.get('user/sign/month', data) +} +/** + * 活动状态 + * + */ +export function userActivity() { + return request.get('user/activity'); +} +/* + * 资金明细(types|0=全部,1=消费,2=充值,3=返佣) + * */ +export function getCommissionInfo(q, types) { + return request.get("user/bill", q); +} +/* + * 提现列表 + * */ +export function extractLst(data) { + return request.get("user/extract/lst", data); +} +/* + * 积分记录 + * */ +export function getIntegralList(data) { + return request.get("user/integral/lst", data); +} + +/** + * 获取分销海报图片 + * + */ +export function spreadBanner() { + //#ifdef H5 + return request.get('user/spread_image', { + type: 'wechat' + }); + //#endif + //#ifdef MP + return request.get('user/spread_image', { + type: 'routine' + }); + //#endif +} +/** + * + * 获取推广用户一级和二级 + * @param object data + */ +export function spreadPeople(data) { + return request.get('user/spread_list', data); +} +/** + * + * 推广佣金/提现总和 + * @param int type + */ +export function spreadCount(type) { + return request.get('spread/count/' + type); +} +/* + * 推广数据 + * */ +export function getSpreadInfo() { + return request.get("/commission"); +} + +/** + * + * 推广订单 + * @param object data + */ +export function spreadOrder(data) { + return request.get('user/spread_order', data); +} + +/* + * 获取推广人排行 + * */ +export function getRankList(data) { + return request.get("user/spread_top", data); +} + +/* + * 获取佣金排名 + * */ +export function getBrokerageRank(q) { + return request.get("user/brokerage_top", q); +} + +/** + * 提现申请 + * @param object data + */ +export function extractCash(data) { + return request.post('user/extract/create', data) +} + +/** + * 提现银行/提现最低金额 + * + */ +export function extractBank() { + return request.get('user/extract/banklst'); +} + +/** + * 会员等级列表 + * + */ +export function userLevelGrade() { + return request.get('user/level/grade'); +} + +/** + * 获取某个等级任务 + * @param int id 任务id + */ +export function userLevelTask(id) { + return request.get('user/level/task/' + id); +} + +/** + * 检查用户是否可以成为会员 + * + */ +export function userLevelDetection() { + return request.get('user/level/detection'); +} + +/** + * + * 地址列表 + * @param object data + */ +export function getAddressList(data) { + return request.get('user/address/lst', data); +} + +/** + * 设置默认地址 + * @param int id + */ +export function setAddressDefault(id) { + return request.post('user/address/update/' + id) +} + +/** + * 修改 添加地址 + * @param object data + */ +export function editAddress(data) { + return request.post('user/address/create', data); +} + +/** + * 删除地址 + * @param int id + * + */ +export function delAddress(id) { + return request.post('user/address/delete/' + id) +} + +/** + * 获取单个地址 + * @param int id + */ +export function getAddressDetail(id) { + return request.get('user/address/detail/' + id); +} + +/** + * 修改用户信息 + * @param object + */ +export function userEdit(data) { + return request.post('user/edit', data); +} + +/* + * 退出登录 + * */ +export function getLogout() { + return request.post("logout"); +} + +/** + * 佣金转入 + * + */ +export function rechargeBrokerage(data) { + return request.post('user/recharge/brokerage', data) +} + +/** + * 小程序充值 + * + */ +export function rechargeRoutine(data) { + return request.post('recharge/routine', data) +} +/* + * 公众号充值 + * */ +export function rechargeWechat(data) { + return request.post("user/recharge", data); +} +/** + * 获取默认地址 + * + */ +export function getAddressDefault() { + return request.get('address/default'); +} + +/** + * 充值金额选择 + */ +export function getRechargeApi() { + return request.get("common/recharge_quota"); +} + +/** + * 登陆记录 + */ +export function setVisit(data) { + return request.post('user/set_visit', { + ...data + }, { + noAuth: true + }); +} + +/** + * 客服列表 + */ +export function serviceList(data) { + return request.get("service/list", data); +} + +/** + * 客服列表 + */ +export function serviceLogin(key, data) { + return request.post("service/scan_login/" + key, data); +} + +/** + * 客服获取客户列表 + */ +export function serviceUserList(mer_id, data) { + return request.get("service/user_list/" + mer_id, data); +} + +/** + * 用户获取聊天记录详情 + */ +export function getChatRecord(to_uid, data) { + return request.get("service/history/" + to_uid, data); +} + +/** + * 客服获取聊天记录详情 + */ +export function getMerHistory(userid, mer_id, data) { + return request.get("service/mer_history/" + mer_id + '/' + userid, data); +} + +/** + * 静默绑定推广人 + * @param {Object} puid + */ +export function spread(puid) { + Cache.set("spread", puid || 0); + return request.post("user/spread", { + spread_spid: puid + }); +} + +/** + * 反馈类型 + */ +export function feedbackType() { + return request.get("common/feedback_type"); +} + +/** + * 提交反馈 + */ +export function feedback(data) { + return request.post("user/feedback", { + ...data + }); +} + +/** + * 反馈列表 + */ +export function feedbackList(data) { + return request.get("user/feedback/list", data); +} + +/** + * 反馈列表 + */ +export function feedbackDetail(id) { + return request.get("user/feedback/detail/" + id); +} + +/** + * 浏览记录 + */ +export function historyList(data) { + return request.get("user/history", data); +} + +/** + * 删除浏览记录 + */ +export function historyDelete(id) { + return request.post("user/history/delete/" + id); +} +/** + * 批量删除浏览记录 + */ +export function historyBatchDelete(data) { + return request.post("user/history/batch/delete", data); +} +/** + * 批量收藏浏览记录 + */ +export function historyBatchCollect(data) { + return request.post("user/relation/batch/create", data); +} +/** + * 佣金记录 + */ +export function brokerage_list(data) { + return request.get("user/brokerage_list", data); +} + +/** + * 佣金数据 + */ +export function spreadInfo(data) { + return request.get("user/spread_info", data); +} + +// 图片验证码 +export function getCaptcha() { + return request.get('captcha', {}, { + noAuth: true + }); +} + +// 用户账户列表 +export function userAcc() { + return request.get('user/account', {}, { + noAuth: true + }); +} +// 创建发票 +export function invoiceSave(data) { + return request.post('user/receipt/create', data); +} +// 编辑发票 +export function invoiceUpdate(id, data) { + return request.post('user/receipt/update/' + id, data); +} +// 获取默认发票 +export function invoiceDefault(id) { + return request.post('user/receipt/is_default/' + id); +} +// 发票抬头--列表 +export function invoice(data) { + return request.get('user/receipt/lst', data); +} +// 发票抬头--删除 +export function invoiceDelete(id) { + return request.post('user/receipt/delete/' + id); +} +// 发票--详情 +export function invoiceDetail(id) { + return request.get('user/receipt/detail/' + id); +} + +/** + * 新版分享海报信息获取 + * + */ +export function spreadMsg(data) { + return request.get('user/v2/spread_image', data); +} + +/** + * 图片链接转base64 + * + */ +export function imgToBase(data) { + return request.post('common/base64', data); +} +/** + * 获取协议 + * + */ +export function getAgreementApi(key) { + return request.get('agreement/' + key, {}, { + noAuth: true + }); +} +/** + * 获取协议 + * + */ +export function getIntegralInfo() { + return request.get('user/integral/info'); +} +/** + * 获取店铺列表 + * + */ +export function getStoreList(data) { + return request.get('user/services', data); +} + +/* + 获取佣金说明 +*/ + +export function commissionDescription() { + return request.get('agreement/sys_extension_agree') +} +/* + 获取用户分销等级信息 +*/ + +export function getBrokerageInfo() { + return request.get('user/brokerage/info') +} +/* + 获取用户分销等级表格数据 +*/ + +export function getBrokerageGrade() { + return request.get('user/brokerage/all') +} +/* + 分销员升级提醒 +*/ + +export function brokerageNotice(data) { + return request.get(`user/brokerage/notice`, data) +} +/* + 口令解析 +*/ + +export function pwdResolution(data) { + return request.get(`command/copy?key=${data}`) +} +/* + 获取佣金说明 +*/ + +export function getInstructions(key) { + return request.get(`agreement/${key}`) +} +/* + 会员信息 +*/ + +export function memberInfo() { + return request.get('user/member/info') +} +/** + * 成长值记录 + * @param object data + * + */ +export function growthValueRecord(data) { + return request.get('user/member/log', data) +} + +/** + * 协议规则列表 + * @param object data + * + */ +export function cacheLst() { + return request.get('agreement_lst', {}, { + noAuth: true + }) +} + +/** + * 协议规则列表对应的数据 + * @param object data + * + */ +export function cacheInfo(key) { + return request.get(`agreement/${key}`, {}, { + noAuth: true + }) +} +/** + * 注销账户 + * @param object data + * + */ +export function userOut(data) { + return request.post(`user/cancel`, data) +} +/** + * 获取聊天用户信息 + * @param object data + * + */ +export function serviceUser(merId, uid) { + return request.get(`service/user/${merId}/${uid}`) +} +/** + * 保存聊天用户备注 + * @param object data + * + */ +export function serviceSaveMark(merId, uid, mark) { + return request.post(`service/mark/${merId}/${uid}`, { + mark + }) +} +/** + * 获取会员卡类型 + * @param object data + * + */ +export function memberCard() { + return request.get(`svip/pay_lst`) +} +/** + * 开通付费会员--支付 + * @param object data + * + */ +export function memberCardCreate(id, data) { + return request.post(`svip/pay/${id}`, data) +} +/** + * 付费会员权益 + * @param object data + * + */ +export function memberEquity() { + return request.get(`svip/user_info`, {}, { + noAuth: true + }) +} +/** + * 付费会员优惠券 + * @param object data + * + */ +export function memberCouponLst() { + return request.get(`svip/coupon_lst`, {}, { + noAuth: true + }) +} +/** + * 付费会员优惠券--领取 + * @param object data + * + */ +export function receiveMemberCoupon(id) { + return request.post(`svip/coupon_receive/${id}`) +} +/** + * 付费会员--会员商品 + * @param object data + * + */ +export function groomList(data) { + return request.get(`svip/product_lst`, data, { + noAuth: true + }) +} + +/** + * 客服聊天--撤回消息 + * @param object data + * + */ +export function chatReverstApi(id) { + return request.post(`service/recall/${id}`) +} diff --git a/components/tabbar.vue b/components/tabbar.vue new file mode 100644 index 0000000..a7e98a8 --- /dev/null +++ b/components/tabbar.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/components/verify/utils/ase.js b/components/verify/utils/ase.js new file mode 100644 index 0000000..1858675 --- /dev/null +++ b/components/verify/utils/ase.js @@ -0,0 +1,12 @@ +// import CryptoJS from './crypto-js.js' +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word,keyWord="XwKsGlMcdPMEhR1B"){ + // var key = CryptoJS.enc.Utf8.parse(keyWord); + // var srcs = CryptoJS.enc.Utf8.parse(word); + // var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); + // return encrypted.toString(); + return word +} diff --git a/components/verify/verify.vue b/components/verify/verify.vue new file mode 100644 index 0000000..8d8857d --- /dev/null +++ b/components/verify/verify.vue @@ -0,0 +1,515 @@ + + + diff --git a/components/verify/verifyPoint/verifyPoint.vue b/components/verify/verifyPoint/verifyPoint.vue new file mode 100644 index 0000000..f4d2197 --- /dev/null +++ b/components/verify/verifyPoint/verifyPoint.vue @@ -0,0 +1,544 @@ + + + + diff --git a/components/verify/verifySlider/verifySlider.vue b/components/verify/verifySlider/verifySlider.vue new file mode 100644 index 0000000..a198faf --- /dev/null +++ b/components/verify/verifySlider/verifySlider.vue @@ -0,0 +1,648 @@ + + + diff --git a/config/app.js b/config/app.js new file mode 100644 index 0000000..46c2eda --- /dev/null +++ b/config/app.js @@ -0,0 +1,53 @@ +let httpApiThree; +let httpApi +httpApi = 'https://shop.lihaink.cn' //生产 +httpApiThree = 'http://ceshi-oa.lihaink.cn' //生产 +// #ifdef H5 +httpApiThree = 'baseUrlTest' //生产 +// #endif + +// if (process.env.NODE_ENV === "development") { +// httpApi = "http://192.168.0.222:8324" +// // #ifdef MP-WEIXIN +// httpApiTwo = "http://cms.com" +// httpApiThree = 'http://ceshi-oa.lihaink.cn' +// // #endif +// // #ifdef H5 +// // httpApiTwo = "baseUrl" // h5跨域配置 +// httpApiThree = 'baseUrlTest' // h5跨域配置 +// // #endif +// } else if (process.env.NODE_ENV === 'production') { +// httpApi = 'https://shop.lihaink.cn' // 生产 +// httpApiTwo = 'https://nk.lihaink.cn' // 生产 +// httpApiThree = 'http://ceshi-oa.lihaink.cn' //生产 +// } + +module.exports = { + // 请求域名 格式: https://您的域名 + // #ifdef MP || APP-PLUS + HTTP_REQUEST_URL: httpApi, + HTTP_REQUEST_URL_THREE: httpApiThree, + // #endif + + // #ifdef H5 + //H5接口是浏览器地址 + HTTP_REQUEST_URL: httpApi || window.location.protocol + "//" + window.location.host, + HTTP_REQUEST_URL_THREE: httpApiThree || window.location.protocol + "//" + window.location.host, + // #endif + HEADER: { + 'content-type': 'application/json', + //#ifdef H5 + 'Form-type': 'h5', + //#endif + //#ifdef MP + 'Form-type': 'routine', + //#endif + //#ifdef APP-PLUS + 'Form-type': 'app', + //#endif + }, + // 回话密钥名称 请勿修改此配置 + TOKENNAME: 'X-Token', + // 缓存时间 0 永久 + EXPIRE: 0, +}; diff --git a/config/cache.js b/config/cache.js new file mode 100644 index 0000000..b824d12 --- /dev/null +++ b/config/cache.js @@ -0,0 +1,41 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +module.exports = { + //token + LOGIN_STATUS: 'LOGIN_STATUS_TOKEN', + // uid + UID:'UID', + //�û� + USER_INFO: 'USER_INFO', + //token�����¼� + EXPIRES_TIME: 'EXPIRES_TIME', + //�Ƿ���Ȩ + WX_AUTH: 'WX_AUTH', + //���ں���Ȩcode + STATE_KEY: 'wx_authorize_state', + //�û����� + LOGINTYPE: 'loginType', + //���ں���ת���� + BACK_URL: 'login_back_url', + // С����code + STATE_R_KEY: 'roution_authorize_state', + //��ȨlogoС���� + LOGO_URL: 'LOGO_URL', + //模板缓存 + SUBSCRIBE_MESSAGE: 'SUBSCRIBE_MESSAGE', + + TIPS_KEY: 'TIPS_KEY', + + SPREAD: 'spread', + //缓存经度 + CACHE_LONGITUDE: 'LONGITUDE', + //缓存纬度 + CACHE_LATITUDE: 'LATITUDE', +} diff --git a/libs/login.js b/libs/login.js new file mode 100644 index 0000000..9346b8f --- /dev/null +++ b/libs/login.js @@ -0,0 +1,104 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import store from "../store"; +import Cache from '../utils/cache'; +// #ifdef H5 +// import { isWeixin } from "../utils"; +// import auth from './wechat'; +// #endif + +import { + LOGIN_STATUS, + USER_INFO, + EXPIRES_TIME, + STATE_R_KEY +} from './../config/cache'; + +function prePage() { + let pages = getCurrentPages(); + console.log(pages) + let prePage = pages[pages.length - 2]; + // #ifdef H5 + return prePage; + // #endif + //return prePage.$vm; +} + +export function toLogin(push, pathLogin) { + store.commit("LOGOUT"); + let path = prePage(); + if (path) { + path = path.router; + if (path == undefined) { + path = location.pathname + location.search; + } + } + // #ifdef MP + uni.navigateTo({ + url: '/page/users/login/login' + }) + // #endif + // #ifdef H5 + else { + path = location.pathname + location.search; + } + // #endif + + if (!pathLogin) + pathLogin = '/page/users/login/login' + Cache.set('login_back_url', path); + uni.navigateTo({ + url: '/pages/users/login/login' + }) + // #ifdef H5 + if (isWeixin()) { + // auth.oAuth(); // 微信授权 + uni.navigateTo({ + url: '/pages/users/login/login' + }) + } else { + if (path !== pathLogin) { + push ? uni.navigateTo({ + url: '/pages/users/login/login' + }) : uni.reLaunch({ + url: '/pages/users/login/login' + }); + } + } + // #endif + + // #ifdef APP-PLUS + uni.navigateTo({ + url: '/pages/users/login/login', + }) + // #endif +} + + +export function checkLogin() { + let token = Cache.get(LOGIN_STATUS); + let expiresTime = Cache.get(EXPIRES_TIME) || 0; + let newTime = Math.round(new Date() / 1000); + if (expiresTime < newTime || !token) { + Cache.clear(LOGIN_STATUS); + Cache.clear(EXPIRES_TIME); + Cache.clear(USER_INFO); + Cache.clear(STATE_R_KEY); + return false; + } else { + store.commit('UPDATE_LOGIN', token); + let userInfo = Cache.get(USER_INFO, true); + if (userInfo) { + store.commit('UPDATE_USERINFO', userInfo); + } + return true; + } + +} diff --git a/libs/routine.js b/libs/routine.js new file mode 100644 index 0000000..7d1be4d --- /dev/null +++ b/libs/routine.js @@ -0,0 +1,186 @@ +import store from '@/store'; +import { checkLogin } from './login'; +import { login } from '@/api/pubic.js'; +import Cache from '@/utils/cache'; +import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS } from '@/config/cache'; + +class Routine { + + constructor() { + this.scopeUserInfo = 'scope.userInfo'; + } + + async getUserCode() { + let isAuth = await this.isAuth(), + code = ''; + if (isAuth) + code = await this.getCode(); + return code; + } + + /** + * 获取用户信息 + */ + getUserInfo() { + let that = this, + code = this.getUserCode(); + return new Promise((resolve, reject) => { + uni.getUserInfo({ + lang: 'zh_CN', + success(user) { + if (code) user.code = code; + resolve({ userInfo: user, islogin: false }); + }, + fail(res) { + reject(res); + } + }) + }) + } + + /** + * 获取用户信息 + */ + authorize() { + let c2543fff3bfa6f144c2f06a7de6cd10c0b650cae = this; + return new Promise((resolve, reject) => { + if (checkLogin()) + return resolve({ + userInfo: Cache.get(USER_INFO, true), + islogin: true, + }); + uni.authorize({ + scope: c2543fff3bfa6f144c2f06a7de6cd10c0b650cae.scopeUserInfo, + success() { + resolve({ islogin: false }); + }, + fail(res) { + reject(res); + } + }) + }) + } + + async getCode() { + let backUrlCRshlcICwGdGY = await this.getProvider(); + return new Promise((resolve, reject) => { + if (Cache.has(STATE_R_KEY)) { + return resolve(Cache.get(STATE_R_KEY)); + } + uni.login({ + provider: backUrlCRshlcICwGdGY, + success(res) { + if (res.code) Cache.set(STATE_R_KEY, res.code, 10800); + return resolve(res.code); + }, + fail() { + return reject(null); + } + }) + }) + } + + /** + * 获取服务供应商 + */ + getProvider() { + return new Promise((resolve, reject) => { + uni.getProvider({ + service: 'oauth', + success(res) { + resolve(res.provider); + }, + fail() { + resolve(false); + } + }); + }); + } + + /** + * 是否授权 + */ + isAuth() { + let that = this; + return new Promise((resolve, reject) => { + uni.getSetting({ + success(res) { + if (!res.authSetting[that.scopeUserInfo]) { + resolve(true) + } else { + resolve(true); + } + }, + fail() { + resolve(false); + } + }); + }); + } + getUserProfile(code) { + return new Promise((resolve, reject) => { + uni.getUserProfile({ + lang: 'zh_CN', + desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success(user) { + if (code) user.code = code; + resolve({ + userInfo: user, + islogin: false + }); + }, + fail(res) { + reject(res); + } + }) + }) + } + /** + * 小程序比较版本信息 + * @param v1 当前版本 + * @param v2 进行比较的版本 + * @return boolen + * + */ + compareVersion(v1, v2) { + v1 = v1.split('.') + v2 = v2.split('.') + const len = Math.max(v1.length, v2.length) + + while (v1.length < len) { + v1.push('0') + } + while (v2.length < len) { + v2.push('0') + } + + for (let i = 0; i < len; i++) { + const num1 = parseInt(v1[i]) + const num2 = parseInt(v2[i]) + + if (num1 > num2) { + return 1 + } else if (num1 < num2) { + return -1 + } + } + return 0 + } + authUserInfo(data) { + return new Promise((resolve, reject) => { + login(data).then(res => { + let time = res.data.expires_time - Cache.time(); + store.commit('UPDATE_USERINFO', res.data.user); + store.commit('LOGIN', { token: res.data.token, time: time }); + store.commit('SETUID', res.data.user.uid); + Cache.set(EXPIRES_TIME, res.data.expires_time, time); + Cache.set(USER_INFO, res.data.userInfo, time); + return resolve(res); + }).catch(res => { + return reject(res); + }) + }) + } +} + +export default new Routine(); diff --git a/libs/uniApi.js b/libs/uniApi.js new file mode 100644 index 0000000..3e72d30 --- /dev/null +++ b/libs/uniApi.js @@ -0,0 +1,474 @@ +// import uniCopy from '@/js_sdk/xb-copy/uni-copy.js'; // 拷贝功能插件 +// import compressImage from './compressImage.js'; // 解决图片旋转90°问题 +// const device = uni.getSystemInfoSync(); +// console.log("device:======================== " + JSON.stringify(device)); +/* + 参数说明 + @url + 要跳转的目标地址 + @opt + 要传给目标地址的参数 + 可在目标页面的onLoad生命周期函数的第一个参数中获取 +*/ + +// 压栈跳转页面 +export function navigateTo(type, url, opt) { + // H5端页面跳转目前不支持动画 (浏览器性能限制) + let toUrl = url; + let api = 'navigateTo'; + toUrl = opt ? toUrl + '?' + convertObj(opt) : toUrl; + + switch (type) { + case 1: + api = 'navigateTo'; + break; + case 2: + api = 'redirectTo'; // 关闭当前页,跳转应用内某个页面 + break; + case 3: + api = 'reLaunch'; // 关闭所有页面,打开到应用内某个页面 + break; + case 4: + api = 'switchTab'; //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 + break; + default: + api = 'navigateTo' + break; + } + uni[api]({ + url: toUrl, + animationType: 'slide-in-right', + animationDuration: 200 + }); +} + +// 关闭当前页面并返回上一页面 delta 标识返回几层 +export function navigateBack(delta) { + uni.navigateBack({ + delta: delta + }); +} + +// setStorage 将数据存入缓存 +export function setStorage(key, val) { + if (typeof val == 'string') { + uni.setStorageSync(key, val); + return val + } + uni.setStorageSync(key, JSON.stringify(val)); +} + +// getStorage 从缓存中读取数据 +export function getStorage(key) { + let uu = uni.getStorageSync(key); + try { + if (typeof JSON.parse(uu) != 'number') { + uu = JSON.parse(uu); + } + } catch (e) {} + return uu; +} +// 删除缓存中的数据 +export function removeStorage(key) { + if (key) { + uni.removeStorageSync(key); + } +} +// 将缓存中的数据清空 +export function clearStorage() { + try { + uni.clearStorageSync(); + } catch (e) { + throw new Error('处理失败'); + } +} +// 显示Toast +/* +@title 最多汉字数量7个 +@icon success loading none +*/ +export function Toast(title, icon = 'none', obj = {}, duration = 800) { + let toastData = { + title: title, + duration: duration, + position: 'center', + mask: true, + icon: icon ? icon : 'none', + ...obj + }; + uni.showToast(toastData); +} +/* +显示loading提示框,需要手动隐藏 +*/ +export function Loading(title = '正在加载...', obj = {}) { + uni.showLoading({ + title: title, + mask: true, + ...obj + }); +} +// 隐藏loading +export function hideLoading() { + try { + uni.hideLoading(); + } catch (e) { + //TODO handle the exception + throw new Error('处理失败'); + } +} +// 模态框 +/* +确定取消按钮的文字颜色可修改 +obj 对象中传入 cancelColor : rgb 即可修改取消按钮颜色 +obj 对象中传入 confirmColor : rgb 即可修改确认按钮颜色 +*/ +export function Modal(title = '提示', content = '这是一个模态弹窗!', obj = { + showCancel: true, + cancelText: '取消', + confirmText: '确定' +}) { + // #ifdef APP-PLUS + obj.cancelText = '确定'; + obj.confirmText = '取消'; + // #endif + return new Promise((reslove, reject) => { + uni.showModal({ + title: title, + content: content, + ...obj, + success: (res) => { + if (res.confirm) { + reslove() + } + if (res.cancel) { + reject() + } + } + }); + }) +} +/* +显示操作菜单 +@itemList 操作菜单数组 +@itemColor 文字颜色 +*/ +export function ActionSheet(itemList, itemColor = "#000000") { + return new Promise((reslove, reject) => { + uni.showActionSheet({ + itemList: itemList, + itemColor: itemColor, + success: (res) => { + reslove(res.tapIndex); + }, + fail: function(res) { + reject(res.errMsg); + } + }); + }) +} +//将页面滚动到目标位置。 +export function ScrollTo(ScrollTop) { + uni.pageScrollTo({ + scrollTop: ScrollTop, + duration: 300 + }) +} + +// 获取用户信息 +export function GetUserInfo() { + return new Promise((reslove, reject) => { + uni.getUserInfo({ + success(res) { + console.log(res); + reslove(res); + }, + fail(rej) { + reject(rej); + } + }) + }) +} + +// 获取用户授权信息 +export function Authorize(scoped = 'scope.userInfo') { + return new Promise((reslove, reject) => { + uni.authorize({ + scope: scoped, + success(res) { + reslove(res); + }, + fail(rej) { + reject(rej); + } + }) + }) +} + +// 将对象转换成使用 & 连接的字符串 +export function convertObj(opt) { + let str = ''; + let arr = []; + Object.keys(opt).forEach(item => { + arr.push(`${item}=${opt[item]}`); + }) + str = arr.join('&'); + return str; +} +// 节流函数 +// 节流函数 +export function throttle(fn, delay) { + var lastArgs; + var timer; + var delay = delay || 200; + return function(...args) { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + fn.apply(this, lastArgs); + }, delay); + } + } +} + +// 调起相机 +export function chooseImage(count) { + return new Promise((reslove, reject) => { + uni.chooseImage({ + count: count, //默认9 + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], //从相册选择 + success: (res) => { + reslove(res); + // const tempFilePaths = res.tempFilePaths; + // let tempPathList = []; + // for (let i = 0; i < tempFilePaths.length; i++) { + // const path = tempFilePaths[i]; + // const src = await compressImageHandler(path) + // tempPathList.push(src); + // } + // reslove(tempPathList); + }, + fail: (rej) => { + reject(rej); + } + }); + }) +} + +// function compressImageHandler(src) { +// // console.log('platform===' + device.platform) +// const tempPath = compressImage(src, device.platform); +// // console.log('tempPath-----' + tempPath); +// return tempPath +// } +//序列化对象和数组 +export function serialize(data) { + if (data != null && data != '') { + try { + return JSON.parse(JSON.stringify(data)); + } catch (e) { + if (data instanceof Array) { + return []; + } + return {}; + } + } + return data; +} +Date.prototype.format = function(fmt) { + let o = { + 'M+': this.getMonth() + 1, //月份 + 'd+': this.getDate(), //日 + 'h+': this.getHours(), //小时 + 'm+': this.getMinutes(), //分 + 's+': this.getSeconds(), //秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), //季度 + S: this.getMilliseconds() //毫秒 + }; + + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length)); + } + for (let k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(String(o[k]).length)); + } + } + return fmt; +}; + +//格式化日期 +export function formatDate(nS, format) { + //日期格式化 + if (!nS) { + return ''; + } + format = format || 'yyyy-MM-dd hh:mm:ss'; + return new Date(nS).format(format); +} + +// 图片转base64 +export function pathToBase64(path) { + return new Promise(function(resolve, reject) { + if (typeof window === 'object' && 'document' in window) { + if (typeof FileReader === 'function') { + var xhr = new XMLHttpRequest() + xhr.open('GET', path, true) + xhr.responseType = 'blob' + xhr.onload = function() { + if (this.status === 200) { + let fileReader = new FileReader() + fileReader.onload = function(e) { + resolve(e.target.result) + } + fileReader.onerror = reject + fileReader.readAsDataURL(this.response) + } + } + xhr.onerror = reject + xhr.send() + return + } + var canvas = document.createElement('canvas') + var c2x = canvas.getContext('2d') + var img = new Image + img.onload = function() { + canvas.width = img.width + canvas.height = img.height + c2x.drawImage(img, 0, 0) + resolve(canvas.toDataURL()) + canvas.height = canvas.width = 0 + } + img.onerror = reject + img.src = path + return + } + if (typeof plus === 'object') { + plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) { + entry.file(function(file) { + var fileReader = new plus.io.FileReader() + fileReader.onload = function(data) { + resolve(data.target.result) + } + fileReader.onerror = function(error) { + reject(error) + } + fileReader.readAsDataURL(file) + }, function(error) { + reject(error) + }) + }, function(error) { + reject(error) + }) + return + } + if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { + wx.getFileSystemManager().readFile({ + filePath: path, + encoding: 'base64', + success: function(res) { + resolve('data:image/png;base64,' + res.data) + }, + fail: function(error) { + reject(error) + } + }) + return + } + reject(new Error('not support')) + }) +} + + + + +/* +@value 要拷贝的内容 +*/ +// export function copyText(value) { +// // 条件编译,以下代码仅在H5出现 +// //#ifdef H5 +// return new Promise((reslove, reject) => { +// uniCopy({ +// content: value, +// success: (res) => { +// reslove(res); +// }, +// error: (e) => { +// reject(res) +// } +// }) +// }) + +// //#endif + +// // 以下代码在除H5以外的平台出现 +// //#ifndef H5 + +// //#endif +// } + +// 获取本周的第一天 +export function showWeekFirstDay() { + var date = new Date(); + var weekday = date.getDay() || 7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7 + date.setDate(date.getDate() - weekday + 1); //往前算(weekday-1)天,年份、月份会自动变化 + return formatDate(date, 'yyyy-MM-dd'); +} + + + +// 获取本月第一天 +export function showMonthFirstDay() { + var MonthFirstDay = new Date().setDate(1); + return formatDate(new Date(MonthFirstDay).getTime(), 'yyyy-MM-dd'); +} + +var now = new Date(); //当前日期 +// var nowDayOfWeek = now.getDay(); //今天本周的第几天 +// var nowDay = now.getDate(); //当前日 +var nowMonth = now.getMonth(); //当前月 +var nowYear = now.getYear(); //当前年 +nowYear += (nowYear < 2000) ? 1900 : 0; // +//获得本季度的开始月份 +function getQuarterStartMonth() { + var quarterStartMonth = 0; + if (nowMonth < 3) { + quarterStartMonth = 0; + } + if (2 < nowMonth && nowMonth < 6) { + quarterStartMonth = 3; + } + if (5 < nowMonth && nowMonth < 9) { + quarterStartMonth = 6; + } + if (nowMonth > 8) { + quarterStartMonth = 9; + } + return quarterStartMonth; +} + +//或的本季度的结束日期 +//获得本季度的开始日期 +export function getQuarterStartDate() { + var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1); + return formatDate(quarterStartDate, 'yyyy-MM-dd'); +} +// 删除数组中重复数据 +export function unique(data) { + data = data || []; + var n = {}; //存放新的数据 + for (var i = 0; i < data.length; i++) { + var v = JSON.stringify(data[i]); + if (typeof(v) == "undefined") { + n[v] = 1; + } + } + data.length = 0; + for (var i in n) { + data[data.length] = i; + } + return data; +} diff --git a/main.js b/main.js index af98bb7..caf1b0a 100644 --- a/main.js +++ b/main.js @@ -1,40 +1,15 @@ import App from './App' +import store from './store' +import uView from '@/uni_modules/uview-ui' +Vue.use(uView) // #ifndef VUE3 import Vue from 'vue' Vue.config.productionTip = false App.mpType = 'app' - -try { - function isPromise(obj) { - return ( - !!obj && - (typeof obj === "object" || typeof obj === "function") && - typeof obj.then === "function" - ); - } - - // 统一 vue2 API Promise 化返回格式与 vue3 保持一致 - uni.addInterceptor({ - returnValue(res) { - if (!isPromise(res)) { - return res; - } - return new Promise((resolve, reject) => { - res.then((res) => { - if (res[0]) { - reject(res[0]); - } else { - resolve(res[1]); - } - }); - }); - }, - }); -} catch (error) { } - const app = new Vue({ - ...App + ...App, + store }) app.$mount() // #endif @@ -47,4 +22,4 @@ export function createApp() { app } } -// #endif \ No newline at end of file +// #endif diff --git a/manifest.json b/manifest.json index 61b822d..0e187f4 100644 --- a/manifest.json +++ b/manifest.json @@ -1,72 +1,72 @@ { - "name" : "OfficeApp", - "appid" : "", - "description" : "", - "versionName" : "1.0.0", - "versionCode" : "100", - "transformPx" : false, - /* 5+App特有相关 */ - "app-plus" : { - "usingComponents" : true, - "nvueStyleCompiler" : "uni-app", - "compilerVersion" : 3, - "splashscreen" : { - "alwaysShowBeforeRender" : true, - "waiting" : true, - "autoclose" : true, - "delay" : 0 - }, - /* 模块配置 */ - "modules" : {}, - /* 应用发布信息 */ - "distribute" : { - /* android打包配置 */ - "android" : { - "permissions" : [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - }, - /* ios打包配置 */ - "ios" : {}, - /* SDK配置 */ - "sdkConfigs" : {} - } + "name": "nk-oa", + "appid": "__UNI__7F12D2D", + "description": "", + "versionName": "1.0.0", + "versionCode": "100", + "transformPx": false, + /* 5+App特有相关 */ + "app-plus": { + "usingComponents": true, + "nvueStyleCompiler": "uni-app", + "compilerVersion": 3, + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 }, - /* 快应用特有相关 */ - "quickapp" : {}, - /* 小程序特有相关 */ - "mp-weixin" : { - "appid" : "", - "setting" : { - "urlCheck" : false - }, - "usingComponents" : true + /* 模块配置 */ + "modules": {}, + /* 应用发布信息 */ + "distribute": { + /* android打包配置 */ + "android": { + "permissions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios": {}, + /* SDK配置 */ + "sdkConfigs": {} + } + }, + /* 快应用特有相关 */ + "quickapp": {}, + /* 小程序特有相关 */ + "mp-weixin": { + "appid": "wx6e14cb98394e36bc", + "setting": { + "urlCheck": false }, - "mp-alipay" : { - "usingComponents" : true - }, - "mp-baidu" : { - "usingComponents" : true - }, - "mp-toutiao" : { - "usingComponents" : true - }, - "uniStatistics" : { - "enable" : false - }, - "vueVersion" : "2" + "usingComponents": true + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "2" } diff --git a/nk-oa/.gitignore b/nk-oa/.gitignore new file mode 100644 index 0000000..5931c11 --- /dev/null +++ b/nk-oa/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +node_modules +/dist +.hbuilderx + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +build.sh +.idea +unpackage +*.bak diff --git a/nk-oa/App.vue b/nk-oa/App.vue new file mode 100644 index 0000000..ad1984f --- /dev/null +++ b/nk-oa/App.vue @@ -0,0 +1,23 @@ + + + diff --git a/nk-oa/api/oa.js b/nk-oa/api/oa.js new file mode 100644 index 0000000..96119bb --- /dev/null +++ b/nk-oa/api/oa.js @@ -0,0 +1,21 @@ +import oahttp from "@/utils/oahttp.js"; + +//获取代办事项 已处理事项 +export const getMatters = (data) => oahttp.get('/approve/list', data, { noAuth: true }) + +//获取任务列表 +export const getTaskListApi = (data) => oahttp.get('/task/list', data) +//获取 我发起的审批 +export const getExamineListApi = () => oahttp.get('/approve/my_list') +//获取工资详情信息 +export const getSalaryDeatilsApi = () => oahttp.get('/user/info') +//获取部门 +export const getDepartmentApi = () => oahttp.get('/index/get_department_tree') +//获取部门人员 +export const getDepartmentPersonApi = (data) => oahttp.get('/index/get_employee', data) +//新建任务 +export const addNewTaskApi = (data) => oahttp.post('/task/add', data) +//获取文档列表 +export const getDocumentListApi = (data) => oahttp.get('/knowledge/list', data) +//获取个人信息 +export const getPersonInfoApi = () => oahttp.get('/user/index') diff --git a/nk-oa/api/oaApi.js b/nk-oa/api/oaApi.js new file mode 100644 index 0000000..a760698 --- /dev/null +++ b/nk-oa/api/oaApi.js @@ -0,0 +1,60 @@ +import oahttp from "@/utils/oahttp.js"; + +/** + * 获取代办事项 已处理事项 + */ +export const getIndexListAPI = (data) => oahttp.get('/index/list', data) + +/** + * 获取任务列表 + */ +export const getTaskListAPI = (data) => oahttp.get('/task/list', data) + +/** + * 获取我的任务 + */ +export const getMyTaskListAPI = (data) => oahttp.get('/task/datalist', data) + +/** + * 获取任务详情 + */ +export const getTaskDetailsAPI = (data) => oahttp.get('/task/read', data) +/** + * 我发起的审批 + */ +export const getApproveMyListAPI = (data) => oahttp.get('/approve/my_list', data) +/** + * 我审批的 + */ +export const getHandleListAPI = (data) => oahttp.get('/approve/handle_list', data) +/** + * 抄送给我的 + */ +export const getCopyOfMyListAPI = (data) => oahttp.get('/approve/copy', data) +/* + * 待办事项 + */ +export const getApproveListAPI = (data) => oahttp.get('/approve/list', data) +/** + * 获取个人中心数据 + */ +export const getUserIndexAPI = (data) => oahttp.get('/user/index', data) +/** + * 保存个人信息修改 + */ +export const PostUserPerSubmitAPI = (data) => oahttp.post('/user/personal_submit', data) +/** + * 获取审核流程 + * index/get_flow?type=1 + */ +export const getFlowAPI = (data) => oahttp.get('/index/get_flow', data) +/** + * 获取审核步骤人员 + */ +export const getFlowUsersAPI = (data) => oahttp.get('/index/get_flow_users', data, { noVerify: true }) +/** 获取部门树形节点列表 */ +export const getDepartmentTreeAPI = () => oahttp.get('/index/get_department_tree') +/** 获取某个部门的员工 */ +export const getEmployeeAPI = (data) => oahttp.get('/index/get_employee', data) +/** 发起审批 */ +export const PostApproveAddAPI = (data) => oahttp.post('/approve/add', data) diff --git a/nk-oa/api/pubic.js b/nk-oa/api/pubic.js new file mode 100644 index 0000000..4533f7f --- /dev/null +++ b/nk-oa/api/pubic.js @@ -0,0 +1,17 @@ +import request from '@/utils/request.js' +export function commonAuth(data) { + return request.post( + "auth", data, { + noAuth: true + } + ); +} +/** + * 小程序用户登录 + * @param data object 小程序用户登陆信息 + */ +export function login(data) { + return request.post("auth/mp", data, { + noAuth: true + }); +} diff --git a/nk-oa/api/upload.js b/nk-oa/api/upload.js new file mode 100644 index 0000000..1c6e395 --- /dev/null +++ b/nk-oa/api/upload.js @@ -0,0 +1,59 @@ +// import base from "@/config/baseUrl"; +// let baseUrl = 'https://ceshi.excellentkk.cn/api'; +import { HTTP_REQUEST_URL_TWO, HTTP_REQUEST_URL_THREE, HEADER } from '@/config/app'; +let header = HEADER; + +function uploads(src, type) { + return new Promise((resolve, reject) => { + // console.log('上传', type === 'img' ? '图片' : '视频', ':', src) + let a = uni.uploadFile({ + // url: base.baseUrl + '/upload?token=', + url: HTTP_REQUEST_URL_TWO + '/api' + '/upload?token=', + filePath: src, + name: 'file', + success: (res) => { + let data = JSON.parse(res.data) + if (data.code != 1) { + uni.$u.toast(data.msg) + return false + } else { + resolve(data.data.url) // 返回线上地址 + } + }, + fail: (err) => { + reject(err) + console.log('upload-上传失败', err) + } + }); + }) +} + +function oaUploads(src, type) { + return new Promise((resolve, reject) => { + // console.log('上传', type === 'img' ? '图片' : '视频', ':', src) + let a = uni.uploadFile({ + url: HTTP_REQUEST_URL_THREE + '/api/v1/index/upload', + filePath: src, + name: 'file', + header: header, + success: (res) => { + let data = JSON.parse(res.data) + if (data.code == 200) { + resolve(data.data) // 返回线上地址 + } else { + uni.$u.toast(data.msg) + return false + } + }, + fail: (err) => { + reject(err) + console.log('upload-上传失败', err) + } + }); + }) +} + +export { + uploads, + oaUploads +} diff --git a/nk-oa/api/user.js b/nk-oa/api/user.js new file mode 100644 index 0000000..784ac2b --- /dev/null +++ b/nk-oa/api/user.js @@ -0,0 +1,743 @@ +import request from "@/utils/request.js"; +import Cache from '@/utils/cache' +import http from "@/utils/http.js"; +/** + * 获取后台账号密码 + */ +export const getBackstageAPI = (data) => http.get('/User/get_backstage', data) +// 获取已录入公司 +export const getEnterListMsgAPI = (data) => http.get('/enter/list', data) +// 录入公司 +export const postEntercompanyAPI = (data) => request.post('entercompany', data) +// 获取地址 +export const getSiteAPI = (data) => http.get('/User/index', data) +export const getShimingAPI = (data) => http.get('/User/get_shiming', data) +export const postRealnameAPI = (data) => http.post('/User/realname', data) +/** + * 获取用户信息 + * + */ +export function getUserInfo() { + return request.get('user'); +} +/** + * 头像 + * + */ +export function editAvatar(data) { + return request.post('user/change/info', data); +} + +// 修改昵称 +export function updateInfo(data) { + return request.post('user/change/avatar', data); +} +/** + * h5用户登录 + * @param data object 用户账号密码 + */ +export function loginH5(data) { + return request.post("auth/login", data, { + noAuth: true + }); +} +/** + * h5用户手机号登录 + * @param data object 用户手机号 也只能 + */ +export function loginMobile(data) { + return request.post("auth/smslogin", data, { + noAuth: true + }); +} +/** + * h5用户手机号登录 + * @param data object 用户手机号 也只能 + */ +export function loginMpPhone(data) { + return request.post("auth/mp_phone", data, { + noAuth: true + }); +} +/** + * 验证码key + */ +export function getCodeApi() { + return request.get("verify_code", {}, { + noAuth: true + }); +} + +/** + * h5用户发送验证码 + * @param data object 用户手机号 + */ +export function registerVerify(data) { + return request.post("auth/verify", data, { + noAuth: true + }); +} +/** + * h5用户手机号注册 + * @param data object 用户手机号 验证码 密码 + */ +export function register(data) { + return request.post("auth/register", data, { + noAuth: true + }); +} + +/** + * 用户手机号修改密码 + * @param data object 用户手机号 验证码 密码 + */ +export function registerReset(data) { + return request.post("/register/reset", data, { + noAuth: true + }); +} +/** + * 用户手机号忘记密码 + */ +export function registerForget(data) { + return request.post("user/change_pwd", data, { + noAuth: true + }); +} +/** + * 获取用户中心菜单 + * + */ +export function getMenuList() { + return request.get("common/menus", {}, { + noAuth: true + }); +} +/* + * 签到用户信息 + * */ +export function getSignUser() { + return request.get("user/sign/info"); +} + +/** + * 获取签到配置 + * + */ +export function getSignConfig() { + return request.get('sign/config') +} +/** + * 获取签到列表 + * @param object data + */ +export function getSignList(data) { + return request.get('user/sign/lst', data); +} +/** + * 用户签到 + */ +export function setSignIntegral() { + return request.post('user/sign/create') +} + +/** + * 签到列表(年月) + * @param object data + * + */ +export function getSignMonthList(data) { + return request.get('user/sign/month', data) +} +/** + * 活动状态 + * + */ +export function userActivity() { + return request.get('user/activity'); +} +/* + * 资金明细(types|0=全部,1=消费,2=充值,3=返佣) + * */ +export function getCommissionInfo(q, types) { + return request.get("user/bill", q); +} +/* + * 提现列表 + * */ +export function extractLst(data) { + return request.get("user/extract/lst", data); +} +/* + * 积分记录 + * */ +export function getIntegralList(data) { + return request.get("user/integral/lst", data); +} + +/** + * 获取分销海报图片 + * + */ +export function spreadBanner() { + //#ifdef H5 + return request.get('user/spread_image', { + type: 'wechat' + }); + //#endif + //#ifdef MP + return request.get('user/spread_image', { + type: 'routine' + }); + //#endif +} +/** + * + * 获取推广用户一级和二级 + * @param object data + */ +export function spreadPeople(data) { + return request.get('user/spread_list', data); +} +/** + * + * 推广佣金/提现总和 + * @param int type + */ +export function spreadCount(type) { + return request.get('spread/count/' + type); +} +/* + * 推广数据 + * */ +export function getSpreadInfo() { + return request.get("/commission"); +} + +/** + * + * 推广订单 + * @param object data + */ +export function spreadOrder(data) { + return request.get('user/spread_order', data); +} + +/* + * 获取推广人排行 + * */ +export function getRankList(data) { + return request.get("user/spread_top", data); +} + +/* + * 获取佣金排名 + * */ +export function getBrokerageRank(q) { + return request.get("user/brokerage_top", q); +} + +/** + * 提现申请 + * @param object data + */ +export function extractCash(data) { + return request.post('user/extract/create', data) +} + +/** + * 提现银行/提现最低金额 + * + */ +export function extractBank() { + return request.get('user/extract/banklst'); +} + +/** + * 会员等级列表 + * + */ +export function userLevelGrade() { + return request.get('user/level/grade'); +} + +/** + * 获取某个等级任务 + * @param int id 任务id + */ +export function userLevelTask(id) { + return request.get('user/level/task/' + id); +} + +/** + * 检查用户是否可以成为会员 + * + */ +export function userLevelDetection() { + return request.get('user/level/detection'); +} + +/** + * + * 地址列表 + * @param object data + */ +export function getAddressList(data) { + return request.get('user/address/lst', data); +} + +/** + * 设置默认地址 + * @param int id + */ +export function setAddressDefault(id) { + return request.post('user/address/update/' + id) +} + +/** + * 修改 添加地址 + * @param object data + */ +export function editAddress(data) { + return request.post('user/address/create', data); +} + +/** + * 删除地址 + * @param int id + * + */ +export function delAddress(id) { + return request.post('user/address/delete/' + id) +} + +/** + * 获取单个地址 + * @param int id + */ +export function getAddressDetail(id) { + return request.get('user/address/detail/' + id); +} + +/** + * 修改用户信息 + * @param object + */ +export function userEdit(data) { + return request.post('user/edit', data); +} + +/* + * 退出登录 + * */ +export function getLogout() { + return request.post("logout"); +} + +/** + * 佣金转入 + * + */ +export function rechargeBrokerage(data) { + return request.post('user/recharge/brokerage', data) +} + +/** + * 小程序充值 + * + */ +export function rechargeRoutine(data) { + return request.post('recharge/routine', data) +} +/* + * 公众号充值 + * */ +export function rechargeWechat(data) { + return request.post("user/recharge", data); +} +/** + * 获取默认地址 + * + */ +export function getAddressDefault() { + return request.get('address/default'); +} + +/** + * 充值金额选择 + */ +export function getRechargeApi() { + return request.get("common/recharge_quota"); +} + +/** + * 登陆记录 + */ +export function setVisit(data) { + return request.post('user/set_visit', { + ...data + }, { + noAuth: true + }); +} + +/** + * 客服列表 + */ +export function serviceList(data) { + return request.get("service/list", data); +} + +/** + * 客服列表 + */ +export function serviceLogin(key, data) { + return request.post("service/scan_login/" + key, data); +} + +/** + * 客服获取客户列表 + */ +export function serviceUserList(mer_id, data) { + return request.get("service/user_list/" + mer_id, data); +} + +/** + * 用户获取聊天记录详情 + */ +export function getChatRecord(to_uid, data) { + return request.get("service/history/" + to_uid, data); +} + +/** + * 客服获取聊天记录详情 + */ +export function getMerHistory(userid, mer_id, data) { + return request.get("service/mer_history/" + mer_id + '/' + userid, data); +} + +/** + * 静默绑定推广人 + * @param {Object} puid + */ +export function spread(puid) { + Cache.set("spread", puid || 0); + return request.post("user/spread", { + spread_spid: puid + }); +} + +/** + * 反馈类型 + */ +export function feedbackType() { + return request.get("common/feedback_type"); +} + +/** + * 提交反馈 + */ +export function feedback(data) { + return request.post("user/feedback", { + ...data + }); +} + +/** + * 反馈列表 + */ +export function feedbackList(data) { + return request.get("user/feedback/list", data); +} + +/** + * 反馈列表 + */ +export function feedbackDetail(id) { + return request.get("user/feedback/detail/" + id); +} + +/** + * 浏览记录 + */ +export function historyList(data) { + return request.get("user/history", data); +} + +/** + * 删除浏览记录 + */ +export function historyDelete(id) { + return request.post("user/history/delete/" + id); +} +/** + * 批量删除浏览记录 + */ +export function historyBatchDelete(data) { + return request.post("user/history/batch/delete", data); +} +/** + * 批量收藏浏览记录 + */ +export function historyBatchCollect(data) { + return request.post("user/relation/batch/create", data); +} +/** + * 佣金记录 + */ +export function brokerage_list(data) { + return request.get("user/brokerage_list", data); +} + +/** + * 佣金数据 + */ +export function spreadInfo(data) { + return request.get("user/spread_info", data); +} + +// 图片验证码 +export function getCaptcha() { + return request.get('captcha', {}, { + noAuth: true + }); +} + +// 用户账户列表 +export function userAcc() { + return request.get('user/account', {}, { + noAuth: true + }); +} +// 创建发票 +export function invoiceSave(data) { + return request.post('user/receipt/create', data); +} +// 编辑发票 +export function invoiceUpdate(id, data) { + return request.post('user/receipt/update/' + id, data); +} +// 获取默认发票 +export function invoiceDefault(id) { + return request.post('user/receipt/is_default/' + id); +} +// 发票抬头--列表 +export function invoice(data) { + return request.get('user/receipt/lst', data); +} +// 发票抬头--删除 +export function invoiceDelete(id) { + return request.post('user/receipt/delete/' + id); +} +// 发票--详情 +export function invoiceDetail(id) { + return request.get('user/receipt/detail/' + id); +} + +/** + * 新版分享海报信息获取 + * + */ +export function spreadMsg(data) { + return request.get('user/v2/spread_image', data); +} + +/** + * 图片链接转base64 + * + */ +export function imgToBase(data) { + return request.post('common/base64', data); +} +/** + * 获取协议 + * + */ +export function getAgreementApi(key) { + return request.get('agreement/' + key, {}, { + noAuth: true + }); +} +/** + * 获取协议 + * + */ +export function getIntegralInfo() { + return request.get('user/integral/info'); +} +/** + * 获取店铺列表 + * + */ +export function getStoreList(data) { + return request.get('user/services', data); +} + +/* + 获取佣金说明 +*/ + +export function commissionDescription() { + return request.get('agreement/sys_extension_agree') +} +/* + 获取用户分销等级信息 +*/ + +export function getBrokerageInfo() { + return request.get('user/brokerage/info') +} +/* + 获取用户分销等级表格数据 +*/ + +export function getBrokerageGrade() { + return request.get('user/brokerage/all') +} +/* + 分销员升级提醒 +*/ + +export function brokerageNotice(data) { + return request.get(`user/brokerage/notice`, data) +} +/* + 口令解析 +*/ + +export function pwdResolution(data) { + return request.get(`command/copy?key=${data}`) +} +/* + 获取佣金说明 +*/ + +export function getInstructions(key) { + return request.get(`agreement/${key}`) +} +/* + 会员信息 +*/ + +export function memberInfo() { + return request.get('user/member/info') +} +/** + * 成长值记录 + * @param object data + * + */ +export function growthValueRecord(data) { + return request.get('user/member/log', data) +} + +/** + * 协议规则列表 + * @param object data + * + */ +export function cacheLst() { + return request.get('agreement_lst', {}, { + noAuth: true + }) +} + +/** + * 协议规则列表对应的数据 + * @param object data + * + */ +export function cacheInfo(key) { + return request.get(`agreement/${key}`, {}, { + noAuth: true + }) +} +/** + * 注销账户 + * @param object data + * + */ +export function userOut(data) { + return request.post(`user/cancel`, data) +} +/** + * 获取聊天用户信息 + * @param object data + * + */ +export function serviceUser(merId, uid) { + return request.get(`service/user/${merId}/${uid}`) +} +/** + * 保存聊天用户备注 + * @param object data + * + */ +export function serviceSaveMark(merId, uid, mark) { + return request.post(`service/mark/${merId}/${uid}`, { + mark + }) +} +/** + * 获取会员卡类型 + * @param object data + * + */ +export function memberCard() { + return request.get(`svip/pay_lst`) +} +/** + * 开通付费会员--支付 + * @param object data + * + */ +export function memberCardCreate(id, data) { + return request.post(`svip/pay/${id}`, data) +} +/** + * 付费会员权益 + * @param object data + * + */ +export function memberEquity() { + return request.get(`svip/user_info`, {}, { + noAuth: true + }) +} +/** + * 付费会员优惠券 + * @param object data + * + */ +export function memberCouponLst() { + return request.get(`svip/coupon_lst`, {}, { + noAuth: true + }) +} +/** + * 付费会员优惠券--领取 + * @param object data + * + */ +export function receiveMemberCoupon(id) { + return request.post(`svip/coupon_receive/${id}`) +} +/** + * 付费会员--会员商品 + * @param object data + * + */ +export function groomList(data) { + return request.get(`svip/product_lst`, data, { + noAuth: true + }) +} + +/** + * 客服聊天--撤回消息 + * @param object data + * + */ +export function chatReverstApi(id) { + return request.post(`service/recall/${id}`) +} diff --git a/nk-oa/components/tabbar.vue b/nk-oa/components/tabbar.vue new file mode 100644 index 0000000..a7e98a8 --- /dev/null +++ b/nk-oa/components/tabbar.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/nk-oa/components/verify/utils/ase.js b/nk-oa/components/verify/utils/ase.js new file mode 100644 index 0000000..1858675 --- /dev/null +++ b/nk-oa/components/verify/utils/ase.js @@ -0,0 +1,12 @@ +// import CryptoJS from './crypto-js.js' +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word,keyWord="XwKsGlMcdPMEhR1B"){ + // var key = CryptoJS.enc.Utf8.parse(keyWord); + // var srcs = CryptoJS.enc.Utf8.parse(word); + // var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); + // return encrypted.toString(); + return word +} diff --git a/nk-oa/components/verify/verify.vue b/nk-oa/components/verify/verify.vue new file mode 100644 index 0000000..8d8857d --- /dev/null +++ b/nk-oa/components/verify/verify.vue @@ -0,0 +1,515 @@ + + + diff --git a/nk-oa/components/verify/verifyPoint/verifyPoint.vue b/nk-oa/components/verify/verifyPoint/verifyPoint.vue new file mode 100644 index 0000000..f4d2197 --- /dev/null +++ b/nk-oa/components/verify/verifyPoint/verifyPoint.vue @@ -0,0 +1,544 @@ + + + + diff --git a/nk-oa/components/verify/verifySlider/verifySlider.vue b/nk-oa/components/verify/verifySlider/verifySlider.vue new file mode 100644 index 0000000..a198faf --- /dev/null +++ b/nk-oa/components/verify/verifySlider/verifySlider.vue @@ -0,0 +1,648 @@ + + + diff --git a/nk-oa/config/app.js b/nk-oa/config/app.js new file mode 100644 index 0000000..46c2eda --- /dev/null +++ b/nk-oa/config/app.js @@ -0,0 +1,53 @@ +let httpApiThree; +let httpApi +httpApi = 'https://shop.lihaink.cn' //生产 +httpApiThree = 'http://ceshi-oa.lihaink.cn' //生产 +// #ifdef H5 +httpApiThree = 'baseUrlTest' //生产 +// #endif + +// if (process.env.NODE_ENV === "development") { +// httpApi = "http://192.168.0.222:8324" +// // #ifdef MP-WEIXIN +// httpApiTwo = "http://cms.com" +// httpApiThree = 'http://ceshi-oa.lihaink.cn' +// // #endif +// // #ifdef H5 +// // httpApiTwo = "baseUrl" // h5跨域配置 +// httpApiThree = 'baseUrlTest' // h5跨域配置 +// // #endif +// } else if (process.env.NODE_ENV === 'production') { +// httpApi = 'https://shop.lihaink.cn' // 生产 +// httpApiTwo = 'https://nk.lihaink.cn' // 生产 +// httpApiThree = 'http://ceshi-oa.lihaink.cn' //生产 +// } + +module.exports = { + // 请求域名 格式: https://您的域名 + // #ifdef MP || APP-PLUS + HTTP_REQUEST_URL: httpApi, + HTTP_REQUEST_URL_THREE: httpApiThree, + // #endif + + // #ifdef H5 + //H5接口是浏览器地址 + HTTP_REQUEST_URL: httpApi || window.location.protocol + "//" + window.location.host, + HTTP_REQUEST_URL_THREE: httpApiThree || window.location.protocol + "//" + window.location.host, + // #endif + HEADER: { + 'content-type': 'application/json', + //#ifdef H5 + 'Form-type': 'h5', + //#endif + //#ifdef MP + 'Form-type': 'routine', + //#endif + //#ifdef APP-PLUS + 'Form-type': 'app', + //#endif + }, + // 回话密钥名称 请勿修改此配置 + TOKENNAME: 'X-Token', + // 缓存时间 0 永久 + EXPIRE: 0, +}; diff --git a/nk-oa/config/cache.js b/nk-oa/config/cache.js new file mode 100644 index 0000000..b824d12 --- /dev/null +++ b/nk-oa/config/cache.js @@ -0,0 +1,41 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +module.exports = { + //token + LOGIN_STATUS: 'LOGIN_STATUS_TOKEN', + // uid + UID:'UID', + //�û� + USER_INFO: 'USER_INFO', + //token�����¼� + EXPIRES_TIME: 'EXPIRES_TIME', + //�Ƿ���Ȩ + WX_AUTH: 'WX_AUTH', + //���ں���Ȩcode + STATE_KEY: 'wx_authorize_state', + //�û����� + LOGINTYPE: 'loginType', + //���ں���ת���� + BACK_URL: 'login_back_url', + // С����code + STATE_R_KEY: 'roution_authorize_state', + //��ȨlogoС���� + LOGO_URL: 'LOGO_URL', + //模板缓存 + SUBSCRIBE_MESSAGE: 'SUBSCRIBE_MESSAGE', + + TIPS_KEY: 'TIPS_KEY', + + SPREAD: 'spread', + //缓存经度 + CACHE_LONGITUDE: 'LONGITUDE', + //缓存纬度 + CACHE_LATITUDE: 'LATITUDE', +} diff --git a/nk-oa/index.html b/nk-oa/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/nk-oa/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/nk-oa/libs/login.js b/nk-oa/libs/login.js new file mode 100644 index 0000000..9346b8f --- /dev/null +++ b/nk-oa/libs/login.js @@ -0,0 +1,104 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import store from "../store"; +import Cache from '../utils/cache'; +// #ifdef H5 +// import { isWeixin } from "../utils"; +// import auth from './wechat'; +// #endif + +import { + LOGIN_STATUS, + USER_INFO, + EXPIRES_TIME, + STATE_R_KEY +} from './../config/cache'; + +function prePage() { + let pages = getCurrentPages(); + console.log(pages) + let prePage = pages[pages.length - 2]; + // #ifdef H5 + return prePage; + // #endif + //return prePage.$vm; +} + +export function toLogin(push, pathLogin) { + store.commit("LOGOUT"); + let path = prePage(); + if (path) { + path = path.router; + if (path == undefined) { + path = location.pathname + location.search; + } + } + // #ifdef MP + uni.navigateTo({ + url: '/page/users/login/login' + }) + // #endif + // #ifdef H5 + else { + path = location.pathname + location.search; + } + // #endif + + if (!pathLogin) + pathLogin = '/page/users/login/login' + Cache.set('login_back_url', path); + uni.navigateTo({ + url: '/pages/users/login/login' + }) + // #ifdef H5 + if (isWeixin()) { + // auth.oAuth(); // 微信授权 + uni.navigateTo({ + url: '/pages/users/login/login' + }) + } else { + if (path !== pathLogin) { + push ? uni.navigateTo({ + url: '/pages/users/login/login' + }) : uni.reLaunch({ + url: '/pages/users/login/login' + }); + } + } + // #endif + + // #ifdef APP-PLUS + uni.navigateTo({ + url: '/pages/users/login/login', + }) + // #endif +} + + +export function checkLogin() { + let token = Cache.get(LOGIN_STATUS); + let expiresTime = Cache.get(EXPIRES_TIME) || 0; + let newTime = Math.round(new Date() / 1000); + if (expiresTime < newTime || !token) { + Cache.clear(LOGIN_STATUS); + Cache.clear(EXPIRES_TIME); + Cache.clear(USER_INFO); + Cache.clear(STATE_R_KEY); + return false; + } else { + store.commit('UPDATE_LOGIN', token); + let userInfo = Cache.get(USER_INFO, true); + if (userInfo) { + store.commit('UPDATE_USERINFO', userInfo); + } + return true; + } + +} diff --git a/nk-oa/libs/routine.js b/nk-oa/libs/routine.js new file mode 100644 index 0000000..7d1be4d --- /dev/null +++ b/nk-oa/libs/routine.js @@ -0,0 +1,186 @@ +import store from '@/store'; +import { checkLogin } from './login'; +import { login } from '@/api/pubic.js'; +import Cache from '@/utils/cache'; +import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS } from '@/config/cache'; + +class Routine { + + constructor() { + this.scopeUserInfo = 'scope.userInfo'; + } + + async getUserCode() { + let isAuth = await this.isAuth(), + code = ''; + if (isAuth) + code = await this.getCode(); + return code; + } + + /** + * 获取用户信息 + */ + getUserInfo() { + let that = this, + code = this.getUserCode(); + return new Promise((resolve, reject) => { + uni.getUserInfo({ + lang: 'zh_CN', + success(user) { + if (code) user.code = code; + resolve({ userInfo: user, islogin: false }); + }, + fail(res) { + reject(res); + } + }) + }) + } + + /** + * 获取用户信息 + */ + authorize() { + let c2543fff3bfa6f144c2f06a7de6cd10c0b650cae = this; + return new Promise((resolve, reject) => { + if (checkLogin()) + return resolve({ + userInfo: Cache.get(USER_INFO, true), + islogin: true, + }); + uni.authorize({ + scope: c2543fff3bfa6f144c2f06a7de6cd10c0b650cae.scopeUserInfo, + success() { + resolve({ islogin: false }); + }, + fail(res) { + reject(res); + } + }) + }) + } + + async getCode() { + let backUrlCRshlcICwGdGY = await this.getProvider(); + return new Promise((resolve, reject) => { + if (Cache.has(STATE_R_KEY)) { + return resolve(Cache.get(STATE_R_KEY)); + } + uni.login({ + provider: backUrlCRshlcICwGdGY, + success(res) { + if (res.code) Cache.set(STATE_R_KEY, res.code, 10800); + return resolve(res.code); + }, + fail() { + return reject(null); + } + }) + }) + } + + /** + * 获取服务供应商 + */ + getProvider() { + return new Promise((resolve, reject) => { + uni.getProvider({ + service: 'oauth', + success(res) { + resolve(res.provider); + }, + fail() { + resolve(false); + } + }); + }); + } + + /** + * 是否授权 + */ + isAuth() { + let that = this; + return new Promise((resolve, reject) => { + uni.getSetting({ + success(res) { + if (!res.authSetting[that.scopeUserInfo]) { + resolve(true) + } else { + resolve(true); + } + }, + fail() { + resolve(false); + } + }); + }); + } + getUserProfile(code) { + return new Promise((resolve, reject) => { + uni.getUserProfile({ + lang: 'zh_CN', + desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success(user) { + if (code) user.code = code; + resolve({ + userInfo: user, + islogin: false + }); + }, + fail(res) { + reject(res); + } + }) + }) + } + /** + * 小程序比较版本信息 + * @param v1 当前版本 + * @param v2 进行比较的版本 + * @return boolen + * + */ + compareVersion(v1, v2) { + v1 = v1.split('.') + v2 = v2.split('.') + const len = Math.max(v1.length, v2.length) + + while (v1.length < len) { + v1.push('0') + } + while (v2.length < len) { + v2.push('0') + } + + for (let i = 0; i < len; i++) { + const num1 = parseInt(v1[i]) + const num2 = parseInt(v2[i]) + + if (num1 > num2) { + return 1 + } else if (num1 < num2) { + return -1 + } + } + return 0 + } + authUserInfo(data) { + return new Promise((resolve, reject) => { + login(data).then(res => { + let time = res.data.expires_time - Cache.time(); + store.commit('UPDATE_USERINFO', res.data.user); + store.commit('LOGIN', { token: res.data.token, time: time }); + store.commit('SETUID', res.data.user.uid); + Cache.set(EXPIRES_TIME, res.data.expires_time, time); + Cache.set(USER_INFO, res.data.userInfo, time); + return resolve(res); + }).catch(res => { + return reject(res); + }) + }) + } +} + +export default new Routine(); diff --git a/nk-oa/libs/uniApi.js b/nk-oa/libs/uniApi.js new file mode 100644 index 0000000..3e72d30 --- /dev/null +++ b/nk-oa/libs/uniApi.js @@ -0,0 +1,474 @@ +// import uniCopy from '@/js_sdk/xb-copy/uni-copy.js'; // 拷贝功能插件 +// import compressImage from './compressImage.js'; // 解决图片旋转90°问题 +// const device = uni.getSystemInfoSync(); +// console.log("device:======================== " + JSON.stringify(device)); +/* + 参数说明 + @url + 要跳转的目标地址 + @opt + 要传给目标地址的参数 + 可在目标页面的onLoad生命周期函数的第一个参数中获取 +*/ + +// 压栈跳转页面 +export function navigateTo(type, url, opt) { + // H5端页面跳转目前不支持动画 (浏览器性能限制) + let toUrl = url; + let api = 'navigateTo'; + toUrl = opt ? toUrl + '?' + convertObj(opt) : toUrl; + + switch (type) { + case 1: + api = 'navigateTo'; + break; + case 2: + api = 'redirectTo'; // 关闭当前页,跳转应用内某个页面 + break; + case 3: + api = 'reLaunch'; // 关闭所有页面,打开到应用内某个页面 + break; + case 4: + api = 'switchTab'; //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 + break; + default: + api = 'navigateTo' + break; + } + uni[api]({ + url: toUrl, + animationType: 'slide-in-right', + animationDuration: 200 + }); +} + +// 关闭当前页面并返回上一页面 delta 标识返回几层 +export function navigateBack(delta) { + uni.navigateBack({ + delta: delta + }); +} + +// setStorage 将数据存入缓存 +export function setStorage(key, val) { + if (typeof val == 'string') { + uni.setStorageSync(key, val); + return val + } + uni.setStorageSync(key, JSON.stringify(val)); +} + +// getStorage 从缓存中读取数据 +export function getStorage(key) { + let uu = uni.getStorageSync(key); + try { + if (typeof JSON.parse(uu) != 'number') { + uu = JSON.parse(uu); + } + } catch (e) {} + return uu; +} +// 删除缓存中的数据 +export function removeStorage(key) { + if (key) { + uni.removeStorageSync(key); + } +} +// 将缓存中的数据清空 +export function clearStorage() { + try { + uni.clearStorageSync(); + } catch (e) { + throw new Error('处理失败'); + } +} +// 显示Toast +/* +@title 最多汉字数量7个 +@icon success loading none +*/ +export function Toast(title, icon = 'none', obj = {}, duration = 800) { + let toastData = { + title: title, + duration: duration, + position: 'center', + mask: true, + icon: icon ? icon : 'none', + ...obj + }; + uni.showToast(toastData); +} +/* +显示loading提示框,需要手动隐藏 +*/ +export function Loading(title = '正在加载...', obj = {}) { + uni.showLoading({ + title: title, + mask: true, + ...obj + }); +} +// 隐藏loading +export function hideLoading() { + try { + uni.hideLoading(); + } catch (e) { + //TODO handle the exception + throw new Error('处理失败'); + } +} +// 模态框 +/* +确定取消按钮的文字颜色可修改 +obj 对象中传入 cancelColor : rgb 即可修改取消按钮颜色 +obj 对象中传入 confirmColor : rgb 即可修改确认按钮颜色 +*/ +export function Modal(title = '提示', content = '这是一个模态弹窗!', obj = { + showCancel: true, + cancelText: '取消', + confirmText: '确定' +}) { + // #ifdef APP-PLUS + obj.cancelText = '确定'; + obj.confirmText = '取消'; + // #endif + return new Promise((reslove, reject) => { + uni.showModal({ + title: title, + content: content, + ...obj, + success: (res) => { + if (res.confirm) { + reslove() + } + if (res.cancel) { + reject() + } + } + }); + }) +} +/* +显示操作菜单 +@itemList 操作菜单数组 +@itemColor 文字颜色 +*/ +export function ActionSheet(itemList, itemColor = "#000000") { + return new Promise((reslove, reject) => { + uni.showActionSheet({ + itemList: itemList, + itemColor: itemColor, + success: (res) => { + reslove(res.tapIndex); + }, + fail: function(res) { + reject(res.errMsg); + } + }); + }) +} +//将页面滚动到目标位置。 +export function ScrollTo(ScrollTop) { + uni.pageScrollTo({ + scrollTop: ScrollTop, + duration: 300 + }) +} + +// 获取用户信息 +export function GetUserInfo() { + return new Promise((reslove, reject) => { + uni.getUserInfo({ + success(res) { + console.log(res); + reslove(res); + }, + fail(rej) { + reject(rej); + } + }) + }) +} + +// 获取用户授权信息 +export function Authorize(scoped = 'scope.userInfo') { + return new Promise((reslove, reject) => { + uni.authorize({ + scope: scoped, + success(res) { + reslove(res); + }, + fail(rej) { + reject(rej); + } + }) + }) +} + +// 将对象转换成使用 & 连接的字符串 +export function convertObj(opt) { + let str = ''; + let arr = []; + Object.keys(opt).forEach(item => { + arr.push(`${item}=${opt[item]}`); + }) + str = arr.join('&'); + return str; +} +// 节流函数 +// 节流函数 +export function throttle(fn, delay) { + var lastArgs; + var timer; + var delay = delay || 200; + return function(...args) { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + fn.apply(this, lastArgs); + }, delay); + } + } +} + +// 调起相机 +export function chooseImage(count) { + return new Promise((reslove, reject) => { + uni.chooseImage({ + count: count, //默认9 + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], //从相册选择 + success: (res) => { + reslove(res); + // const tempFilePaths = res.tempFilePaths; + // let tempPathList = []; + // for (let i = 0; i < tempFilePaths.length; i++) { + // const path = tempFilePaths[i]; + // const src = await compressImageHandler(path) + // tempPathList.push(src); + // } + // reslove(tempPathList); + }, + fail: (rej) => { + reject(rej); + } + }); + }) +} + +// function compressImageHandler(src) { +// // console.log('platform===' + device.platform) +// const tempPath = compressImage(src, device.platform); +// // console.log('tempPath-----' + tempPath); +// return tempPath +// } +//序列化对象和数组 +export function serialize(data) { + if (data != null && data != '') { + try { + return JSON.parse(JSON.stringify(data)); + } catch (e) { + if (data instanceof Array) { + return []; + } + return {}; + } + } + return data; +} +Date.prototype.format = function(fmt) { + let o = { + 'M+': this.getMonth() + 1, //月份 + 'd+': this.getDate(), //日 + 'h+': this.getHours(), //小时 + 'm+': this.getMinutes(), //分 + 's+': this.getSeconds(), //秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), //季度 + S: this.getMilliseconds() //毫秒 + }; + + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length)); + } + for (let k in o) { + if (new RegExp('(' + k + ')').test(fmt)) { + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(String(o[k]).length)); + } + } + return fmt; +}; + +//格式化日期 +export function formatDate(nS, format) { + //日期格式化 + if (!nS) { + return ''; + } + format = format || 'yyyy-MM-dd hh:mm:ss'; + return new Date(nS).format(format); +} + +// 图片转base64 +export function pathToBase64(path) { + return new Promise(function(resolve, reject) { + if (typeof window === 'object' && 'document' in window) { + if (typeof FileReader === 'function') { + var xhr = new XMLHttpRequest() + xhr.open('GET', path, true) + xhr.responseType = 'blob' + xhr.onload = function() { + if (this.status === 200) { + let fileReader = new FileReader() + fileReader.onload = function(e) { + resolve(e.target.result) + } + fileReader.onerror = reject + fileReader.readAsDataURL(this.response) + } + } + xhr.onerror = reject + xhr.send() + return + } + var canvas = document.createElement('canvas') + var c2x = canvas.getContext('2d') + var img = new Image + img.onload = function() { + canvas.width = img.width + canvas.height = img.height + c2x.drawImage(img, 0, 0) + resolve(canvas.toDataURL()) + canvas.height = canvas.width = 0 + } + img.onerror = reject + img.src = path + return + } + if (typeof plus === 'object') { + plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) { + entry.file(function(file) { + var fileReader = new plus.io.FileReader() + fileReader.onload = function(data) { + resolve(data.target.result) + } + fileReader.onerror = function(error) { + reject(error) + } + fileReader.readAsDataURL(file) + }, function(error) { + reject(error) + }) + }, function(error) { + reject(error) + }) + return + } + if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { + wx.getFileSystemManager().readFile({ + filePath: path, + encoding: 'base64', + success: function(res) { + resolve('data:image/png;base64,' + res.data) + }, + fail: function(error) { + reject(error) + } + }) + return + } + reject(new Error('not support')) + }) +} + + + + +/* +@value 要拷贝的内容 +*/ +// export function copyText(value) { +// // 条件编译,以下代码仅在H5出现 +// //#ifdef H5 +// return new Promise((reslove, reject) => { +// uniCopy({ +// content: value, +// success: (res) => { +// reslove(res); +// }, +// error: (e) => { +// reject(res) +// } +// }) +// }) + +// //#endif + +// // 以下代码在除H5以外的平台出现 +// //#ifndef H5 + +// //#endif +// } + +// 获取本周的第一天 +export function showWeekFirstDay() { + var date = new Date(); + var weekday = date.getDay() || 7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7 + date.setDate(date.getDate() - weekday + 1); //往前算(weekday-1)天,年份、月份会自动变化 + return formatDate(date, 'yyyy-MM-dd'); +} + + + +// 获取本月第一天 +export function showMonthFirstDay() { + var MonthFirstDay = new Date().setDate(1); + return formatDate(new Date(MonthFirstDay).getTime(), 'yyyy-MM-dd'); +} + +var now = new Date(); //当前日期 +// var nowDayOfWeek = now.getDay(); //今天本周的第几天 +// var nowDay = now.getDate(); //当前日 +var nowMonth = now.getMonth(); //当前月 +var nowYear = now.getYear(); //当前年 +nowYear += (nowYear < 2000) ? 1900 : 0; // +//获得本季度的开始月份 +function getQuarterStartMonth() { + var quarterStartMonth = 0; + if (nowMonth < 3) { + quarterStartMonth = 0; + } + if (2 < nowMonth && nowMonth < 6) { + quarterStartMonth = 3; + } + if (5 < nowMonth && nowMonth < 9) { + quarterStartMonth = 6; + } + if (nowMonth > 8) { + quarterStartMonth = 9; + } + return quarterStartMonth; +} + +//或的本季度的结束日期 +//获得本季度的开始日期 +export function getQuarterStartDate() { + var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1); + return formatDate(quarterStartDate, 'yyyy-MM-dd'); +} +// 删除数组中重复数据 +export function unique(data) { + data = data || []; + var n = {}; //存放新的数据 + for (var i = 0; i < data.length; i++) { + var v = JSON.stringify(data[i]); + if (typeof(v) == "undefined") { + n[v] = 1; + } + } + data.length = 0; + for (var i in n) { + data[data.length] = i; + } + return data; +} diff --git a/nk-oa/main.js b/nk-oa/main.js new file mode 100644 index 0000000..caf1b0a --- /dev/null +++ b/nk-oa/main.js @@ -0,0 +1,25 @@ +import App from './App' +import store from './store' + +import uView from '@/uni_modules/uview-ui' +Vue.use(uView) +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App, + store +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif diff --git a/nk-oa/manifest.json b/nk-oa/manifest.json new file mode 100644 index 0000000..0e187f4 --- /dev/null +++ b/nk-oa/manifest.json @@ -0,0 +1,72 @@ +{ + "name": "nk-oa", + "appid": "__UNI__7F12D2D", + "description": "", + "versionName": "1.0.0", + "versionCode": "100", + "transformPx": false, + /* 5+App特有相关 */ + "app-plus": { + "usingComponents": true, + "nvueStyleCompiler": "uni-app", + "compilerVersion": 3, + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 + }, + /* 模块配置 */ + "modules": {}, + /* 应用发布信息 */ + "distribute": { + /* android打包配置 */ + "android": { + "permissions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios": {}, + /* SDK配置 */ + "sdkConfigs": {} + } + }, + /* 快应用特有相关 */ + "quickapp": {}, + /* 小程序特有相关 */ + "mp-weixin": { + "appid": "wx6e14cb98394e36bc", + "setting": { + "urlCheck": false + }, + "usingComponents": true + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "2" +} diff --git a/nk-oa/pages.json b/nk-oa/pages.json new file mode 100644 index 0000000..de9ba33 --- /dev/null +++ b/nk-oa/pages.json @@ -0,0 +1,137 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + + { + "path": "pages/oaHome/oaHome", + "style": { + "navigationBarTitleText": "首页", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "uni-app" + } + }, + { + "path": "pages/oaExamine/oaExamine", + "style": { + "navigationBarTitleText": "审批" + } + }, + { + "path": "pages/oaTask/oaTask", + "style": { + "navigationBarTitleText": "新建任务" + } + }, + { + "path": "pages/oaMy/oaMy", + "style": { + "navigationBarTitleText": "我的" + } + } + ], + "subPackages": [{ + "root": "pages/views", + "name": "views", + "pages": [{ + "path": "application", + "style": { + "navigationBarTitleText": "地图首页", + "enablePullDownRefresh": false + } + }, + { + "path": "new_task", + "style": { + "navigationBarTitleText": "新建任务", + "enablePullDownRefresh": false + } + }, + { + "path": "com_approve", + "style": { + "navigationBarTitleText": "通用审批", + "enablePullDownRefresh": false + } + }, { + "path": "personal_center", + "style": { + "navigationBarTitleText": "个人中心1", + "enablePullDownRefresh": false + } + + }, { + "path": "task_details", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + + }, { + "path": "personal_center_two", + "style": { + "navigationBarTitleText": "个人中心2", + "enablePullDownRefresh": false + } + + }, { + "path": "public_document", + "style": { + "navigationBarTitleText": "公司公示文档", + "enablePullDownRefresh": false + } + + } + + , { + "path": "leave_request", + "style": { + "navigationBarTitleText": "请假申请", + "enablePullDownRefresh": false + } + + } + ] + }], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "tabBar": { + "color": "#282828", + "selectedColor": "#3175f9", + "borderStyle": "white", + "backgroundColor": "#ffffff", + "list": [{ + "pagePath": "pages/oaHome/oaHome", + "text": "首页", + "iconPath": "/static/tabs-icon/home.png", + "selectedIconPath": "/static/tabs-icon/home-a.png" + }, + { + "pagePath": "pages/oaExamine/oaExamine", + "text": "审批", + "iconPath": "/static/tabs-icon/approval.png", + "selectedIconPath": "/static/tabs-icon/approval-a.png" + }, + { + "pagePath": "pages/oaTask/oaTask", + "text": "新建任务", + "iconPath": "/static/tabs-icon/Task.png", + "selectedIconPath": "/static/tabs-icon/Task-a.png" + }, + { + "pagePath": "pages/oaMy/oaMy", + "text": "我的", + "iconPath": "/static/tabs-icon/my.png", + "selectedIconPath": "/static/tabs-icon/my-a.png" + } + ] + }, + "uniIdRouter": {} +} diff --git a/nk-oa/pages/index/index.vue b/nk-oa/pages/index/index.vue new file mode 100644 index 0000000..ec0ec26 --- /dev/null +++ b/nk-oa/pages/index/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/nk-oa/pages/oaExamine/oaExamine.vue b/nk-oa/pages/oaExamine/oaExamine.vue new file mode 100644 index 0000000..6da28cb --- /dev/null +++ b/nk-oa/pages/oaExamine/oaExamine.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/nk-oa/pages/oaHome/oaHome.vue b/nk-oa/pages/oaHome/oaHome.vue new file mode 100644 index 0000000..d30ff6d --- /dev/null +++ b/nk-oa/pages/oaHome/oaHome.vue @@ -0,0 +1,389 @@ + + + + + diff --git a/nk-oa/pages/oaMy/oaMy.vue b/nk-oa/pages/oaMy/oaMy.vue new file mode 100644 index 0000000..4892e29 --- /dev/null +++ b/nk-oa/pages/oaMy/oaMy.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/nk-oa/pages/oaTask/oaTask.vue b/nk-oa/pages/oaTask/oaTask.vue new file mode 100644 index 0000000..b9a2bb3 --- /dev/null +++ b/nk-oa/pages/oaTask/oaTask.vue @@ -0,0 +1,344 @@ + + + + + diff --git a/nk-oa/pages/users/login.vue b/nk-oa/pages/users/login.vue new file mode 100644 index 0000000..002c53d --- /dev/null +++ b/nk-oa/pages/users/login.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/nk-oa/pages/views/application.vue b/nk-oa/pages/views/application.vue new file mode 100644 index 0000000..4d86c7b --- /dev/null +++ b/nk-oa/pages/views/application.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/nk-oa/pages/views/com_approve.vue b/nk-oa/pages/views/com_approve.vue new file mode 100644 index 0000000..9bad7b4 --- /dev/null +++ b/nk-oa/pages/views/com_approve.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/nk-oa/pages/views/leave_request.vue b/nk-oa/pages/views/leave_request.vue new file mode 100644 index 0000000..d79a24e --- /dev/null +++ b/nk-oa/pages/views/leave_request.vue @@ -0,0 +1,536 @@ + + + + + diff --git a/nk-oa/pages/views/new_task.vue b/nk-oa/pages/views/new_task.vue new file mode 100644 index 0000000..def8d4f --- /dev/null +++ b/nk-oa/pages/views/new_task.vue @@ -0,0 +1,604 @@ + + + + + diff --git a/nk-oa/pages/views/personal_center.vue b/nk-oa/pages/views/personal_center.vue new file mode 100644 index 0000000..6c0d9bc --- /dev/null +++ b/nk-oa/pages/views/personal_center.vue @@ -0,0 +1,181 @@ + + + + + \ No newline at end of file diff --git a/nk-oa/pages/views/personal_center_two.vue b/nk-oa/pages/views/personal_center_two.vue new file mode 100644 index 0000000..51634f0 --- /dev/null +++ b/nk-oa/pages/views/personal_center_two.vue @@ -0,0 +1,219 @@ + + + + + \ No newline at end of file diff --git a/nk-oa/pages/views/public_document.vue b/nk-oa/pages/views/public_document.vue new file mode 100644 index 0000000..6b6ceee --- /dev/null +++ b/nk-oa/pages/views/public_document.vue @@ -0,0 +1,178 @@ + + + + + \ No newline at end of file diff --git a/nk-oa/pages/views/task_details.vue b/nk-oa/pages/views/task_details.vue new file mode 100644 index 0000000..ee24bbb --- /dev/null +++ b/nk-oa/pages/views/task_details.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/nk-oa/static/css/base.css b/nk-oa/static/css/base.css new file mode 100644 index 0000000..94204e2 --- /dev/null +++ b/nk-oa/static/css/base.css @@ -0,0 +1,427 @@ +@charset "UTF-8"; + +* { + scrollbar-color: #e5e5e5 #f7f7f9; + scrollbar-width: thin; +} + +html { + margin: 0 auto; + max-width: 1200px; +} + +body { + overflow-x: hidden; + +} + +.font-color, +.font-color-red { + color: #fc4141 !important +} + +.bg-color { + background-color: #e93323 +} + +.icon-color { + color: #ff3c2b +} + +.cart-color { + color: #ff3700 !important; + border: 1px solid #ff3700 !important +} + +.padding20 { + padding: 20rpx +} + +.pad20 { + padding: 0 20rpx +} + +.padding30 { + padding: 30rpx +} + +.pad30 { + padding: 0 30rpx +} + +.pull-left { + float: left; +} + +.pull-right { + float: right; +} + +.clearfix:after { + content: ''; + display: block; + height: 0; + clear: both +} + +.clearfix { + zoom: 1 +} + +.acea-row { + display: -webkit-box; + display: -moz-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-lines: multiple; + -moz-box-lines: multiple; + -o-box-lines: multiple; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap +} + +.acea-row.row-middle { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center +} + +.acea-row.row-top { + -webkit-box-align: start; + -moz-box-align: start; + -o-box-align: start; + -ms-flex-align: start; + -webkit-align-items: flex-start; + align-items: flex-start +} + +.acea-row.row-bottom { + -webkit-box-align: end; + -moz-box-align: end; + -o-box-align: end; + -ms-flex-align: end; + -webkit-align-items: flex-end; + align-items: flex-end +} + +.acea-row.row-center { + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center +} + +.acea-row.row-right { + -webkit-box-pack: end; + -moz-box-pack: end; + -o-box-pack: end; + -ms-flex-pack: end; + -webkit-justify-content: flex-end; + justify-content: flex-end +} + +.acea-row.row-left { + -webkit-box-pack: start; + -moz-box-pack: start; + -o-box-pack: start; + -ms-flex-pack: start; + -webkit-justify-content: flex-start; + justify-content: flex-start +} + +.acea-row.row-between { + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between +} + +.acea-row.row-around { + justify-content: space-around; + -webkit-justify-content: space-around +} + +.acea-row.row-column-around { + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + justify-content: space-around; + -webkit-justify-content: space-around +} + +.acea-row.row-column { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column +} + +.acea-row.row-column-between { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -o-box-orient: vertical; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between +} + +.acea-row.row-center-wrapper { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -o-box-pack: center; + -ms-flex-pack: center; + -webkit-justify-content: center; + justify-content: center +} + +.acea-row.row-between-wrapper { + -webkit-box-align: center; + -moz-box-align: center; + -o-box-align: center; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: justify; + -moz-box-pack: justify; + -o-box-pack: justify; + -ms-flex-pack: justify; + -webkit-justify-content: space-between; + justify-content: space-between +} + +.start { + width: 122rpx; + height: 30rpx; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHoAAADMCAYAAAC8yreMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMDg0NEE2QTVFNUQxMUU4QUI3RkNGOTgwNDYyRUZDOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozODU5QzVENDMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozODU5QzVEMzMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkN2ZhZTM5NC0wNmE4LTkzNGYtODA0OS0zNjBjNTcxOTU2YjAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYWI1M2NhMC04MWE1LTE5NGItYmJlYi1jMzI2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'); + background-repeat: no-repeat; + background-size: 122rpx auto; +} + +.start.star5 { + background-position: 0 3rpx; +} + +.start.star4 { + background-position: 0 -30rpx; +} + +.start.star3 { + background-position: 0 -70rpx; +} + +.start.star2 { + background-position: 0 -105rpx; +} + +.start.star1 { + background-position: 0 -140rpx; +} + +.start.star0 { + background-position: 0 -175rpx; +} + +* { + box-sizing: border-box +} + +page { + font-size: 28rpx; + background-color: #f5f5f5; + color: #333 +} + +body, +html { + height: unset +} + +button { + padding: 0; + margin: 0; + line-height: normal; + background-color: #fff +} + +button::after { + border: 0 +} + +radio .wx-radio-input { + border-radius: 50%; + width: 38rpx; + height: 38rpx +} + +radio .wx-radio-input.wx-radio-input-checked { + border: 1px solid #e93323; + background-color: #e93323; +} + +radio .uni-radio-input { + border-radius: 50%; + width: 38rpx; + height: 38rpx +} + +radio .uni-radio-input.uni-radio-input-checked { + border: 1px solid #e93323; + background-color: #e93323; +} + +.store-list uni-radio .uni-radio-input.uni-radio-input-checked, +.store-list uni-radio .uni-radio-input { + /* border-color: transparent; + background-color: transparent; */ +} + +.store-list uni-radio .uni-radio-input.uni-radio-input-checked:before { + /* color: #e93323!important; */ +} + +checkbox .wx-checkbox-input { + width: 38rpx; + height: 38rpx +} + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + color: #fff !important; +} + +checkbox .uni-checkbox-input { + /* border-radius: 50%; */ + width: 38rpx; + height: 38rpx +} + +checkbox .uni-checkbox-input.uni-checkbox-input-checked, +checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: 1px solid #20A162; + background-color: #20A162; + color: #fff !important; +} + +checkbox .uni-checkbox-input.uni-checkbox-input-checked::before { + font-size: 35rpx +} + +.line1 { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.line2 { + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + white-space: pre-wrap; +} + +.mask { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #000; + opacity: .5; + z-index: 30 +} + +@keyframes load { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} + +@-webkit-keyframes load { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} + +.loadingpic { + animation: load 3s linear 1s infinite; + --webkit-animation: load 3s linear 1s infinite +} + +.loading-list { + animation: load linear 1s infinite; + -webkit-animation: load linear 1s infinite; + font-size: 40rpx; + margin-right: 22rpx +} + +.loading { + width: 100%; + height: 100rpx; + line-height: 100rpx; + align-items: center; + justify-content: center; + position: relative; + text-align: center +} + +.loading .line { + position: absolute; + width: 450rpx; + left: 150rpx; + top: 50rpx; + height: 1px; + border-top: 1px solid #eee +} + +.loading .text { + position: relative; + display: inline-block; + padding: 0 20rpx; + background: #fff; + z-index: 2; + color: #777 +} + +.loadingicon .loading { + animation: load linear 1s infinite; + font-size: 45rpx; + color: #000 +} + +.loadingicon { + width: 100%; + height: 80rpx; + overflow: hidden +} diff --git a/nk-oa/static/css/style.scss b/nk-oa/static/css/style.scss new file mode 100644 index 0000000..9fe05b2 --- /dev/null +++ b/nk-oa/static/css/style.scss @@ -0,0 +1,907 @@ + +.font-bg-red,.font_bg-red{ + display: inline-block; + align-items: center; + background: #E93424; + color: #fff; + font-size: 20rpx; + text-align: center; + border-radius: 5rpx; + padding: 0 4rpx; + line-height: 28rpx; + // height: 30rpx; + margin-right: 8rpx; + border: 1px solid #E93424; +} +.type2{ + background-color: #FD6523; +} +.bg { + font-size: 24rpx; + line-height: 31rpx; +} +.ml8 { + margin-left: 8rpx; +} +.product-con .conter img { + width: 750rpx!important; + height: unset!important +} +.product-con .wrapper { + background-color: #fff; + margin-bottom: 20rpx; +} +.product-con .nav { + background-image: url('data:image/png;base64,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'); + background-color: var(--view-theme); + background-repeat: no-repeat; + background-size: 100% 100%; + width: 100%; + height: 100rpx; + padding: 0 30rpx; + box-sizing: border-box; +} +.product-con .nav .money { + font-size: 28rpx; + color: #fff; +} +.product-con .nav .money .num { + font-size: 48rpx; +} +.product-con .nav .money .y-money { + font-size: 26rpx; + margin-left: 10rpx; + text-decoration: line-through; +} +.product-con .wrapper .share { + margin: 0 30rpx; + padding-top: 25rpx +} +.product-con .wrapper .share .money { + font-size: 28rpx; + font-weight: 700 +} +.product-con .wrapper .share .money .num { + font-size: 48rpx +} +.product-con .wrapper .share .money image { + width: 65rpx; + height: 28rpx; + margin-left: 7rpx; + position: relative; + top: 5rpx; +} + +.product-con .wrapper .share .money .vip-money{ + color: #282828; + margin-left: 13rpx +} +.atmosphere .vip-money{ + color: #fff; + margin-left: 13rpx +} +.product-con .wrapper .share .money .vip-image,.atmosphere .vip-image{ + width: 70rpx; + height: 30rpx; + margin-left: 6rpx; + position: relative; + top: 4rpx; +} +.product-con .wrapper .share .fenxiang_btn{ + text-align: center; + color: #666666; + font-size: 18rpx; +} +.product-con .wrapper .share .iconfont { + color: #515151; + font-size: 40rpx; + margin-bottom: 10rpx +} +.product-con .wrapper .introduce { + font-size: 32rpx; + font-weight: 700; +} +.product-con .wrapper .introduce { + align-items: center; + position: relative; + padding-right: 50rpx; + margin-bottom: 30rpx; + +} +.product-con .wrapper .introduce .fenxiang_btn { + text-align: center; + font-size: 14rpx; + color: #666; + font-weight: normal; + position: absolute; + top: -4rpx; + right: 0; +} +.product-con .wrapper .introduce .infor { + width: 570rpx; +} + +.product-con .wrapper .introduce .iconfont { + font-size: 37rpx; + color: #515151; +} +.product-con .wrapper .label { + margin: 0 30rpx; + font-size: 24rpx; + color: #82848f; + margin-top: 22rpx +} +.product-con .wrapper .label .rank_list { + width: 100%; + background: #F1F1F1; + border-radius: 10rpx; + height: 56rpx; + line-height: 56rpx; + padding: 0 10rpx; + justify-content: space-between; + font-size: 22rpx; + color: #282828; +} +.product-con .wrapper .rank_list .rank_title { + width: 108rpx; + height: 36rpx; + background-image: url('data:image/png;base64,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'); + background-repeat: no-repeat; + background-size: 100% 100%; + margin-right: 10rpx; +} +.product-con .wrapper .rank_list .iconfont { + width: 24rpx; + height: 24rpx; + border-radius: 24rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 12rpx; + color: #fff; + transform: rotateZ(90deg); + background: #666666; +} +.product-con .wrapper .coupon { + padding: 0 30rpx; + border-top: 1px solid #f5f5f5; + margin-top: 25rpx; + height: 80rpx; + font-size: 26rpx; + color: #82848f +} + +.product-con .wrapper .coupon .hide { + width: 650rpx; + height: 80rpx; + line-height: 80rpx +} + +.product-con .wrapper .coupon .activity { + height: 40rpx; + padding: 0 20rpx; + border: 1px solid #f2857b; + color: #e93323; + font-size: 24rpx; + line-height: 40rpx; + position: relative; + margin: 19rpx 0 19rpx 15rpx +} + +.product-con .wrapper .coupon .activity:before { + content: ' '; + position: absolute; + width: 7rpx; + height: 10rpx; + border-radius: 0 7rpx 7rpx 0; + // border: 1rpx solid #f2857b; + background-color: #fff; + bottom: 50%; + left: -3rpx; + margin-bottom: -6rpx; + border-left-color: #fff +} + +.product-con .wrapper .coupon .activity:after { + content: ' '; + position: absolute; + width: 7rpx; + height: 10rpx; + border-radius: 7rpx 0 0 7rpx; + // border: 1rpx solid #f2857b; + background-color: #fff; + right: -3rpx; + bottom: 50%; + margin-bottom: -6rpx; + border-right-color: #fff +} + +.product-con .wrapper .coupon .iconfont { + color: #7a7a7a; + font-size: 28rpx +} + +.product-con .attribute { + background-color: #fff; + padding: 0 30rpx; + font-size: 26rpx; + color: #82848f; + height: 80rpx; + position: relative; + border-bottom: 2rpx solid #f5f5f5; + +} +.product-con .attribute:last-child{ + border-bottom: none; +} +.product-con .attribute .atterTxt { + font-size: 28rpx; + color: #282828; + overflow: hidden; + white-space: nowrap; + text-overflow:ellipsis; + display: inline-block; + width: 400rpx; +} +.product-con .attribute .iconfont { + font-size: 28rpx; + color: #7a7a7a; + position: absolute; + right: 30rpx; +} +.product-con .userEvaluation { + margin-top: 20rpx; + background-color: #fff; +} +.product-con .userEvaluation .title,.product-con .combo .title{ + height: 86rpx; + border-bottom: 1rpx solid #eee; + font-size: 28rpx; + color: #282828; + margin-left: 30rpx; + padding-right: 30rpx; +} +.product-con .userPlant .title{ + height: 86rpx; + font-size: 28rpx; + color: #282828; + margin-left: 30rpx; + padding-right: 30rpx; +} + +.product-con .userEvaluation .title .praise, +.product-con .userPlant .title .praise, +.product-con .combo .title .praise{ + font-size: 28rpx; + color: grey +} +.product-con .userEvaluation .title .praise .iconfont, +.product-con .userPlant .title .praise .iconfont, +.product-con .combo .title .praise .iconfont{ + color: #7a7a7a; + font-size: 28rpx; + vertical-align: 1rpx; + margin-left: 8rpx +} +.product-con .userPlant { + background-color: #fff; + border-top: 1rpx solid #EEEEEE; +} +.product-con .combo{ + margin-top: 20rpx; + background: #fff; +} +.product-con .userPlant .imgList { + padding: 0 30rpx; +} +.product-con .combo .img-box { + margin: 30rpx 0 30rpx 0; + display: flex; +} +.product-con .combo .img-box .img-item,.product-con .combo .combo_item{ + display: flex; + align-items: center; + +} +.product-con .combo .combo_item{ + padding-left: 30rpx; + position: relative; +} +.product-con .combo .combo_item::after{ + content: ""; + width: 1rpx; + height: 106rpx; + background: #E8E8E8; + position: absolute; + top: 5rpx; + right: 0; +} +.product-con .combo .combo_item:last-child::after{ + display: none; +} +.product-con .combo .icon-jiahao2{ + color: #666666; + margin: 0 18rpx; + font-size: 30rpx; +} +.product-con .combo .list_total{ + padding: 0 30rpx; +} +.product-con .combo .list_total .list_num{ + color: #282828; + font-size: 22rpx; +} +.product-con .combo .list_total .list_price{ + font-size: 26rpx; + margin-top: 10rpx; + font-weight: bold; +} +.product-con .combo .img-box .img-item uni-image, +.product-con .combo .img-box .img-item image{ + width: 116rpx; + height: 116rpx; + border-radius: 6rpx; +} +.product-con .userPlant .imgList .pictrue { + width: 220rpx; + height: 220rpx; + margin: 0 15rpx 15rpx 0; + position: relative; + border-radius: 16rpx; +} +.product-con .userPlant .imgList .pictrue:last-child { + margin-right: 0; +} +.product-con .userPlant .imgList .pictrue image { + width: 100%; + height: 100%; + border-radius: 16rpx; +} +.product-con .product-intro { + position: relative; + margin-top: 20rpx; + width: 100%; + overflow: hidden; +} +.product-con .product-intro .title { + font-size: 30rpx; + color: #282828; + height: 86rpx; + width: 100%; + background-color: #fff; + text-align: center; + line-height: 86rpx +} +.product-con .product-intro .conter { + width: 100% +} +.product-con .product-intro .conter image { + width: 100%!important; + display: block!important +} +.product-con .price-info { + background: #fff; + padding: 60rpx 30rpx 20rpx; +} +.product-con .price-info .price-title { + color: #666; + font-size: 28rpx; + margin-bottom: 20rpx; +} +.goodsStyle { + margin-top: 1rpx; + background-color: #fff; + padding: 22rpx 30rpx +} +.goodsStyle .pictrue { + width: 120rpx; + height: 120rpx +} +.goodsStyle .pictrue image { + width: 100%; + height: 100%; + border-radius: 6rpx +} + +.goodsStyle .text { + width: 545rpx; + font-size: 28rpx; + color: #999 +} +.goodsStyle .text .name { + width: 360rpx; + color: #282828 +} +.goodsStyle .text .money { + text-align: right +} + +.goodsStyle .text .money .num { + margin-top: 7rpx +} +.goodWrapper .item { + margin-left: 30rpx; + padding: 20rpx 30rpx 20rpx 0; + border-bottom: 2rpx solid #f0f0f0; +} + +.goodWrapper .item .pictrue { + width: 130rpx; + height: 130rpx +} + +.goodWrapper .item .pictrue image { + width: 100%; + height: 100%; + border-radius: 6rpx +} + +.goodWrapper .item .text { + width: 547rpx; + position: relative +} + +.goodWrapper .item .text .name { + font-size: 28rpx; + color: #282828; + width: 453rpx +} + +.goodWrapper .item .text .num { + font-size: 26rpx; + color: #868686 +} + +.goodWrapper .item .text .attr { + font-size: 20rpx; + color: #868686; + margin-top: 7rpx +} + +.goodWrapper .item .text .money { + font-size: 26rpx; + margin-top: 17rpx +} + +.goodWrapper .item .text .evaluate { + position: absolute; + width: 114rpx; + height: 46rpx; + border: 1rpx solid #bbb; + border-radius: 4rpx; + text-align: center; + line-height: 46rpx; + right: 0; + bottom: -5rpx +} +.goodWrapper .item .text .evaluate.userEvaluated { + font-size: 26rpx; + color: #aaa; + background-color: #f7f7f7; + border-color: #f7f7f7 +} +.promoterHeader { + width: 100%; + height: 220rpx +} +.promoterHeader .headerCon{width:100%;height:100%;padding:0 88rpx 0 55rpx;box-sizing:border-box;font-size:28rpx;color:#fff;background-image:url('data:image/png;base64,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');background-repeat:no-repeat;background-size:100% 100%;} +.promoterHeader .headerCon .name{margin-bottom:10rpx;} +.promoterHeader .headerCon .num{font-size:50rpx;} +.promoterHeader .headerCon .iconfont{font-size:125rpx;} +.sign-record .list .item .data{height:80rpx;line-height:80rpx;padding:0 30rpx;font-size:24rpx;color:#666;} +.sign-record .list .item .listn{background-color:#fff;font-size:24rpx;color:#999;} +.sign-record .list .item .listn .itemn{height:120rpx;border-bottom:1rpx solid #eee;padding-right:30rpx;margin-left:30rpx;} +.sign-record .list .item .listn .itemn .name{width:390rpx;font-size:28rpx;color:#282828;margin-bottom:10rpx;} +.sign-record .list .item .listn .itemn .num{font-size:36rpx;font-family: 'Guildford Pro';color:#16ac57;} +.coupon-list{padding:0 30rpx;margin-top:25rpx;} +.coupon-list .item{width:100%;height:170rpx;margin-bottom:16rpx;} +.coupon-list .item .money{background-repeat:no-repeat;background-size:100% 100%;width:240rpx;height:100%;color:#fff;font-size:36rpx;font-weight:bold;text-align:center;display: flex;flex-direction: column;align-items: center;justify-content: center;} +.coupon-list .item .money.moneyGray{background-image:url('data:image/png;base64,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');} +.coupon-list .item .money.vip-coupon{background-image: url('data:image/png;base64,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');} +.coupon-list .item .money .num{font-size:60rpx;} +.coupon-list .item .text{position:relative;overflow:hidden;width:450rpx;padding:0 17rpx 0 24rpx;box-sizing:border-box;background-color:#fff;} +.coupon-list .item .text .condition{font-size:30rpx;color:#282828;height:93rpx;line-height:93rpx;border-bottom:1rpx solid #f0f0f0;} +.coupon-list .item .text .data{font-size:20rpx;color:#999;height:76rpx;} +.coupon-list .item .text .data .bnt{width:126rpx;height:44rpx;border-radius:22rpx;font-size:22rpx;text-align:center;line-height:44rpx;color:#fff;} +.coupon-list .item .text .data .gray{font-size: 120rpx;color:#DFDFDF;position:absolute;right:0;} +.coupon-list .item .text .data .bnt1{width:100rpx;height:44rpx;border-radius:22rpx;font-size:22rpx;text-align:center;line-height:44rpx;color:#fff;} +.coupon-list .item .text .data .bnt1.gray{background-color:#ccc;} +.noCommodity { + border-top: 7rpx solid #f5f5f5; + text-align: center; +} +.noCommodity .pictrue { + width: 414rpx; + padding-bottom: 50rpx; + margin: 0 auto; +} + +.noCommodity .pictrue image { + width: 414rpx; + height: 305rpx; +} +.noCommodity .pictrue view{ + color: #999; +} +// 登录、注册、忘记密码 +.register { + padding-top: 100rpx; + background-image: linear-gradient(to bottom,#eb5447 0,#ff8e3b 100%); + width: 100%; + height: 100vh +} + +.register .shading .pictrue { + width: 172rpx; + height: 172rpx; + border-radius: 50%; + background-color: rgba(255,255,255,.8); + margin: 0 auto +} + +.register .shading .pictrue image { + width: 164rpx; + height: 164rpx; + border-radius: 50%; + display: block +} + +.register .whiteBg { + width: 620rpx; + border-radius: 16rpx; + background-color: #fff; + margin: 30rpx auto 0 auto; + padding: 45rpx 30rpx +} + +.register .whiteBg .title { + font-size: 36rpx; + color: #282828; + text-align: center; + font-weight: 700 +} + +.register .whiteBg .title .item~.item { + margin-left: 85rpx +} + +.register .whiteBg .title .item { + color: #999; + border-bottom: 5rpx solid #fff; + padding-bottom: 10rpx +} + +.register .whiteBg .title .item.on { + color: #282828; + border-bottom-color: #f35749 +} + +.register .whiteBg .list .item { + border-bottom: 1rpx solid #ededed; + padding: 47rpx 0 13rpx 0; + position: relative; + width:100%; + box-sizing: border-box; +} + +.register .whiteBg .list .item .name { + font-size: 26rpx; + color: #2d3342; + margin-bottom: 27rpx; + text-align: left; +} + +.register .whiteBg .list .item image { + width: 40rpx; + height: 40rpx; + display: block; +} +.whiteBg .code .code-img { + width: 100%; + height: 100%; +} +.register .whiteBg .list .item input { + font-size: 30rpx; + flex: 1; + margin-left: 20rpx +} +.register .whiteBg .list .item input::-webkit-input-placeholder { + color: #ccc; +} + +.register .whiteBg .list .item .placeholder { + color: #ccc +} + +.register .whiteBg .list .item .codeIput { + width: 240rpx; + margin-left: 20rpx +} + +.register .whiteBg .list .item .code { + width: 150rpx; + height: 50rpx; + background-color: #f35446; + border-radius: 30rpx; + color: #fff; + line-height: 50rpx; + text-align: center; + font-size: 26rpx +} + +.register .whiteBg .list .item .code.on { + background-color: #bbb +} + +.register .whiteBg .list .forgetPwd { + text-align: right; + font-size: 28rpx; + color: #666; + margin-top: 20rpx +} + +.register .whiteBg .list .forgetPwd .iconfont { + font-size: 30rpx; + margin-right: 10rpx; + vertical-align: middle +} + +.register .whiteBg .logon { + font-size: 34rpx; + color: #fff; + font-weight: 700; + height: 86rpx; + border-radius: 43rpx; + background: linear-gradient(to right,#f35447 0,#ff8e3c 100%); + text-align: center; + line-height: 86rpx; + margin-top: 47rpx +} + +.register .whiteBg .tip { + height: 110rpx; + text-align: center; + line-height: 105rpx; + font-size: 24rpx; + color: #ccc +} + +// 首页修改轮播内部样式; +.index-bg .uni-swiper-dot { + width: 20rpx!important; + height: 5rpx!important; + border-radius: 3rpx +} + +.boutique .uni-swiper-dot { + width: 7rpx!important; + height: 7rpx!important; + border-radius: 50% +} + +.boutique .uni-swiper-dot-active { + width: 20rpx!important; + border-radius: 5rpx!important +} + +.sign-record .list .item .data { + height: 80rpx; + line-height: 80rpx; + padding: 0 30rpx; + font-size: 24rpx; + color: #666 +} + +.sign-record .list .item .listn { + background-color: #fff; + font-size: 24rpx; + color: #999 +} + +.sign-record .list .item .listn .itemn { + height: 120rpx; + border-bottom: 1rpx solid #eee; + padding-right: 30rpx; + margin-left: 30rpx +} + +.sign-record .list .item .listn .itemn .name { + width: 390rpx; + font-size: 28rpx; + color: #282828; + margin-bottom: 10rpx +} + +.sign-record .list .item .listn .itemn .num { + font-size: 36rpx; + // font-family: 'Guildford Pro'; + color: #16ac57 +} + +.statistical-page .mc- +{ + padding-bottom: 0 +} + +.statistical-page .mpvue-calendar { + min-width: 100% +} + +.statistical-page .mpvue-calendar table { + margin: 0 +} + +.statistical-page .mpvue-calendar td { + border-right: 1px solid #fff; + padding: 0; + width: 14%!important +} + +.statistical-page .calendar-tools { + box-shadow: unset; + -webkit-box-shadow: unset; + -o-box-shadow: unset; + -moz-box-shadow: unset +} + +.statistical-page .mc-head-box div { + font-size: 14px +} + +.statistical-page .mpvue-calendar td:not(.disabled) span.mc-date-red { + color: unset +} + +.statistical-page .mpvue-calendar .mc-range-mode .mc-range-begin span.calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-end span.calendar-date { + border-radius: 0; + background-color: #2291f8!important +} + +.statistical-page .mpvue-calendar td.selected span.mc-date-red { + color: #fff +} + +.statistical-page .mc-range-mode .selected .mc-range-bg { + background-color: #a0dcf9 +} + +.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-first .calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-row-last .calendar-date { + background-color: #a0dcf9 +} + +.statistical-page .mpvue-calendar .mc-range-mode .selected.mc-range-second-to-last span { + background-color: #a0dcf9 +} + +.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-first.selected .calendar-date,.statistical-page .mpvue-calendar .mc-range-mode .mc-range-month-last.selected .calendar-date { + background-color: #a0dcf9 +} + +.statistical-page .mc-today-element .calendar-date { + border-radius: 0; + background-color: unset +} + +.new-users .uni-swiper-dot { + width: 8px; + height: 4px; + background: rgba(0,0,0,.15); + border-radius: 2px +} + +.new-users .uni-swiper-dot-active { + width: 16px; + height: 4px; + background: rgba(233,51,35,1)!important; + border-radius: 2px +} + +.pictrue_log { + width: 80rpx; + height: 40rpx; + border-radius: 20rpx 0 20rpx 0; + line-height: 40rpx; + font-size: 24rpx +} + +.pictrue_log_class { + background: -webkit-gradient(linear,left top,right top,from(rgba(246,122,56,1)),to(rgba(241,27,9,1))); + background: linear-gradient(90deg,rgba(246,122,56,1) 0,rgba(241,27,9,1) 100%); + opacity: 1; + position: absolute; + top: 0; + left: 0; + color: #fff; + text-align: center; + z-index: 3 +} + +.pictrue_log_medium { + width: 80rpx; + height: 44rpx; + border-radius: 20rpx 0 20rpx 0; + line-height: 44rpx; + text-align: center; + font-size: 26rpx +} + +.pictrue_log_big { + width: 100rpx; + height: 46rpx; + line-height: 46rpx; + border-radius: 20rpx 0 20rpx 0; + font-size: 28rpx +} + +.product-con .nav .time .styleAll { + padding: 0 6rpx; + font-size: 22rpx; + // color: #ff3d3d; + background-color: #fff; + border-radius: 2rpx +} + +.spike-box .styleAll { + background-color: #ffdfdd; + color: #e93323; + padding: 0 5rpx +} + +.product-con .nav .time .timeTxt { + color: #fff +} + +.bg-color-hui { + background: #bbb!important +} + +.page_content .uni-swiper-wrapper{ + overflow: initial; +} +.page_content .uni-swiper-dots-horizontal{ + bottom: -20rpx; +} +.page_content .swiper .uni-swiper-dot { + width: 30rpx; + height: 8rpx; + border-radius: 4rpx; + background: #E5E5E5; + margin: 0 7rpx; +} + +.page_content .swiper .uni-swiper-dot-active { + background: #E93323; +} + +.pictrue_log_xl { + background: linear-gradient(90deg,rgba(246,122,56,1) 0,rgba(241,27,9,1) 100%) +} + +.pictrue_log_xl_gray { + background: linear-gradient(90deg,rgba(102,102,102,1) 0,rgba(153,153,153,1) 100%) +} + +.pictrue_log_xl_blue { + background: linear-gradient(90deg,rgba(26,163,246,1) 0,rgba(24,192,244,1) 100%) +} +.flex_a_c { + display: flex; + align-items: center; +} +.flex_a_c_j_sb { + display: flex; + align-items: center; + justify-content: space-between; +} +.flex-aj-center { + display: flex; + align-items: center; + justify-content: center +} +.page-index.bgf .noCommodity{ + border-top: 0; +} + +.product-con .red{ + color: #82848f; +} diff --git a/nk-oa/static/logo.png b/nk-oa/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 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 SYs}WS&%*SCNx89m_ { + uni.navigateTo({ + url: `/pages/service_hall/party_building?pid=${pid}&title=${t}&village_id=${id}` + }) + } + }, + { + title: '村务动态', + text: '村务信息公开', + src: 'cwdt@2x.png', + color: '#4DB896', + pid: 300, + navCallBack: (pid, t, id) => { + uni.navigateTo({ + url: `/pages/service_hall/party_building?pid=${pid}&title=${t}&village_id=${id}` + }) + } + }, + { + title: '村镇新闻', + text: '村镇新闻资讯', + src: 'czxw@2x.png', + color: '#FFAA33', + pid: 304, + navCallBack: (pid, t, id) => { + uni.navigateTo({ + url: `/pages/service_hall/list?id=${pid}&title=${t}&village_id=${id}` + }) + } + }, + { + title: '文明实践', + text: '文明创建实践', + src: 'wmsj@2x.png', + color: '#FF7A3D', + pid: '', + navCallBack: (pid, t, id) => { + uni.navigateTo({ + url: `/pages/service_hall/opens` + }) + } + } +] +export const quickLink = [{ + icon: 'scfw', + src: 'scfw.png', + name: '商超服务', + url: '/pages/fast_track/production', + category_id: 25 + }, + { + icon: 'nfcp', + src: 'nfcp.png', + name: '农副产品', + url: '/pages/fast_track/production', + category_id: 26 + }, { + icon: 'sczl', + src: 'sczl.png', + name: '生产资料', + url: '/pages/fast_track/production', + category_id: 22 + }, { + icon: 'shfw', + src: 'shfw.png', + name: '生活服务', + // url: '/pages/fast_track/service_life', + url: '/pages/fast_track/production', + category_id: 23 + }, { + icon: 'hbxs', + src: 'hbxs.png', + name: '红白喜事', + // url: '/pages/fast_track/red_white_thing', + url: '/pages/fast_track/production', + category_id: 21 + }, { + icon: 'wyly', + src: 'wyly.png', + name: '文娱旅游', + // url: '/pages/fast_track/travel' + }, { + icon: 'fwzx', + src: 'fwzx.png', + name: '房屋装修', + // url: '/pages/fast_track/fitment' + }, { + icon: 'jypx', + src: 'jypx.png', + name: '教育资讯', + // url: '/pages/fast_track/education' + }, { + icon: 'msgy', + src: 'msgy.png', + name: '民生资讯', + // url: '/pages/fast_track/public_benefit' + }, { + icon: 'ylbj', + src: 'ylbj.png', + name: '医疗资讯' + } +] + +// oaHOme快速入口数据 +export const oaHomeData = [{ + text: '请假申请', + icon: prefix + 'oa/qjsq@2x.png', + url: '/pages/views/leave_request' + }, + { + text: '出差申请', + icon: prefix + 'oa/ccsq@2x.png' + }, + { + text: '外出申请', + icon: prefix + 'oa/wcsq@2x.png' + }, + { + text: '采购申请', + icon: prefix + 'oa/cgsq@2x.png' + }, + { + text: '物品维修', + icon: prefix + 'oa/bxsq@2x.png' + }, + { + text: '用章申请', + icon: prefix + 'oa/yzsq@2x.png' + }, + { + text: '报销申请', + icon: prefix + 'oa/gengduo@2x.png' + }, + { + text: '更多', + icon: prefix + 'oa/wpwx@2x.png', + url: '/pages/views/application' + } +] + +/** + * oa-应用中心数据 + */ +export const appDataList = [{ + title: '假勤', + data: [{ + name: '请假申请', + src: prefix + 'oa/qjsq@2x.png', + url: '/pages/views/leave_request' + }, + { + name: '出差申请', + src: prefix + 'oa/ccsq@2x.png', + url: '' + }, + { + name: '外出申请', + src: prefix + 'oa/wcsq@2x.png', + url: '' + } + ] + }, + { + title: '行政', + data: [{ + name: '物品维修', + src: prefix + 'oa/bxsq@2x.png', + url: '' + }, + { + name: '用章审批', + src: prefix + 'oa/yzsq@2x.png', + url: '' + }, + { + name: '领用审批', + src: prefix + 'oa/lysp@2x.png', + url: '' + } + ] + }, + { + title: '财务', + data: [{ + name: '借款申请', + src: prefix + 'oa/jksq@2x.png', + url: '' + }, + { + name: '付款申请', + src: prefix + 'oa/fksq@2x.png', + url: '' + }, + { + name: '报销申请', + src: prefix + 'oa/gengduo@2x.png', + url: '' + }, + { + name: '采购申请', + src: prefix + 'oa/cgsq@2x.png', + url: '' + }, + { + name: '奖励申请', + src: prefix + 'oa/jlsq@2x.png', + url: '' + }, + { + name: '活动经费', + src: prefix + 'oa/hdjf@2x.png', + url: '' + } + ] + }, + { + title: '人事', + data: [{ + name: '招聘需求', + src: prefix + 'oa/zpxq@2x.png', + url: '' + }] + }, + { + title: '其他', + data: [{ + name: '通用审批', + src: prefix + 'oa/tysp@2x.png', + url: '/pages/views/com_approve' + }] + } +] + +/** + * oa-个人中心 + */ +export const myOaData = [{ + name: '工资详情', + icon: 'custom-icongongzi', + url: '/pages/views/personal_center_two' + }, + { + name: '公示文档', + icon: 'custom-iconwendang', + url: '/pages/views/public_document' + }, + { + name: '绑定公众号', + icon: 'custom-iconweixin' + }, + { + name: '意见反馈', + icon: 'custom-iconyijian' + } +] +/* + oa-请假类型 + */ +export const oaLeaveData = [{ + name: '事假', + id: 1 + }, + { + name: '年假', + id: 2 + }, + { + name: '调休假', + id: 3 + }, + { + name: '病假', + id: 4 + }, + { + name: '婚假', + id: 5 + }, + { + name: '丧假', + id: 6 + }, + { + name: '产假', + id: 7 + }, + { + name: '陪产假', + id: 8 + }, + { + name: '其他', + id: 9 + } +] diff --git a/nk-oa/static/tabs-icon/Task-a.png b/nk-oa/static/tabs-icon/Task-a.png new file mode 100644 index 0000000000000000000000000000000000000000..af42ad5ce5e6742456cf12f3ca2e530d9aed285c GIT binary patch literal 1776 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 hGHJ=AB@?Tp{tq_GQF1EIOCb; literal 0 HcmV?d00001 diff --git a/nk-oa/static/tabs-icon/approval-a.png b/nk-oa/static/tabs-icon/approval-a.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5140223d8eca0cc8e6b34a5ca028d2dc384c65 GIT binary patch literal 1066 zcmV+_1l9YAP)Px&GnLB$mULfIvOO1%_X=s|6J5ONT2g5Ijx5JZh%cnEe8d$DPCc4zjHQCE}woOd(X zoej@i_nqf?-rxKGzwgZKLy&6$0TLby2?&q^MFM1v2W{jqi;gic6$kq}5MAI?}BJ8VX2>^D^&TW_)Z+l#7Y;!AQ z8;6W&#suR85h8^XWH1QDQ)I^(OpUc)@D0eiAztypYJBKnHI{4$leL)`<3!X|DhV?K zR0_xI(ecSd`1GQHY&pu^x?{x%_zFawOE%L*2Cf1kAANB^`eW8{mnwkJBI{kU+ZiZf zjAo*IC}G6xC#b3V%3Q!L1nRH;oJ zNPo;a_4Z^@Nz^Q31xUe42@nBN*}S340mDW!828-)z^>{jr9bCpnzG?BJh& zl?sO+F-l~tKakcC@Y{DS=<0m`p#LDv*guwqlk*0}j~Hb#)gQ>`8wlqPwG`EJ=v)>z zA9;H*^dm-Kfb5KFhz}HhK8atnF>%A2MEr;$K)kuJ{+97$b^VAT3K4~PBhc_C)gApB zMhA;G)f4A!T%Po{srnHkFqT>0N%-9?K6dvevv`>HcI^5QBQQW-f5{!tu`{Z_t7+nf zgZM>9N#lOR2*i_WzKAb+3B8|cxHFr>wL9LFQ8)oVVl;dYQIbLZ2iN~Or2cbM$|yj@ zGV*~)ETcp~EF+dt5{&vOW0+Z!D3?%5(1Z1Q6d`*PHe=lgGYDy|aO&stwR^K)E_9HUn)Mp6guE9!deh?K)Hg%;}f^+s5smBI%ldxHlOi z|3yjHCz>A$r*pQwV`@AyRSBY}cCo(iU#!z~Z489nYAX_u(Tq!W#yLFwWBY8iiaY_y z2iX#{HtVcy2e^j<+_UP|%YY5gU59d4rW4^?)j;HbR|4WSXfux!AO))@Kmb5S3$t$R0$2b>i_@%07*qoM6N<$f~3CXiU0rr literal 0 HcmV?d00001 diff --git a/nk-oa/static/tabs-icon/approval.png b/nk-oa/static/tabs-icon/approval.png new file mode 100644 index 0000000000000000000000000000000000000000..3a701f052aee0723deac07e02d7ca047fa67b017 GIT binary patch literal 1277 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 LNkvXXu0mjfJR0i` literal 0 HcmV?d00001 diff --git a/nk-oa/store/getters.js b/nk-oa/store/getters.js new file mode 100644 index 0000000..d6106c3 --- /dev/null +++ b/nk-oa/store/getters.js @@ -0,0 +1,11 @@ +export default { + token: state => state.app.token, + isLogin: state => !!state.app.token, + userInfo: state => state.app.userInfo || {}, +}; +// export default { +// token: state => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJrYWlmYS5jcm1lYi5uZXQiLCJhdWQiOiJrYWlmYS5jcm1lYi5uZXQiLCJpYXQiOjE1NzcwODM1MzQsIm5iZiI6MTU3NzA4MzUzNCwiZXhwIjoxNTc3MDk0MzM0LCJqdGkiOnsiaWQiOjExMCwidHlwZSI6InVzZXIifX0.U-i1pbdRjyXI1gr79Uq2XBPZ89T8f5Ai9jwrR8woTwE', +// isLogin: state => true, +// backgroundColor: state => state.app.backgroundColor, +// userInfo: state => state.app.userInfo || {} +// }; diff --git a/nk-oa/store/index.js b/nk-oa/store/index.js new file mode 100644 index 0000000..bf9c8ff --- /dev/null +++ b/nk-oa/store/index.js @@ -0,0 +1,20 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import Vue from "vue"; +import Vuex from "vuex"; +import modules from "./modules"; +import getters from "./getters"; + +Vue.use(Vuex); + +export default new Vuex.Store({ + modules, + getters, +}); diff --git a/nk-oa/store/modules/app.js b/nk-oa/store/modules/app.js new file mode 100644 index 0000000..aea766b --- /dev/null +++ b/nk-oa/store/modules/app.js @@ -0,0 +1,70 @@ +import { commonAuth } from '@/api/pubic.js' +import { loginMobile } from '@/api/user.js' +import Routine from '@/libs/routine.js' +import Cache from '@/utils/cache'; +const state = { + userInfo: Cache.get('USER_INFO') || null, + token: Cache.get("TOKEN") || null +}; + +const mutations = { + setUserInfo(state, data) { + state.userInfo = data + uni.setStorageSync("USER_INFO", data) + }, + LOGOUT(state) { + Cache.clear('USER_INFO') + Cache.clear('TOKEN') + }, + UPDATE_USERINFO(state, data) { + let time = res.data.result.expires_time - Cache.time(); + state.userInfo = data.result.user + state.token = data.result.token + Cache.set("USER_INFO", data.result.user, time) + Cache.set("TOKEN", data.result.token, time) + } +}; + +const actions = { + MobileLogin({ state, commit }, force) { + let data = { + auth_token: uni.getStorageSync('auth_token'), + phone: force.account, + sms_code: force.captcha, + spread: that.$Cache.get("spread"), + // #ifdef APP-PLUS + user_type: 'app', + // #endif + // #ifdef H5 + user_type: 'h5', + // #endif + } + loginMobile(data).then(res => { + console.log('手机号登录', res); + }) + }, + async getWxLogin({ state, commit }, force) { + let newCode = null + Routine.getCode().then(code => { + newCode = code; + }) + Routine.getUserProfile().then(res => { + let userInfo = res.userInfo; + userInfo.code = newCode; + commonAuth({ + auth: { + type: 'routine', + auth: userInfo + } + }).then(res => { + commit("UPDATE_USERINFO", res.data); + }) + }) + } +}; + +export default { + state, + mutations, + actions +}; diff --git a/nk-oa/store/modules/index.js b/nk-oa/store/modules/index.js new file mode 100644 index 0000000..1c3a43a --- /dev/null +++ b/nk-oa/store/modules/index.js @@ -0,0 +1,13 @@ +// +---------------------------------------------------------------------- +// | CRMEB [ CRMEB赋能开发者,助力企业发展 ] +// +---------------------------------------------------------------------- +// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved. +// +---------------------------------------------------------------------- +// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 +// +---------------------------------------------------------------------- +// | Author: CRMEB Team +// +---------------------------------------------------------------------- +import app from "./app"; +export default { + app +}; diff --git a/nk-oa/uni.scss b/nk-oa/uni.scss new file mode 100644 index 0000000..5a8a58f --- /dev/null +++ b/nk-oa/uni.scss @@ -0,0 +1,78 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +@import '@/uni_modules/uview-ui/theme.scss'; +$theme-oa-color: #3175f9; +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/nk-oa/uni_modules/uview-ui/LICENSE b/nk-oa/uni_modules/uview-ui/LICENSE new file mode 100644 index 0000000..4db40ef --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 www.uviewui.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/nk-oa/uni_modules/uview-ui/README.md b/nk-oa/uni_modules/uview-ui/README.md new file mode 100644 index 0000000..c78ff47 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/README.md @@ -0,0 +1,66 @@ +

+ logo +

+

uView 2.0

+

多平台快速开发的UI框架

+ +[![stars](https://img.shields.io/github/stars/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0) +[![forks](https://img.shields.io/github/forks/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0) +[![issues](https://img.shields.io/github/issues/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0/issues) +[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com) +[![release](https://img.shields.io/github/v/release/umicro/uView2.0?style=flat-square)](https://gitee.com/umicro/uView2.0/releases) +[![license](https://img.shields.io/github/license/umicro/uView2.0?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) + +## 说明 + +uView UI,是[uni-app](https://uniapp.dcloud.io/)全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 + +## [官方文档:https://uviewui.com](https://uviewui.com) + + +## 预览 + +您可以通过**微信**扫码,查看最佳的演示效果。 +
+
+ + + +## 链接 + +- [官方文档](https://www.uviewui.com/) +- [更新日志](https://www.uviewui.com/components/changelog.html) +- [升级指南](https://www.uviewui.com/components/changeGuide.html) +- [关于我们](https://www.uviewui.com/cooperation/about.html) + +## 交流反馈 + +欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html) + +## 关于PR + +> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 +> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! + +## 安装 + +#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593) + +请通过[官网安装文档](https://www.uviewui.com/components/install.html)了解更详细的内容 + +## 快速上手 + +请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容 + +## 使用方法 +配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 + +```html + +``` + +## 版权信息 +uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。 + diff --git a/nk-oa/uni_modules/uview-ui/changelog.md b/nk-oa/uni_modules/uview-ui/changelog.md new file mode 100644 index 0000000..f2bae72 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/changelog.md @@ -0,0 +1,362 @@ +## 2.0.36(2023-03-27) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 重构`deepClone` & `deepMerge`方法 +2. 其他优化 +## 2.0.34(2022-09-24) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. `u-input`、`u-textarea`增加`ignoreCompositionEvent`属性 +2. 修复`route`方法调用可能报错的问题 +3. 修复`u-no-network`组件`z-index`无效的问题 +4. 修复`textarea`组件在h5上confirmType=""报错的问题 +5. `u-rate`适配`nvue` +6. 优化验证手机号码的正则表达式(根据工信部发布的《电信网编号计划(2017年版)》进行修改。) +7. `form-item`添加`labelPosition`属性 +8. `u-calendar`修复`maxDate`设置为当前日期,并且当前时间大于08:00时无法显示日期列表的问题 (#724) +9. `u-radio`增加一个默认插槽用于自定义修改label内容 (#680) +10. 修复`timeFormat`函数在safari重的兼容性问题 (#664) +## 2.0.33(2022-06-17) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`loadmore`组件`lineColor`类型错误问题 +2. 修复`u-parse`组件`imgtap`、`linktap`不生效问题 +## 2.0.32(2022-06-16) +# uView2.0重磅发布,利剑出鞘,一统江湖 +1. `u-loadmore`新增自定义颜色、虚/实线 +2. 修复`u-swiper-action`组件部分平台不能上下滑动的问题 +3. 修复`u-list`回弹问题 +4. 修复`notice-bar`组件动画在低端安卓机可能会抖动的问题 +5. `u-loading-page`添加控制图标大小的属性`iconSize` +6. 修复`u-tooltip`组件`color`参数不生效的问题 +7. 修复`u--input`组件使用`blur`事件输出为`undefined`的bug +8. `u-code-input`组件新增键盘弹起时,是否自动上推页面参数`adjustPosition` +9. 修复`image`组件`load`事件无回调对象问题 +10. 修复`button`组件`loadingSize`设置无效问题 +10. 其他修复 +## 2.0.31(2022-04-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`upload`在`vue`页面上传成功后没有成功标志的问题 +2. 解决演示项目中微信小程序模拟上传图片一直出于上传中问题 +3. 修复`u-code-input`组件在`nvue`页面编译到`app`平台上光标异常问题(`app`去除此功能) +4. 修复`actionSheet`组件标题关闭按钮点击事件名称错误的问题 +5. 其他修复 +## 2.0.30(2022-04-04) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. `u-rate`增加`readonly`属性 +2. `tabs`滑块支持设置背景图片 +3. 修复`u-subsection` `mode`为`subsection`时,滑块样式不正确的问题 +4. `u-code-input`添加光标效果动画 +5. 修复`popup`的`open`事件不触发 +6. 修复`u-flex-column`无效的问题 +7. 修复`u-datetime-picker`索引在特定场合异常问题 +8. 修复`u-datetime-picker`最小时间字符串模板错误问题 +9. `u-swiper`添加`m3u8`验证 +10. `u-swiper`修改判断image和video逻辑 +11. 修复`swiper`无法使用本地图片问题,增加`type`参数 +12. 修复`u-row-notice`格式错误问题 +13. 修复`u-switch`组件当`unit`为`rpx`时,`nodeStyle`消失的问题 +14. 修复`datetime-picker`组件`showToolbar`与`visibleItemCount`属性无效的问题 +15. 修复`upload`组件条件编译位置判断错误,导致`previewImage`属性设置为`false`时,整个组件都会被隐藏的问题 +16. 修复`u-checkbox-group`设置`shape`属性无效的问题 +17. 修复`u-upload`的`capture`传入字符串的时候不生效的问题 +18. 修复`u-action-sheet`组件,关闭事件逻辑错误的问题 +19. 修复`u-list`触顶事件的触发错误的问题 +20. 修复`u-text`只有手机号可拨打的问题 +21. 修复`u-textarea`不能换行的问题 +22. 其他修复 +## 2.0.29(2022-03-13) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`u--text`组件设置`decoration`属性未生效的问题 +2. 修复`u-datetime-picker`使用`formatter`后返回值不正确 +3. 修复`u-datetime-picker` `intercept` 可能为undefined +4. 修复已设置单位 uni..config.unit = 'rpx'时,线型指示器 `transform` 的位置翻倍,导致指示器超出宽度 +5. 修复mixin中bem方法生成的类名在支付宝和字节小程序中失效 +6. 修复默认值传值为空的时候,打开`u-datetime-picker`报错,不能选中第一列时间的bug +7. 修复`u-datetime-picker`使用`formatter`后返回值不正确 +8. 修复`u-image`组件`loading`无效果的问题 +9. 修复`config.unit`属性设为`rpx`时,导航栏占用高度不足导致塌陷的问题 +10. 修复`u-datetime-picker`组件`itemHeight`无效问题 +11. 其他修复 +## 2.0.28(2022-02-22) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. search组件新增searchIconSize属性 +2. 兼容Safari/Webkit中传入时间格式如2022-02-17 12:00:56 +3. 修复text value.js 判断日期出format错误问题 +4. priceFormat格式化金额出现精度错误 +5. priceFormat在部分情况下出现精度损失问题 +6. 优化表单rules提示 +7. 修复avatar组件src为空时,展示状态不对 +8. 其他修复 +## 2.0.27(2022-01-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1.样式修复 +## 2.0.26(2022-01-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1.样式修复 +## 2.0.25(2022-01-27) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复text组件mode=price时,可能会导致精度错误的问题 +2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE) +3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题 +4. 修复$u.addUnit()对配置默认单位可能无效的问题 +## 2.0.24(2022-01-25) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复swiper在current指定非0时缩放有误 +2. 修复u-icon添加stop属性的时候报错 +3. 优化遗留的通过正则判断rpx单位的问题 +4. 优化Layout布局 vue使用gutter时,会超出固定区域 +5. 优化search组件高度单位问题(rpx -> px) +6. 修复u-image slot 加载和错误的图片失去了高度 +7. 修复u-index-list中footer插槽与header插槽存在性判断错误 +8. 修复部分机型下u-popup关闭时会闪烁 +9. 修复u-image在nvue-app下失去宽高 +10. 修复u-popup运行报错 +11. 修复u-tooltip报错 +12. 修复box-sizing在app下的警告 +13. 修复u-navbar在小程序中报运行时错误 +14. 其他修复 +## 2.0.23(2022-01-24) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题 +2. 修复col组件gutter参数带rpx单位处理不正确的问题 +3. 修复text组件单行时无法显示省略号的问题 +4. navbar添加titleStyle参数 +5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题 +## 2.0.22(2022-01-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. $u.page()方法优化,避免在特殊场景可能报错的问题 +2. picker组件添加immediateChange参数 +3. 新增$u.pages()方法 +## 2.0.21(2022-01-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化:form组件在用户设置rules的时候提示用户model必传 +2. 优化遗留的通过正则判断rpx单位的问题 +3. 修复微信小程序环境中tabbar组件开启safeAreaInsetBottom属性后,placeholder高度填充不正确 +4. 修复swiper在current指定非0时缩放有误 +5. 修复u-icon添加stop属性的时候报错 +6. 修复upload组件在accept=all的时候没有作用 +7. 修复在text组件mode为phone时call属性无效的问题 +8. 处理u-form clearValidate方法 +9. 其他修复 +## 2.0.20(2022-01-14) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复calendar默认会选择一个日期,如果直接点确定的话,无法取到值的问题 +2. 修复Slider缺少disabled props 还有注释 +3. 修复u-notice-bar点击事件无法拿到index索引值的问题 +4. 修复u-collapse-item在vue文件下,app端自定义插槽不生效的问题 +5. 优化头像为空时显示默认头像 +6. 修复图片地址赋值后判断加载状态为完成问题 +7. 修复日历滚动到默认日期月份区域 +8. search组件暴露点击左边icon事件 +9. 修复u-form clearValidate方法不生效 +10. upload h5端增加返回文件参数(文件的name参数) +11. 处理upload选择文件后url为blob类型无法预览的问题 +12. u-code-input 修复输入框没有往左移出一半屏幕 +13. 修复Upload上传 disabled为true时,控制台报hoverClass类型错误 +14. 临时处理ios app下grid点击坍塌问题 +15. 其他修复 +## 2.0.19(2021-12-29) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码” +2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题 +3. navbar添加autoBack参数 +4. 允许avatar组件的事件冒泡 +5. 修复cell组件报错问题 +6. 其他修复 +## 2.0.18(2021-12-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复app端编译报错问题 +2. 重新处理微信小程序端setData过大的性能问题 +3. 修复边框问题 +4. 修复最大最小月份不大于0则没有数据出现的问题 +5. 修复SwipeAction微信小程序端无法上下滑动问题 +6. 修复input的placeholder在小程序端默认显示为true问题 +7. 修复divider组件click事件无效问题 +8. 修复u-code-input maxlength 属性值为 String 类型时显示异常 +9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题 +10. 处理form-item的label为top时,取消错误提示的左边距 +11. 其他修复 +## 2.0.17(2021-12-26) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 解决HBuilderX3.3.3.20211225版本导致的样式问题 +2. calendar日历添加monthNum参数 +3. navbar添加center slot +## 2.0.16(2021-12-25) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 解决微信小程序setData性能问题 +2. 修复count-down组件change事件不触发问题 +## 2.0.15(2021-12-21) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复Cell单元格titleWidth无效 +2. 修复cheakbox组件ischecked不更新 +3. 修复keyboard是否显示"."按键默认值问题 +4. 修复number-keyboard是否显示键盘的"."符号问题 +5. 修复Input输入框 readonly无效 +6. 修复u-avatar 导致打包app、H5时候报错问题 +7. 修复Upload上传deletable无效 +8. 修复upload当设置maxSize时无效的问题 +9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题 +10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星 +## 2.0.13(2021-12-14) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复配置默认单位为rpx可能会导致自定义导航栏高度异常的问题 +## 2.0.12(2021-12-14) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复tabs组件在vue环境下划线消失的问题 +2. 修复upload组件在安卓小程序无法选择视频的问题 +3. 添加uni.$u.config.unit配置,用于配置参数默认单位,详见:[默认单位配置](https://www.uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE) +4. 修复textarea组件在没绑定v-model时,字符统计不生效问题 +5. 修复nvue下控制是否出现滚动条失效问题 +## 2.0.11(2021-12-13) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. text组件align参数无效的问题 +2. subsection组件添加keyName参数 +3. upload组件无法判断[Object file]类型的问题 +4. 处理notify层级过低问题 +5. codeInput组件添加disabledDot参数 +6. 处理actionSheet组件round参数无效的问题 +7. calendar组件添加round参数用于控制圆角值 +8. 处理swipeAction组件在vue环境下默认被打开的问题 +9. button组件的throttleTime节流参数无效的问题 +10. 解决u-notify手动关闭方法close()无效的问题 +11. input组件readonly不生效问题 +12. tag组件type参数为info不生效问题 +## 2.0.10(2021-12-08) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复button sendMessagePath属性不生效 +2. 修复DatetimePicker选择器title无效 +3. 修复u-toast设置loading=true不生效 +4. 修复u-text金额模式传0报错 +5. 修复u-toast组件的icon属性配置不生效 +6. button的icon在特殊场景下的颜色优化 +7. IndexList优化,增加# +## 2.0.9(2021-12-01) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化swiper的height支持100%值(仅vue有效),修复嵌入视频时click事件无法触发的问题 +2. 优化tabs组件对list值为空的判断,或者动态变化list时重新计算相关尺寸的问题 +3. 优化datetime-picker组件逻辑,让其后续打开的默认值为上一次的选中值,需要通过v-model绑定值才有效 +4. 修复upload内嵌在其他组件中,选择图片可能不会换行的问题 +## 2.0.8(2021-12-01) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复toast的position参数无效问题 +2. 处理input在ios nvue上无法获得焦点的问题 +3. avatar-group组件添加extraValue参数,让剩余展示数量可手动控制 +4. tabs组件添加keyName参数用于配置从对象中读取的键名 +5. 处理text组件名字脱敏默认配置无效的问题 +6. 处理picker组件item文本太长换行问题 +## 2.0.7(2021-11-30) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复radio和checkbox动态改变v-model无效的问题。 +2. 优化form规则validator在微信小程序用法 +3. 修复backtop组件mode参数在微信小程序无效的问题 +4. 处理Album的previewFullImage属性无效的问题 +5. 处理u-datetime-picker组件mode='time'在选择改变时间时,控制台报错的问题 +## 2.0.6(2021-11-27) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 处理tag组件在vue下边框无效的问题。 +2. 处理popup组件圆角参数可能无效的问题。 +3. 处理tabs组件lineColor参数可能无效的问题。 +4. propgress组件在值很小时,显示异常的问题。 +## 2.0.5(2021-11-25) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. calendar在vue下显示异常问题。 +2. form组件labelPosition和errorType参数无效的问题 +3. input组件inputAlign无效的问题 +4. 其他一些修复 +## 2.0.4(2021-11-23) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +0. input组件缺失@confirm事件,以及subfix和prefix无效问题 +1. component.scss文件样式在vue下干扰全局布局问题 +2. 修复subsection在vue环境下表现异常的问题 +3. tag组件的bgColor等参数无效的问题 +4. upload组件不换行的问题 +5. 其他的一些修复处理 +## 2.0.3(2021-11-16) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 处理modal的confirm回调事件拼写错误问题 +6. 处理input组件@input事件参数错误问题 +7. 其他一些修复 +## 2.0.2(2021-11-16) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 修复input组件formatter参数缺失问题 +6. 优化loading-icon组件的scss写法问题,防止不兼容新版本scss +## 2.0.0(2020-11-15) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 修复input组件formatter参数缺失问题 + + diff --git a/nk-oa/uni_modules/uview-ui/components/u--form/u--form.vue b/nk-oa/uni_modules/uview-ui/components/u--form/u--form.vue new file mode 100644 index 0000000..fdfc212 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u--form/u--form.vue @@ -0,0 +1,78 @@ + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u--image/u--image.vue b/nk-oa/uni_modules/uview-ui/components/u--image/u--image.vue new file mode 100644 index 0000000..21b7ab1 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u--image/u--image.vue @@ -0,0 +1,47 @@ + + + \ No newline at end of file diff --git a/nk-oa/uni_modules/uview-ui/components/u--input/u--input.vue b/nk-oa/uni_modules/uview-ui/components/u--input/u--input.vue new file mode 100644 index 0000000..1e58b01 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u--input/u--input.vue @@ -0,0 +1,73 @@ + + + \ No newline at end of file diff --git a/nk-oa/uni_modules/uview-ui/components/u--text/u--text.vue b/nk-oa/uni_modules/uview-ui/components/u--text/u--text.vue new file mode 100644 index 0000000..44ee52a --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u--text/u--text.vue @@ -0,0 +1,44 @@ + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u--textarea/u--textarea.vue b/nk-oa/uni_modules/uview-ui/components/u--textarea/u--textarea.vue new file mode 100644 index 0000000..f4df0b9 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u--textarea/u--textarea.vue @@ -0,0 +1,48 @@ + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-action-sheet/props.js b/nk-oa/uni_modules/uview-ui/components/u-action-sheet/props.js new file mode 100644 index 0000000..e96e04f --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-action-sheet/props.js @@ -0,0 +1,54 @@ +export default { + props: { + // 操作菜单是否展示 (默认false) + show: { + type: Boolean, + default: uni.$u.props.actionSheet.show + }, + // 标题 + title: { + type: String, + default: uni.$u.props.actionSheet.title + }, + // 选项上方的描述信息 + description: { + type: String, + default: uni.$u.props.actionSheet.description + }, + // 数据 + actions: { + type: Array, + default: uni.$u.props.actionSheet.actions + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: uni.$u.props.actionSheet.cancelText + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: uni.$u.props.actionSheet.closeOnClickAction + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: uni.$u.props.actionSheet.safeAreaInsetBottom + }, + // 小程序的打开方式 + openType: { + type: String, + default: uni.$u.props.actionSheet.openType + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.actionSheet.closeOnClickOverlay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: uni.$u.props.actionSheet.round + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue b/nk-oa/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue new file mode 100644 index 0000000..26d5d8d --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue @@ -0,0 +1,278 @@ + + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-album/props.js b/nk-oa/uni_modules/uview-ui/components/u-album/props.js new file mode 100644 index 0000000..75cdb37 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-album/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 图片地址,Array|Array形式 + urls: { + type: Array, + default: uni.$u.props.album.urls + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: uni.$u.props.album.keyName + }, + // 单图时,图片长边的长度 + singleSize: { + type: [String, Number], + default: uni.$u.props.album.singleSize + }, + // 多图时,图片边长 + multipleSize: { + type: [String, Number], + default: uni.$u.props.album.multipleSize + }, + // 多图时,图片水平和垂直之间的间隔 + space: { + type: [String, Number], + default: uni.$u.props.album.space + }, + // 单图时,图片缩放裁剪的模式 + singleMode: { + type: String, + default: uni.$u.props.album.singleMode + }, + // 多图时,图片缩放裁剪的模式 + multipleMode: { + type: String, + default: uni.$u.props.album.multipleMode + }, + // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 + maxCount: { + type: [String, Number], + default: uni.$u.props.album.maxCount + }, + // 是否可以预览图片 + previewFullImage: { + type: Boolean, + default: uni.$u.props.album.previewFullImage + }, + // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 + rowCount: { + type: [String, Number], + default: uni.$u.props.album.rowCount + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: uni.$u.props.album.showMore + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-album/u-album.vue b/nk-oa/uni_modules/uview-ui/components/u-album/u-album.vue new file mode 100644 index 0000000..687e2d5 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-album/u-album.vue @@ -0,0 +1,259 @@ + + + + + \ No newline at end of file diff --git a/nk-oa/uni_modules/uview-ui/components/u-alert/props.js b/nk-oa/uni_modules/uview-ui/components/u-alert/props.js new file mode 100644 index 0000000..4297e2c --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-alert/props.js @@ -0,0 +1,44 @@ +export default { + props: { + // 显示文字 + title: { + type: String, + default: uni.$u.props.alert.title + }, + // 主题,success/warning/info/error + type: { + type: String, + default: uni.$u.props.alert.type + }, + // 辅助性文字 + description: { + type: String, + default: uni.$u.props.alert.description + }, + // 是否可关闭 + closable: { + type: Boolean, + default: uni.$u.props.alert.closable + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: uni.$u.props.alert.showIcon + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: uni.$u.props.alert.effect + }, + // 文字是否居中 + center: { + type: Boolean, + default: uni.$u.props.alert.center + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.alert.fontSize + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-alert/u-alert.vue b/nk-oa/uni_modules/uview-ui/components/u-alert/u-alert.vue new file mode 100644 index 0000000..81f7d43 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-alert/u-alert.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-avatar-group/props.js b/nk-oa/uni_modules/uview-ui/components/u-avatar-group/props.js new file mode 100644 index 0000000..58b42ac --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-avatar-group/props.js @@ -0,0 +1,52 @@ +export default { + props: { + // 头像图片组 + urls: { + type: Array, + default: uni.$u.props.avatarGroup.urls + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: uni.$u.props.avatarGroup.maxCount + }, + // 头像形状 + shape: { + type: String, + default: uni.$u.props.avatarGroup.shape + }, + // 图片裁剪模式 + mode: { + type: String, + default: uni.$u.props.avatarGroup.mode + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: uni.$u.props.avatarGroup.showMore + }, + // 头像大小 + size: { + type: [String, Number], + default: uni.$u.props.avatarGroup.size + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: uni.$u.props.avatarGroup.keyName + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: uni.$u.props.avatarGroup.gap + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: uni.$u.props.avatarGroup.extraValue + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue b/nk-oa/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue new file mode 100644 index 0000000..7e996d7 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-avatar/props.js b/nk-oa/uni_modules/uview-ui/components/u-avatar/props.js new file mode 100644 index 0000000..34ca0f2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-avatar/props.js @@ -0,0 +1,78 @@ +export default { + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: uni.$u.props.avatar.src + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.avatar.shape + }, + // 头像尺寸 + size: { + type: [String, Number], + default: uni.$u.props.avatar.size + }, + // 裁剪模式 + mode: { + type: String, + default: uni.$u.props.avatar.mode + }, + // 显示的文字 + text: { + type: String, + default: uni.$u.props.avatar.text + }, + // 背景色 + bgColor: { + type: String, + default: uni.$u.props.avatar.bgColor + }, + // 文字颜色 + color: { + type: String, + default: uni.$u.props.avatar.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.avatar.fontSize + }, + // 显示的图标 + icon: { + type: String, + default: uni.$u.props.avatar.icon + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: uni.$u.props.avatar.mpAvatar + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: uni.$u.props.avatar.randomBgColor + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: uni.$u.props.avatar.defaultUrl + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return uni.$u.test.range(n, [0, 19]) || n === '' + }, + default: uni.$u.props.avatar.colorIndex + }, + // 组件标识符 + name: { + type: String, + default: uni.$u.props.avatar.name + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-avatar/u-avatar.vue b/nk-oa/uni_modules/uview-ui/components/u-avatar/u-avatar.vue new file mode 100644 index 0000000..3319be5 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-avatar/u-avatar.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-back-top/props.js b/nk-oa/uni_modules/uview-ui/components/u-back-top/props.js new file mode 100644 index 0000000..6c702c2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-back-top/props.js @@ -0,0 +1,54 @@ +export default { + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: uni.$u.props.backtop.mode + }, + // 自定义图标 + icon: { + type: String, + default: uni.$u.props.backtop.icon + }, + // 提示文字 + text: { + type: String, + default: uni.$u.props.backtop.text + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: uni.$u.props.backtop.duration + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: uni.$u.props.backtop.scrollTop + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: uni.$u.props.backtop.top + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: uni.$u.props.backtop.bottom + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: uni.$u.props.backtop.right + }, + // 层级 + zIndex: { + type: [String, Number], + default: uni.$u.props.backtop.zIndex + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: uni.$u.props.backtop.iconStyle + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-back-top/u-back-top.vue b/nk-oa/uni_modules/uview-ui/components/u-back-top/u-back-top.vue new file mode 100644 index 0000000..2d07566 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-back-top/u-back-top.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-badge/props.js b/nk-oa/uni_modules/uview-ui/components/u-badge/props.js new file mode 100644 index 0000000..74c032c --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-badge/props.js @@ -0,0 +1,72 @@ +export default { + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: uni.$u.props.badge.isDot + }, + // 显示的内容 + value: { + type: [Number, String], + default: uni.$u.props.badge.value + }, + // 是否显示 + show: { + type: Boolean, + default: uni.$u.props.badge.show + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: uni.$u.props.badge.max + }, + // 主题类型,error|warning|success|primary + type: { + type: String, + default: uni.$u.props.badge.type + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: uni.$u.props.badge.showZero + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: uni.$u.props.badge.bgColor + }, + // 字体颜色 + color: { + type: [String, null], + default: uni.$u.props.badge.color + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: String, + default: uni.$u.props.badge.shape + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: String, + default: uni.$u.props.badge.numberType + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: uni.$u.props.badge.offset + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: uni.$u.props.badge.inverted + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: uni.$u.props.badge.absolute + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-badge/u-badge.vue b/nk-oa/uni_modules/uview-ui/components/u-badge/u-badge.vue new file mode 100644 index 0000000..53cfc81 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-badge/u-badge.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-button/nvue.scss b/nk-oa/uni_modules/uview-ui/components/u-button/nvue.scss new file mode 100644 index 0000000..490db7d --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-button/nvue.scss @@ -0,0 +1,46 @@ +$u-button-active-opacity:0.75 !default; +$u-button-loading-text-margin-left:4px !default; +$u-button-text-color: #FFFFFF !default; +$u-button-text-plain-error-color:$u-error !default; +$u-button-text-plain-warning-color:$u-warning !default; +$u-button-text-plain-success-color:$u-success !default; +$u-button-text-plain-info-color:$u-info !default; +$u-button-text-plain-primary-color:$u-primary !default; +.u-button { + &--active { + opacity: $u-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$u-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$u-button-text-color; + } + + &__text--plain--error { + color:$u-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$u-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$u-button-text-plain-success-color; + } + + &__text--plain--info { + color:$u-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$u-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/nk-oa/uni_modules/uview-ui/components/u-button/props.js b/nk-oa/uni_modules/uview-ui/components/u-button/props.js new file mode 100644 index 0000000..07fd844 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-button/props.js @@ -0,0 +1,161 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-16 10:04:04 + * @LastAuthor : LQ + * @lastTime : 2021-08-16 10:04:24 + * @FilePath : /u-view2.0/uview-ui/components/u-button/props.js + */ +export default { + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: uni.$u.props.button.hairline + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: uni.$u.props.button.type + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: uni.$u.props.button.size + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: uni.$u.props.button.shape + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: uni.$u.props.button.plain + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: uni.$u.props.button.disabled + }, + // 是否加载中 + loading: { + type: Boolean, + default: uni.$u.props.button.loading + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: uni.$u.props.button.loadingText + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: uni.$u.props.button.loadingMode + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: uni.$u.props.button.loadingSize + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: uni.$u.props.button.openType + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: uni.$u.props.button.formType + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: uni.$u.props.button.appParameter + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: uni.$u.props.button.hoverStopPropagation + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: uni.$u.props.button.lang + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: uni.$u.props.button.sessionFrom + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: uni.$u.props.button.sendMessageTitle + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: uni.$u.props.button.sendMessagePath + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: uni.$u.props.button.sendMessageImg + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: uni.$u.props.button.showMessageCard + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: uni.$u.props.button.dataName + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: uni.$u.props.button.throttleTime + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: uni.$u.props.button.hoverStartTime + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: uni.$u.props.button.hoverStayTime + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: uni.$u.props.button.text + }, + // 按钮图标 + icon: { + type: String, + default: uni.$u.props.button.icon + }, + // 按钮图标 + iconColor: { + type: String, + default: uni.$u.props.button.icon + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: uni.$u.props.button.color + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-button/u-button.vue b/nk-oa/uni_modules/uview-ui/components/u-button/u-button.vue new file mode 100644 index 0000000..5494351 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-button/u-button.vue @@ -0,0 +1,490 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-button/vue.scss b/nk-oa/uni_modules/uview-ui/components/u-button/vue.scss new file mode 100644 index 0000000..32019b2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-button/vue.scss @@ -0,0 +1,80 @@ +// nvue下hover-class无效 +$u-button-before-top:50% !default; +$u-button-before-left:50% !default; +$u-button-before-width:100% !default; +$u-button-before-height:100% !default; +$u-button-before-transform:translate(-50%, -50%) !default; +$u-button-before-opacity:0 !default; +$u-button-before-background-color:#000 !default; +$u-button-before-border-color:#000 !default; +$u-button-active-before-opacity:.15 !default; +$u-button-icon-margin-left:4px !default; +$u-button-plain-u-button-info-color:$u-info; +$u-button-plain-u-button-success-color:$u-success; +$u-button-plain-u-button-error-color:$u-error; +$u-button-plain-u-button-warning-color:$u-error; + +.u-button { + width: 100%; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$u-button-before-top; + left:$u-button-before-left; + width:$u-button-before-width; + height:$u-button-before-height; + border: inherit; + border-radius: inherit; + transform:$u-button-before-transform; + opacity:$u-button-before-opacity; + content: " "; + background-color:$u-button-before-background-color; + border-color:$u-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$u-button-icon-margin-left; + } + + &--plain { + &.u-button--primary { + color: $u-primary; + } + } + + &--plain { + &.u-button--info { + color:$u-button-plain-u-button-info-color; + } + } + + &--plain { + &.u-button--success { + color:$u-button-plain-u-button-success-color; + } + } + + &--plain { + &.u-button--error { + color:$u-button-plain-u-button-error-color; + } + } + + &--plain { + &.u-button--warning { + color:$u-button-plain-u-button-warning-color; + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-calendar/header.vue b/nk-oa/uni_modules/uview-ui/components/u-calendar/header.vue new file mode 100644 index 0000000..dc4f7d0 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-calendar/header.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-calendar/month.vue b/nk-oa/uni_modules/uview-ui/components/u-calendar/month.vue new file mode 100644 index 0000000..c20937f --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-calendar/month.vue @@ -0,0 +1,579 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-calendar/props.js b/nk-oa/uni_modules/uview-ui/components/u-calendar/props.js new file mode 100644 index 0000000..2ad7bc7 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-calendar/props.js @@ -0,0 +1,144 @@ +export default { + props: { + // 日历顶部标题 + title: { + type: String, + default: uni.$u.props.calendar.title + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: uni.$u.props.calendar.showTitle + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: uni.$u.props.calendar.showSubtitle + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: uni.$u.props.calendar.mode + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: uni.$u.props.calendar.startText + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: uni.$u.props.calendar.endText + }, + // 自定义列表 + customList: { + type: Array, + default: uni.$u.props.calendar.customList + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: uni.$u.props.calendar.color + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: uni.$u.props.calendar.minDate + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: uni.$u.props.calendar.maxDate + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: uni.$u.props.calendar.defaultDate + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: uni.$u.props.calendar.maxCount + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: uni.$u.props.calendar.rowHeight + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: uni.$u.props.calendar.formatter + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: uni.$u.props.calendar.showLunar + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: uni.$u.props.calendar.showMark + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.calendar.confirmText + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: uni.$u.props.calendar.confirmDisabledText + }, + // 是否显示日历弹窗 + show: { + type: Boolean, + default: uni.$u.props.calendar.show + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.calendar.closeOnClickOverlay + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: uni.$u.props.calendar.readonly + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: uni.$u.props.calendar.showConfirm + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 + maxRange: { + type: [Number, String], + default: uni.$u.props.calendar.maxRange + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: uni.$u.props.calendar.rangePrompt + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: uni.$u.props.calendar.showRangePrompt + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: uni.$u.props.calendar.allowSameDay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: uni.$u.props.calendar.round + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-calendar/u-calendar.vue b/nk-oa/uni_modules/uview-ui/components/u-calendar/u-calendar.vue new file mode 100644 index 0000000..511f993 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-calendar/u-calendar.vue @@ -0,0 +1,384 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-calendar/util.js b/nk-oa/uni_modules/uview-ui/components/u-calendar/util.js new file mode 100644 index 0000000..ca4736b --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-calendar/util.js @@ -0,0 +1,85 @@ +export default { + methods: { + // 设置月份数据 + setMonth() { + // 月初是周几 + const day = dayjs(this.date).date(1).day() + const start = day == 0 ? 6 : day - 1 + + // 本月天数 + const days = dayjs(this.date).endOf('month').format('D') + + // 上个月天数 + const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D') + + // 日期数据 + const arr = [] + // 清空表格 + this.month = [] + + // 添加上月数据 + arr.push( + ...new Array(start).fill(1).map((e, i) => { + const day = prevDays - start + i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加本月数据 + arr.push( + ...new Array(days - 0).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + date: dayjs(this.date).date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加下个月 + arr.push( + ...new Array(42 - days - start).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 分割数组 + for (let n = 0; n < arr.length; n += 7) { + this.month.push( + arr.slice(n, n + 7).map((e, i) => { + e.index = i + n + + // 自定义信息 + const custom = this.customList.find((c) => c.date == e.date) + + // 农历 + if (this.lunar) { + const { + IDayCn, + IMonthCn + } = this.getLunar(e.date) + e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn + } + + return { + ...e, + ...custom + } + }) + ) + } + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/props.js b/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/props.js new file mode 100644 index 0000000..3553647 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 0000000..51175b5 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,311 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-cell-group/props.js b/nk-oa/uni_modules/uview-ui/components/u-cell-group/props.js new file mode 100644 index 0000000..350ef40 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-cell-group/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 分组标题 + title: { + type: String, + default: uni.$u.props.cellGroup.title + }, + // 是否显示外边框 + border: { + type: Boolean, + default: uni.$u.props.cellGroup.border + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue b/nk-oa/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue new file mode 100644 index 0000000..a9508c0 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-cell/props.js b/nk-oa/uni_modules/uview-ui/components/u-cell/props.js new file mode 100644 index 0000000..da03330 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-cell/props.js @@ -0,0 +1,110 @@ +export default { + props: { + // 标题 + title: { + type: [String, Number], + default: uni.$u.props.cell.title + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: uni.$u.props.cell.label + }, + // 右侧的内容 + value: { + type: [String, Number], + default: uni.$u.props.cell.value + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: uni.$u.props.cell.icon + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: uni.$u.props.cell.disabled + }, + // 是否显示下边框 + border: { + type: Boolean, + default: uni.$u.props.cell.border + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: uni.$u.props.cell.center + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: uni.$u.props.cell.url + }, + // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: uni.$u.props.cell.linkType + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: uni.$u.props.cell.clickable + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: uni.$u.props.cell.isLink + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: uni.$u.props.cell.required + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: uni.$u.props.cell.rightIcon + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: uni.$u.props.cell.arrowDirection + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.iconStyle + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.rightIconStyle + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.titleStyle + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: uni.$u.props.cell.size + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: uni.$u.props.cell.stop + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: uni.$u.props.cell.name + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-cell/u-cell.vue b/nk-oa/uni_modules/uview-ui/components/u-cell/u-cell.vue new file mode 100644 index 0000000..b099c90 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-cell/u-cell.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/props.js b/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/props.js new file mode 100644 index 0000000..2f818a1 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/props.js @@ -0,0 +1,82 @@ +export default { + props: { + // 标识符 + name: { + type: String, + default: uni.$u.props.checkboxGroup.name + }, + // 绑定的值 + value: { + type: Array, + default: uni.$u.props.checkboxGroup.value + }, + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.checkboxGroup.shape + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: uni.$u.props.checkboxGroup.disabled + }, + + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: uni.$u.props.checkboxGroup.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.checkboxGroup.inactiveColor + }, + + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.size + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: uni.$u.props.checkboxGroup.placement + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.labelSize + }, + // label的字体颜色 + labelColor: { + type: [String], + default: uni.$u.props.checkboxGroup.labelColor + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: uni.$u.props.checkboxGroup.labelDisabled + }, + // 图标颜色 + iconColor: { + type: String, + default: uni.$u.props.checkboxGroup.iconColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.iconSize + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: uni.$u.props.checkboxGroup.iconPlacement + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: uni.$u.props.checkboxGroup.borderBottom + } + + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 0000000..7a6b4fa --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-checkbox/props.js b/nk-oa/uni_modules/uview-ui/components/u-checkbox/props.js new file mode 100644 index 0000000..93f4fd9 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-checkbox/props.js @@ -0,0 +1,69 @@ +export default { + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: uni.$u.props.checkbox.name + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: uni.$u.props.checkbox.shape + }, + // 整体的大小 + size: { + type: [String, Number], + default: uni.$u.props.checkbox.size + }, + // 是否默认选中 + checked: { + type: Boolean, + default: uni.$u.props.checkbox.checked + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: uni.$u.props.checkbox.disabled + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: uni.$u.props.checkbox.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.checkbox.inactiveColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: uni.$u.props.checkbox.iconSize + }, + // 图标颜色 + iconColor: { + type: String, + default: uni.$u.props.checkbox.iconColor + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number], + default: uni.$u.props.checkbox.label + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: uni.$u.props.checkbox.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: uni.$u.props.checkbox.labelColor + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: uni.$u.props.checkbox.labelDisabled + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue b/nk-oa/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue new file mode 100644 index 0000000..6429cca --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,344 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-circle-progress/props.js b/nk-oa/uni_modules/uview-ui/components/u-circle-progress/props.js new file mode 100644 index 0000000..d776cfb --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-circle-progress/props.js @@ -0,0 +1,8 @@ +export default { + props: { + percentage: { + type: [String, Number], + default: uni.$u.props.circleProgress.percentage + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue b/nk-oa/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 0000000..d1ee286 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-code-input/props.js b/nk-oa/uni_modules/uview-ui/components/u-code-input/props.js new file mode 100644 index 0000000..0f016ee --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-code-input/props.js @@ -0,0 +1,79 @@ +export default { + props: { + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: uni.$u.props.codeInput.adjustPosition + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: uni.$u.props.codeInput.maxlength + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: uni.$u.props.codeInput.dot + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: uni.$u.props.codeInput.mode + }, + // 是否细边框 + hairline: { + type: Boolean, + default: uni.$u.props.codeInput.hairline + }, + // 字符间的距离 + space: { + type: [String, Number], + default: uni.$u.props.codeInput.space + }, + // 预置值 + value: { + type: [String, Number], + default: uni.$u.props.codeInput.value + }, + // 是否自动获取焦点 + focus: { + type: Boolean, + default: uni.$u.props.codeInput.focus + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: uni.$u.props.codeInput.bold + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.codeInput.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.codeInput.fontSize + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: uni.$u.props.codeInput.size + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: uni.$u.props.codeInput.disabledKeyboard + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: uni.$u.props.codeInput.borderColor + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: uni.$u.props.codeInput.disabledDot + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-code-input/u-code-input.vue b/nk-oa/uni_modules/uview-ui/components/u-code-input/u-code-input.vue new file mode 100644 index 0000000..96241cf --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-code-input/u-code-input.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-code/props.js b/nk-oa/uni_modules/uview-ui/components/u-code/props.js new file mode 100644 index 0000000..eaf80d0 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-code/props.js @@ -0,0 +1,34 @@ +export default { + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: uni.$u.props.code.seconds + }, + // 尚未开始时提示 + startText: { + type: String, + default: uni.$u.props.code.startText + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: uni.$u.props.code.changeText + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: uni.$u.props.code.endText + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: uni.$u.props.code.keepRunning + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: uni.$u.props.code.uniqueKey + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-code/u-code.vue b/nk-oa/uni_modules/uview-ui/components/u-code/u-code.vue new file mode 100644 index 0000000..f79a09a --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-code/u-code.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-col/props.js b/nk-oa/uni_modules/uview-ui/components/u-col/props.js new file mode 100644 index 0000000..0622251 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-col/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 占父容器宽度的多少等分,总分为12份 + span: { + type: [String, Number], + default: uni.$u.props.col.span + }, + // 指定栅格左侧的间隔数(总12栏) + offset: { + type: [String, Number], + default: uni.$u.props.col.offset + }, + // 水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`) + justify: { + type: String, + default: uni.$u.props.col.justify + }, + // 垂直对齐方式,可选值为top、center、bottom、stretch + align: { + type: String, + default: uni.$u.props.col.align + }, + // 文字对齐方式 + textAlign: { + type: String, + default: uni.$u.props.col.textAlign + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-col/u-col.vue b/nk-oa/uni_modules/uview-ui/components/u-col/u-col.vue new file mode 100644 index 0000000..8be1517 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-col/u-col.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-collapse-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-collapse-item/props.js new file mode 100644 index 0000000..bd5749b --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-collapse-item/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 标题 + title: { + type: String, + default: uni.$u.props.collapseItem.title + }, + // 标题右侧内容 + value: { + type: String, + default: uni.$u.props.collapseItem.value + }, + // 标题下方的描述信息 + label: { + type: String, + default: uni.$u.props.collapseItem.label + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: uni.$u.props.collapseItem.disabled + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: uni.$u.props.collapseItem.isLink + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: uni.$u.props.collapseItem.clickable + }, + // 是否显示内边框 + border: { + type: Boolean, + default: uni.$u.props.collapseItem.border + }, + // 标题的对齐方式 + align: { + type: String, + default: uni.$u.props.collapseItem.align + }, + // 唯一标识符 + name: { + type: [String, Number], + default: uni.$u.props.collapseItem.name + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: uni.$u.props.collapseItem.icon + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: uni.$u.props.collapseItem.duration + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue b/nk-oa/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 0000000..0e1b703 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-collapse/props.js b/nk-oa/uni_modules/uview-ui/components/u-collapse/props.js new file mode 100644 index 0000000..7ee6d31 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-collapse/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: uni.$u.props.collapse.value + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: uni.$u.props.collapse.accordion + }, + // 是否显示外边框 + border: { + type: Boolean, + default: uni.$u.props.collapse.border + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-collapse/u-collapse.vue b/nk-oa/uni_modules/uview-ui/components/u-collapse/u-collapse.vue new file mode 100644 index 0000000..fc188a2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-collapse/u-collapse.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-column-notice/props.js b/nk-oa/uni_modules/uview-ui/components/u-column-notice/props.js new file mode 100644 index 0000000..4809154 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-column-notice/props.js @@ -0,0 +1,55 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: uni.$u.props.columnNotice.text + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: uni.$u.props.columnNotice.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: uni.$u.props.columnNotice.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: uni.$u.props.columnNotice.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.columnNotice.bgColor + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: uni.$u.props.columnNotice.fontSize + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: uni.$u.props.columnNotice.speed + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: uni.$u.props.columnNotice.step + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.columnNotice.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: uni.$u.props.columnNotice.disableTouch + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue b/nk-oa/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue new file mode 100644 index 0000000..fc39532 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-count-down/props.js b/nk-oa/uni_modules/uview-ui/components/u-count-down/props.js new file mode 100644 index 0000000..d62f025 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-count-down/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: uni.$u.props.countDown.time + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: uni.$u.props.countDown.format + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: uni.$u.props.countDown.autoStart + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: uni.$u.props.countDown.millisecond + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-count-down/u-count-down.vue b/nk-oa/uni_modules/uview-ui/components/u-count-down/u-count-down.vue new file mode 100644 index 0000000..b5e85a6 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-count-down/u-count-down.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-count-down/utils.js b/nk-oa/uni_modules/uview-ui/components/u-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-count-to/props.js b/nk-oa/uni_modules/uview-ui/components/u-count-to/props.js new file mode 100644 index 0000000..86873c1 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-count-to/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: uni.$u.props.countTo.startVal + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: uni.$u.props.countTo.endVal + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: uni.$u.props.countTo.duration + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: uni.$u.props.countTo.autoplay + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: uni.$u.props.countTo.decimals + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: uni.$u.props.countTo.useEasing + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: uni.$u.props.countTo.decimal + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.countTo.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.countTo.fontSize + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: uni.$u.props.countTo.bold + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: uni.$u.props.countTo.separator + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-count-to/u-count-to.vue b/nk-oa/uni_modules/uview-ui/components/u-count-to/u-count-to.vue new file mode 100644 index 0000000..417b732 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-count-to/u-count-to.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/props.js b/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/props.js new file mode 100644 index 0000000..f44c0f9 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/props.js @@ -0,0 +1,116 @@ +export default { + props: { + // 是否打开组件 + show: { + type: Boolean, + default: uni.$u.props.datetimePicker.show + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: uni.$u.props.datetimePicker.showToolbar + }, + // 绑定值 + value: { + type: [String, Number], + default: uni.$u.props.datetimePicker.value + }, + // 顶部标题 + title: { + type: String, + default: uni.$u.props.datetimePicker.title + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: uni.$u.props.datetimePicker.mode + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: uni.$u.props.datetimePicker.maxDate + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: uni.$u.props.datetimePicker.minDate + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: uni.$u.props.datetimePicker.minHour + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: uni.$u.props.datetimePicker.maxHour + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: uni.$u.props.datetimePicker.minMinute + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: uni.$u.props.datetimePicker.maxMinute + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: uni.$u.props.datetimePicker.filter + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: uni.$u.props.datetimePicker.formatter + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: uni.$u.props.datetimePicker.loading + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: uni.$u.props.datetimePicker.itemHeight + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: uni.$u.props.datetimePicker.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.datetimePicker.confirmText + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: uni.$u.props.datetimePicker.cancelColor + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: uni.$u.props.datetimePicker.confirmColor + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: uni.$u.props.datetimePicker.visibleItemCount + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.datetimePicker.closeOnClickOverlay + }, + // 各列的默认索引 + defaultIndex: { + type: Array, + default: uni.$u.props.datetimePicker.defaultIndex + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue b/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue new file mode 100644 index 0000000..18d8dcc --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-divider/props.js b/nk-oa/uni_modules/uview-ui/components/u-divider/props.js new file mode 100644 index 0000000..1fa8359 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-divider/props.js @@ -0,0 +1,44 @@ +export default { + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: uni.$u.props.divider.dashed + }, + // 是否细线 + hairline: { + type: Boolean, + default: uni.$u.props.divider.hairline + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: uni.$u.props.divider.dot + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: uni.$u.props.divider.textPosition + }, + // 文本内容 + text: { + type: [String, Number], + default: uni.$u.props.divider.text + }, + // 文本大小 + textSize: { + type: [String, Number], + default: uni.$u.props.divider.textSize + }, + // 文本颜色 + textColor: { + type: String, + default: uni.$u.props.divider.textColor + }, + // 线条颜色 + lineColor: { + type: String, + default: uni.$u.props.divider.lineColor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-divider/u-divider.vue b/nk-oa/uni_modules/uview-ui/components/u-divider/u-divider.vue new file mode 100644 index 0000000..b629da6 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-divider/u-divider.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/props.js new file mode 100644 index 0000000..501a1f0 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/props.js @@ -0,0 +1,36 @@ +export default { + props: { + // 当前选中项的value值 + value: { + type: [Number, String, Array], + default: '' + }, + // 菜单项标题 + title: { + type: [String, Number], + default: '' + }, + // 选项数据,如果传入了默认slot,此参数无效 + options: { + type: Array, + default() { + return [] + } + }, + // 是否禁用此菜单项 + disabled: { + type: Boolean, + default: false + }, + // 下拉弹窗的高度 + height: { + type: [Number, String], + default: 'auto' + }, + // 点击遮罩是否可以收起弹窗 + closeOnClickOverlay: { + type: Boolean, + default: true + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 0000000..f830291 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-dropdown/props.js b/nk-oa/uni_modules/uview-ui/components/u-dropdown/props.js new file mode 100644 index 0000000..5f8465e --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-dropdown/props.js @@ -0,0 +1,65 @@ +export default { + props: { + // 标题选中时的样式 + activeStyle: { + type: [String, Object], + default: () => ({ + color: '#2979ff', + fontSize: '14px' + }) + }, + // 标题未选中时的样式 + inactiveStyle: { + type: [String, Object], + default: () => ({ + color: '#606266', + fontSize: '14px' + }) + }, + // 点击遮罩是否关闭菜单 + closeOnClickMask: { + type: Boolean, + default: true + }, + // 点击当前激活项标题是否关闭菜单 + closeOnClickSelf: { + type: Boolean, + default: true + }, + // 过渡时间 + duration: { + type: [Number, String], + default: 300 + }, + // 标题菜单的高度 + height: { + type: [Number, String], + default: 40 + }, + // 是否显示下边框 + borderBottom: { + type: Boolean, + default: false + }, + // 标题的字体大小 + titleSize: { + type: [Number, String], + default: 14 + }, + // 下拉出来的内容部分的圆角值 + borderRadius: { + type: [Number, String], + default: 0 + }, + // 菜单右侧的icon图标 + menuIcon: { + type: String, + default: 'arrow-down' + }, + // 菜单右侧图标的大小 + menuIconSize: { + type: [Number, String], + default: 14 + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue b/nk-oa/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue new file mode 100644 index 0000000..f830291 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-empty/props.js b/nk-oa/uni_modules/uview-ui/components/u-empty/props.js new file mode 100644 index 0000000..78662f8 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-empty/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: uni.$u.props.empty.icon + }, + // 提示文字 + text: { + type: String, + default: uni.$u.props.empty.text + }, + // 文字颜色 + textColor: { + type: String, + default: uni.$u.props.empty.textColor + }, + // 文字大小 + textSize: { + type: [String, Number], + default: uni.$u.props.empty.textSize + }, + // 图标的颜色 + iconColor: { + type: String, + default: uni.$u.props.empty.iconColor + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.empty.iconSize + }, + // 选择预置的图标类型 + mode: { + type: String, + default: uni.$u.props.empty.mode + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: uni.$u.props.empty.width + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.empty.height + }, + // 是否显示组件 + show: { + type: Boolean, + default: uni.$u.props.empty.show + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: uni.$u.props.empty.marginTop + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-empty/u-empty.vue b/nk-oa/uni_modules/uview-ui/components/u-empty/u-empty.vue new file mode 100644 index 0000000..03d6a27 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-empty/u-empty.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-form-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-form-item/props.js new file mode 100644 index 0000000..7b16655 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-form-item/props.js @@ -0,0 +1,48 @@ +export default { + props: { + // input的label提示语 + label: { + type: String, + default: uni.$u.props.formItem.label + }, + // 绑定的值 + prop: { + type: String, + default: uni.$u.props.formItem.prop + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [String, Boolean], + default: uni.$u.props.formItem.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: uni.$u.props.formItem.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: uni.$u.props.formItem.labelWidth + }, + // 右侧图标 + rightIcon: { + type: String, + default: uni.$u.props.formItem.rightIcon + }, + // 左侧图标 + leftIcon: { + type: String, + default: uni.$u.props.formItem.leftIcon + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: uni.$u.props.formItem.required + }, + leftIconStyle: { + type: [String, Object], + default: uni.$u.props.formItem.leftIconStyle, + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-form-item/u-form-item.vue b/nk-oa/uni_modules/uview-ui/components/u-form-item/u-form-item.vue new file mode 100644 index 0000000..6aa8d69 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-form-item/u-form-item.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-form/props.js b/nk-oa/uni_modules/uview-ui/components/u-form/props.js new file mode 100644 index 0000000..f2a629c --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-form/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: uni.$u.props.form.model + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: uni.$u.props.form.rules + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: uni.$u.props.form.errorType + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: uni.$u.props.form.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: uni.$u.props.form.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: uni.$u.props.form.labelWidth + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: uni.$u.props.form.labelAlign + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: uni.$u.props.form.labelStyle + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-form/u-form.vue b/nk-oa/uni_modules/uview-ui/components/u-form/u-form.vue new file mode 100644 index 0000000..fe2dde2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-form/u-form.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-gap/props.js b/nk-oa/uni_modules/uview-ui/components/u-gap/props.js new file mode 100644 index 0000000..89953e3 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-gap/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: uni.$u.props.gap.bgColor + }, + // 分割槽高度,单位px(默认30) + height: { + type: [String, Number], + default: uni.$u.props.gap.height + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: uni.$u.props.gap.marginTop + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: uni.$u.props.gap.marginBottom + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-gap/u-gap.vue b/nk-oa/uni_modules/uview-ui/components/u-gap/u-gap.vue new file mode 100644 index 0000000..e4429f0 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-gap/u-gap.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-grid-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-grid-item/props.js new file mode 100644 index 0000000..06c3c66 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-grid-item/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: uni.$u.props.gridItem.name + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.gridItem.bgColor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue b/nk-oa/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue new file mode 100644 index 0000000..fc0c7cf --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-grid/props.js b/nk-oa/uni_modules/uview-ui/components/u-grid/props.js new file mode 100644 index 0000000..87b0f6a --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-grid/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: uni.$u.props.grid.col + }, + // 是否显示边框 + border: { + type: Boolean, + default: uni.$u.props.grid.border + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: uni.$u.props.grid.align + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-grid/u-grid.vue b/nk-oa/uni_modules/uview-ui/components/u-grid/u-grid.vue new file mode 100644 index 0000000..b43cc27 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-grid/u-grid.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-icon/icons.js b/nk-oa/uni_modules/uview-ui/components/u-icon/icons.js new file mode 100644 index 0000000..f4d0fe2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-icon/icons.js @@ -0,0 +1,214 @@ +export default { + 'uicon-level': '\ue693', + 'uicon-column-line': '\ue68e', + 'uicon-checkbox-mark': '\ue807', + 'uicon-folder': '\ue7f5', + 'uicon-movie': '\ue7f6', + 'uicon-star-fill': '\ue669', + 'uicon-star': '\ue65f', + 'uicon-phone-fill': '\ue64f', + 'uicon-phone': '\ue622', + 'uicon-apple-fill': '\ue881', + 'uicon-chrome-circle-fill': '\ue885', + 'uicon-backspace': '\ue67b', + 'uicon-attach': '\ue632', + 'uicon-cut': '\ue948', + 'uicon-empty-car': '\ue602', + 'uicon-empty-coupon': '\ue682', + 'uicon-empty-address': '\ue646', + 'uicon-empty-favor': '\ue67c', + 'uicon-empty-permission': '\ue686', + 'uicon-empty-news': '\ue687', + 'uicon-empty-search': '\ue664', + 'uicon-github-circle-fill': '\ue887', + 'uicon-rmb': '\ue608', + 'uicon-person-delete-fill': '\ue66a', + 'uicon-reload': '\ue788', + 'uicon-order': '\ue68f', + 'uicon-server-man': '\ue6bc', + 'uicon-search': '\ue62a', + 'uicon-fingerprint': '\ue955', + 'uicon-more-dot-fill': '\ue630', + 'uicon-scan': '\ue662', + 'uicon-share-square': '\ue60b', + 'uicon-map': '\ue61d', + 'uicon-map-fill': '\ue64e', + 'uicon-tags': '\ue629', + 'uicon-tags-fill': '\ue651', + 'uicon-bookmark-fill': '\ue63b', + 'uicon-bookmark': '\ue60a', + 'uicon-eye': '\ue613', + 'uicon-eye-fill': '\ue641', + 'uicon-mic': '\ue64a', + 'uicon-mic-off': '\ue649', + 'uicon-calendar': '\ue66e', + 'uicon-calendar-fill': '\ue634', + 'uicon-trash': '\ue623', + 'uicon-trash-fill': '\ue658', + 'uicon-play-left': '\ue66d', + 'uicon-play-right': '\ue610', + 'uicon-minus': '\ue618', + 'uicon-plus': '\ue62d', + 'uicon-info': '\ue653', + 'uicon-info-circle': '\ue7d2', + 'uicon-info-circle-fill': '\ue64b', + 'uicon-question': '\ue715', + 'uicon-error': '\ue6d3', + 'uicon-close': '\ue685', + 'uicon-checkmark': '\ue6a8', + 'uicon-android-circle-fill': '\ue67e', + 'uicon-android-fill': '\ue67d', + 'uicon-ie': '\ue87b', + 'uicon-IE-circle-fill': '\ue889', + 'uicon-google': '\ue87a', + 'uicon-google-circle-fill': '\ue88a', + 'uicon-setting-fill': '\ue872', + 'uicon-setting': '\ue61f', + 'uicon-minus-square-fill': '\ue855', + 'uicon-plus-square-fill': '\ue856', + 'uicon-heart': '\ue7df', + 'uicon-heart-fill': '\ue851', + 'uicon-camera': '\ue7d7', + 'uicon-camera-fill': '\ue870', + 'uicon-more-circle': '\ue63e', + 'uicon-more-circle-fill': '\ue645', + 'uicon-chat': '\ue620', + 'uicon-chat-fill': '\ue61e', + 'uicon-bag-fill': '\ue617', + 'uicon-bag': '\ue619', + 'uicon-error-circle-fill': '\ue62c', + 'uicon-error-circle': '\ue624', + 'uicon-close-circle': '\ue63f', + 'uicon-close-circle-fill': '\ue637', + 'uicon-checkmark-circle': '\ue63d', + 'uicon-checkmark-circle-fill': '\ue635', + 'uicon-question-circle-fill': '\ue666', + 'uicon-question-circle': '\ue625', + 'uicon-share': '\ue631', + 'uicon-share-fill': '\ue65e', + 'uicon-shopping-cart': '\ue621', + 'uicon-shopping-cart-fill': '\ue65d', + 'uicon-bell': '\ue609', + 'uicon-bell-fill': '\ue640', + 'uicon-list': '\ue650', + 'uicon-list-dot': '\ue616', + 'uicon-zhihu': '\ue6ba', + 'uicon-zhihu-circle-fill': '\ue709', + 'uicon-zhifubao': '\ue6b9', + 'uicon-zhifubao-circle-fill': '\ue6b8', + 'uicon-weixin-circle-fill': '\ue6b1', + 'uicon-weixin-fill': '\ue6b2', + 'uicon-twitter-circle-fill': '\ue6ab', + 'uicon-twitter': '\ue6aa', + 'uicon-taobao-circle-fill': '\ue6a7', + 'uicon-taobao': '\ue6a6', + 'uicon-weibo-circle-fill': '\ue6a5', + 'uicon-weibo': '\ue6a4', + 'uicon-qq-fill': '\ue6a1', + 'uicon-qq-circle-fill': '\ue6a0', + 'uicon-moments-circel-fill': '\ue69a', + 'uicon-moments': '\ue69b', + 'uicon-qzone': '\ue695', + 'uicon-qzone-circle-fill': '\ue696', + 'uicon-baidu-circle-fill': '\ue680', + 'uicon-baidu': '\ue681', + 'uicon-facebook-circle-fill': '\ue68a', + 'uicon-facebook': '\ue689', + 'uicon-car': '\ue60c', + 'uicon-car-fill': '\ue636', + 'uicon-warning-fill': '\ue64d', + 'uicon-warning': '\ue694', + 'uicon-clock-fill': '\ue638', + 'uicon-clock': '\ue60f', + 'uicon-edit-pen': '\ue612', + 'uicon-edit-pen-fill': '\ue66b', + 'uicon-email': '\ue611', + 'uicon-email-fill': '\ue642', + 'uicon-minus-circle': '\ue61b', + 'uicon-minus-circle-fill': '\ue652', + 'uicon-plus-circle': '\ue62e', + 'uicon-plus-circle-fill': '\ue661', + 'uicon-file-text': '\ue663', + 'uicon-file-text-fill': '\ue665', + 'uicon-pushpin': '\ue7e3', + 'uicon-pushpin-fill': '\ue86e', + 'uicon-grid': '\ue673', + 'uicon-grid-fill': '\ue678', + 'uicon-play-circle': '\ue647', + 'uicon-play-circle-fill': '\ue655', + 'uicon-pause-circle-fill': '\ue654', + 'uicon-pause': '\ue8fa', + 'uicon-pause-circle': '\ue643', + 'uicon-eye-off': '\ue648', + 'uicon-eye-off-outline': '\ue62b', + 'uicon-gift-fill': '\ue65c', + 'uicon-gift': '\ue65b', + 'uicon-rmb-circle-fill': '\ue657', + 'uicon-rmb-circle': '\ue677', + 'uicon-kefu-ermai': '\ue656', + 'uicon-server-fill': '\ue751', + 'uicon-coupon-fill': '\ue8c4', + 'uicon-coupon': '\ue8ae', + 'uicon-integral': '\ue704', + 'uicon-integral-fill': '\ue703', + 'uicon-home-fill': '\ue964', + 'uicon-home': '\ue965', + 'uicon-hourglass-half-fill': '\ue966', + 'uicon-hourglass': '\ue967', + 'uicon-account': '\ue628', + 'uicon-plus-people-fill': '\ue626', + 'uicon-minus-people-fill': '\ue615', + 'uicon-account-fill': '\ue614', + 'uicon-thumb-down-fill': '\ue726', + 'uicon-thumb-down': '\ue727', + 'uicon-thumb-up': '\ue733', + 'uicon-thumb-up-fill': '\ue72f', + 'uicon-lock-fill': '\ue979', + 'uicon-lock-open': '\ue973', + 'uicon-lock-opened-fill': '\ue974', + 'uicon-lock': '\ue97a', + 'uicon-red-packet-fill': '\ue690', + 'uicon-photo-fill': '\ue98b', + 'uicon-photo': '\ue98d', + 'uicon-volume-off-fill': '\ue659', + 'uicon-volume-off': '\ue644', + 'uicon-volume-fill': '\ue670', + 'uicon-volume': '\ue633', + 'uicon-red-packet': '\ue691', + 'uicon-download': '\ue63c', + 'uicon-arrow-up-fill': '\ue6b0', + 'uicon-arrow-down-fill': '\ue600', + 'uicon-play-left-fill': '\ue675', + 'uicon-play-right-fill': '\ue676', + 'uicon-rewind-left-fill': '\ue679', + 'uicon-rewind-right-fill': '\ue67a', + 'uicon-arrow-downward': '\ue604', + 'uicon-arrow-leftward': '\ue601', + 'uicon-arrow-rightward': '\ue603', + 'uicon-arrow-upward': '\ue607', + 'uicon-arrow-down': '\ue60d', + 'uicon-arrow-right': '\ue605', + 'uicon-arrow-left': '\ue60e', + 'uicon-arrow-up': '\ue606', + 'uicon-skip-back-left': '\ue674', + 'uicon-skip-forward-right': '\ue672', + 'uicon-rewind-right': '\ue66f', + 'uicon-rewind-left': '\ue671', + 'uicon-arrow-right-double': '\ue68d', + 'uicon-arrow-left-double': '\ue68c', + 'uicon-wifi-off': '\ue668', + 'uicon-wifi': '\ue667', + 'uicon-empty-data': '\ue62f', + 'uicon-empty-history': '\ue684', + 'uicon-empty-list': '\ue68b', + 'uicon-empty-page': '\ue627', + 'uicon-empty-order': '\ue639', + 'uicon-man': '\ue697', + 'uicon-woman': '\ue69c', + 'uicon-man-add': '\ue61c', + 'uicon-man-add-fill': '\ue64c', + 'uicon-man-delete': '\ue61a', + 'uicon-man-delete-fill': '\ue66a', + 'uicon-zh': '\ue70a', + 'uicon-en': '\ue692' +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-icon/props.js b/nk-oa/uni_modules/uview-ui/components/u-icon/props.js new file mode 100644 index 0000000..71845b7 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-icon/props.js @@ -0,0 +1,89 @@ +export default { + props: { + // 图标类名 + name: { + type: String, + default: uni.$u.props.icon.name + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: uni.$u.props.icon.color + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: uni.$u.props.icon.size + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: uni.$u.props.icon.bold + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: uni.$u.props.icon.index + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: uni.$u.props.icon.hoverClass + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: uni.$u.props.icon.customPrefix + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: uni.$u.props.icon.label + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: uni.$u.props.icon.labelPos + }, + // label的大小 + labelSize: { + type: [String, Number], + default: uni.$u.props.icon.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: uni.$u.props.icon.labelColor + }, + // label与图标的距离 + space: { + type: [String, Number], + default: uni.$u.props.icon.space + }, + // 图片的mode + imgMode: { + type: String, + default: uni.$u.props.icon.imgMode + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: uni.$u.props.icon.width + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: uni.$u.props.icon.height + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: uni.$u.props.icon.top + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: uni.$u.props.icon.stop + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-icon/u-icon.vue b/nk-oa/uni_modules/uview-ui/components/u-icon/u-icon.vue new file mode 100644 index 0000000..9340328 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-icon/u-icon.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-image/props.js b/nk-oa/uni_modules/uview-ui/components/u-image/props.js new file mode 100644 index 0000000..2eabb74 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-image/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 图片地址 + src: { + type: String, + default: uni.$u.props.image.src + }, + // 裁剪模式 + mode: { + type: String, + default: uni.$u.props.image.mode + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: uni.$u.props.image.width + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: uni.$u.props.image.height + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: uni.$u.props.image.radius + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: uni.$u.props.image.lazyLoad + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: uni.$u.props.image.showMenuByLongpress + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: uni.$u.props.image.loadingIcon + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: uni.$u.props.image.errorIcon + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: uni.$u.props.image.showLoading + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: uni.$u.props.image.showError + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: uni.$u.props.image.fade + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: uni.$u.props.image.webp + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.image.duration + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: uni.$u.props.image.bgColor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-image/u-image.vue b/nk-oa/uni_modules/uview-ui/components/u-image/u-image.vue new file mode 100644 index 0000000..473e35b --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-image/u-image.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-anchor/props.js b/nk-oa/uni_modules/uview-ui/components/u-index-anchor/props.js new file mode 100644 index 0000000..6d8b59a --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-anchor/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: uni.$u.props.indexAnchor.text + }, + // 列表锚点文字颜色 + color: { + type: String, + default: uni.$u.props.indexAnchor.color + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: uni.$u.props.indexAnchor.size + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: uni.$u.props.indexAnchor.bgColor + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: uni.$u.props.indexAnchor.height + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue b/nk-oa/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue new file mode 100644 index 0000000..b95ddef --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-index-item/props.js new file mode 100644 index 0000000..7c11331 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-item/props.js @@ -0,0 +1,5 @@ +export default { + props: { + + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-item/u-index-item.vue b/nk-oa/uni_modules/uview-ui/components/u-index-item/u-index-item.vue new file mode 100644 index 0000000..0bc7fb3 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-item/u-index-item.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-list/props.js b/nk-oa/uni_modules/uview-ui/components/u-index-list/props.js new file mode 100644 index 0000000..354d459 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-list/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.indexList.inactiveColor + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: uni.$u.props.indexList.activeColor + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: uni.$u.props.indexList.indexList + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: uni.$u.props.indexList.sticky + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: uni.$u.props.indexList.customNavHeight + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-index-list/u-index-list.vue b/nk-oa/uni_modules/uview-ui/components/u-index-list/u-index-list.vue new file mode 100644 index 0000000..d712618 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-index-list/u-index-list.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-input/props.js b/nk-oa/uni_modules/uview-ui/components/u-input/props.js new file mode 100644 index 0000000..2c50870 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-input/props.js @@ -0,0 +1,187 @@ +export default { + props: { + // 输入的值 + value: { + type: [String, Number], + default: uni.$u.props.input.value + }, + // 输入框类型 + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: uni.$u.props.input.type + }, + // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true, + // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 + fixed: { + type: Boolean, + default: uni.$u.props.input.fixed + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: uni.$u.props.input.disabled + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: uni.$u.props.input.disabledColor + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: uni.$u.props.input.clearable + }, + // 是否密码类型 + password: { + type: Boolean, + default: uni.$u.props.input.password + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: uni.$u.props.input.maxlength + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: uni.$u.props.input.placeholder + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: uni.$u.props.input.placeholderClass + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: uni.$u.props.input.placeholderStyle + }, + // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 + showWordLimit: { + type: Boolean, + default: uni.$u.props.input.showWordLimit + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: uni.$u.props.input.confirmType + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: uni.$u.props.input.confirmHold + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: uni.$u.props.input.holdKeyboard + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: uni.$u.props.input.focus + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: uni.$u.props.input.autoBlur + }, + // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 + disableDefaultPadding: { + type: Boolean, + default: uni.$u.props.input.disableDefaultPadding + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: uni.$u.props.input.cursor + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: uni.$u.props.input.cursorSpacing + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: uni.$u.props.input.selectionStart + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: uni.$u.props.input.selectionEnd + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: uni.$u.props.input.adjustPosition + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: uni.$u.props.input.inputAlign + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.input.fontSize + }, + // 输入框字体颜色 + color: { + type: String, + default: uni.$u.props.input.color + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: uni.$u.props.input.prefixIcon + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: uni.$u.props.input.prefixIconStyle + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: uni.$u.props.input.suffixIcon + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: uni.$u.props.input.suffixIconStyle + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: uni.$u.props.input.border + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: uni.$u.props.input.readonly + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.input.shape + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: uni.$u.props.input.formatter + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-input/u-input.vue b/nk-oa/uni_modules/uview-ui/components/u-input/u-input.vue new file mode 100644 index 0000000..30073eb --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-input/u-input.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-keyboard/props.js b/nk-oa/uni_modules/uview-ui/components/u-keyboard/props.js new file mode 100644 index 0000000..cfdb00a --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-keyboard/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: uni.$u.props.keyboard.mode + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: uni.$u.props.keyboard.dotDisabled + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: uni.$u.props.keyboard.tooltip + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: uni.$u.props.keyboard.showTips + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: uni.$u.props.keyboard.tips + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: uni.$u.props.keyboard.showCancel + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: uni.$u.props.keyboard.showConfirm + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: uni.$u.props.keyboard.random + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: uni.$u.props.keyboard.safeAreaInsetBottom + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.keyboard.closeOnClickOverlay + }, + // 控制键盘的弹出与收起 + show: { + type: Boolean, + default: uni.$u.props.keyboard.show + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: uni.$u.props.keyboard.overlay + }, + // z-index值 + zIndex: { + type: [String, Number], + default: uni.$u.props.keyboard.zIndex + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: uni.$u.props.keyboard.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.keyboard.confirmText + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: uni.$u.props.keyboard.autoChange + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue b/nk-oa/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue new file mode 100644 index 0000000..14228cb --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-line-progress/props.js b/nk-oa/uni_modules/uview-ui/components/u-line-progress/props.js new file mode 100644 index 0000000..a4210bd --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-line-progress/props.js @@ -0,0 +1,28 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: uni.$u.props.lineProgress.activeColor + }, + inactiveColor: { + type: String, + default: uni.$u.props.lineProgress.color + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: uni.$u.props.lineProgress.inactiveColor + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: uni.$u.props.lineProgress.showText + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.lineProgress.height + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue b/nk-oa/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue new file mode 100644 index 0000000..4e27931 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-line/props.js b/nk-oa/uni_modules/uview-ui/components/u-line/props.js new file mode 100644 index 0000000..2308cc3 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-line/props.js @@ -0,0 +1,33 @@ +export default { + props: { + color: { + type: String, + default: uni.$u.props.line.color + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: uni.$u.props.line.length + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: uni.$u.props.line.direction + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: uni.$u.props.line.hairline + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: uni.$u.props.line.margin + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: uni.$u.props.line.dashed + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-line/u-line.vue b/nk-oa/uni_modules/uview-ui/components/u-line/u-line.vue new file mode 100644 index 0000000..e0a6d92 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-line/u-line.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-link/props.js b/nk-oa/uni_modules/uview-ui/components/u-link/props.js new file mode 100644 index 0000000..d39353f --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-link/props.js @@ -0,0 +1,39 @@ +export default { + props: { + // 文字颜色 + color: { + type: String, + default: uni.$u.props.link.color + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: uni.$u.props.link.fontSize + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: uni.$u.props.link.underLine + }, + // 要跳转的链接 + href: { + type: String, + default: uni.$u.props.link.href + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: uni.$u.props.link.mpTips + }, + // 下划线颜色 + lineColor: { + type: String, + default: uni.$u.props.link.lineColor + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: uni.$u.props.link.text + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-link/u-link.vue b/nk-oa/uni_modules/uview-ui/components/u-link/u-link.vue new file mode 100644 index 0000000..c6802a5 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-link/u-link.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-list-item/props.js b/nk-oa/uni_modules/uview-ui/components/u-list-item/props.js new file mode 100644 index 0000000..58ddc49 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-list-item/props.js @@ -0,0 +1,9 @@ +export default { + props: { + // 用于滚动到指定item + anchor: { + type: [String, Number], + default: uni.$u.props.listItem.anchor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-list-item/u-list-item.vue b/nk-oa/uni_modules/uview-ui/components/u-list-item/u-list-item.vue new file mode 100644 index 0000000..1a25db6 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-list-item/u-list-item.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-list/props.js b/nk-oa/uni_modules/uview-ui/components/u-list/props.js new file mode 100644 index 0000000..25406f4 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-list/props.js @@ -0,0 +1,76 @@ +export default { + props: { + // 控制是否出现滚动条,仅nvue有效 + showScrollbar: { + type: Boolean, + default: uni.$u.props.list.showScrollbar + }, + // 距底部多少时触发scrolltolower事件 + lowerThreshold: { + type: [String, Number], + default: uni.$u.props.list.lowerThreshold + }, + // 距顶部多少时触发scrolltoupper事件,非nvue有效 + upperThreshold: { + type: [String, Number], + default: uni.$u.props.list.upperThreshold + }, + // 设置竖向滚动条位置 + scrollTop: { + type: [String, Number], + default: uni.$u.props.list.scrollTop + }, + // 控制 onscroll 事件触发的频率,仅nvue有效 + offsetAccuracy: { + type: [String, Number], + default: uni.$u.props.list.offsetAccuracy + }, + // 启用 flexbox 布局。开启后,当前节点声明了display: flex就会成为flex container,并作用于其孩子节点,仅微信小程序有效 + enableFlex: { + type: Boolean, + default: uni.$u.props.list.enableFlex + }, + // 是否按分页模式显示List,默认值false + pagingEnabled: { + type: Boolean, + default: uni.$u.props.list.pagingEnabled + }, + // 是否允许List滚动 + scrollable: { + type: Boolean, + default: uni.$u.props.list.scrollable + }, + // 值应为某子元素id(id不能以数字开头) + scrollIntoView: { + type: String, + default: uni.$u.props.list.scrollIntoView + }, + // 在设置滚动条位置时使用动画过渡 + scrollWithAnimation: { + type: Boolean, + default: uni.$u.props.list.scrollWithAnimation + }, + // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只对微信小程序有效 + enableBackToTop: { + type: Boolean, + default: uni.$u.props.list.enableBackToTop + }, + // 列表的高度 + height: { + type: [String, Number], + default: uni.$u.props.list.height + }, + // 列表宽度 + width: { + type: [String, Number], + default: uni.$u.props.list.width + }, + // 列表前后预渲染的屏数,1代表一个屏幕的高度,1.5代表1个半屏幕高度 + preLoadScreen: { + type: [String, Number], + default: uni.$u.props.list.preLoadScreen + } + // vue下,是否开启虚拟列表 + + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-list/u-list.vue b/nk-oa/uni_modules/uview-ui/components/u-list/u-list.vue new file mode 100644 index 0000000..4447cab --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-list/u-list.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-loading-icon/props.js b/nk-oa/uni_modules/uview-ui/components/u-loading-icon/props.js new file mode 100644 index 0000000..c35524e --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loading-icon/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 是否显示组件 + show: { + type: Boolean, + default: uni.$u.props.loadingIcon.show + }, + // 颜色 + color: { + type: String, + default: uni.$u.props.loadingIcon.color + }, + // 提示文字颜色 + textColor: { + type: String, + default: uni.$u.props.loadingIcon.textColor + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: uni.$u.props.loadingIcon.vertical + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: uni.$u.props.loadingIcon.mode + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: uni.$u.props.loadingIcon.size + }, + // 文字大小 + textSize: { + type: [String, Number], + default: uni.$u.props.loadingIcon.textSize + }, + // 文字内容 + text: { + type: [String, Number], + default: uni.$u.props.loadingIcon.text + }, + // 动画模式 + timingFunction: { + type: String, + default: uni.$u.props.loadingIcon.timingFunction + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: uni.$u.props.loadingIcon.duration + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: uni.$u.props.loadingIcon.inactiveColor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue b/nk-oa/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue new file mode 100644 index 0000000..2ede5c3 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue @@ -0,0 +1,343 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-loading-page/props.js b/nk-oa/uni_modules/uview-ui/components/u-loading-page/props.js new file mode 100644 index 0000000..e239b61 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loading-page/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: uni.$u.props.loadingPage.loadingText + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: uni.$u.props.loadingPage.image + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: uni.$u.props.loadingPage.loadingMode + }, + // 是否加载中 + loading: { + type: Boolean, + default: uni.$u.props.loadingPage.loading + }, + // 背景色 + bgColor: { + type: String, + default: uni.$u.props.loadingPage.bgColor + }, + // 文字颜色 + color: { + type: String, + default: uni.$u.props.loadingPage.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.loadingPage.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.loadingPage.fontSize + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: uni.$u.props.loadingPage.loadingColor + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue b/nk-oa/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue new file mode 100644 index 0000000..03a78ad --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-loadmore/props.js b/nk-oa/uni_modules/uview-ui/components/u-loadmore/props.js new file mode 100644 index 0000000..1e67d89 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loadmore/props.js @@ -0,0 +1,94 @@ +export default { + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: uni.$u.props.loadmore.status + }, + // 组件背景色 + bgColor: { + type: String, + default: uni.$u.props.loadmore.bgColor + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: uni.$u.props.loadmore.icon + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.loadmore.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.loadmore.iconSize + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.loadmore.color + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: uni.$u.props.loadmore.loadingIcon + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: uni.$u.props.loadmore.loadmoreText + }, + // 加载中提示语 + loadingText: { + type: String, + default: uni.$u.props.loadmore.loadingText + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: uni.$u.props.loadmore.nomoreText + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: uni.$u.props.loadmore.isDot + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: uni.$u.props.loadmore.iconColor + }, + // 上边距 + marginTop: { + type: [String, Number], + default: uni.$u.props.loadmore.marginTop + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: uni.$u.props.loadmore.marginBottom + }, + // 高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.loadmore.height + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: uni.$u.props.loadmore.line + }, + // 线条颜色 + lineColor: { + type: String, + default: uni.$u.props.loadmore.lineColor + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: uni.$u.props.loadmore.dashed + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue b/nk-oa/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue new file mode 100644 index 0000000..73c79fe --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-modal/props.js b/nk-oa/uni_modules/uview-ui/components/u-modal/props.js new file mode 100644 index 0000000..f76672c --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-modal/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 是否展示modal + show: { + type: Boolean, + default: uni.$u.props.modal.show + }, + // 标题 + title: { + type: [String], + default: uni.$u.props.modal.title + }, + // 弹窗内容 + content: { + type: String, + default: uni.$u.props.modal.content + }, + // 确认文案 + confirmText: { + type: String, + default: uni.$u.props.modal.confirmText + }, + // 取消文案 + cancelText: { + type: String, + default: uni.$u.props.modal.cancelText + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: uni.$u.props.modal.showConfirmButton + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: uni.$u.props.modal.showCancelButton + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: uni.$u.props.modal.confirmColor + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: uni.$u.props.modal.cancelColor + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: uni.$u.props.modal.buttonReverse + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: uni.$u.props.modal.zoom + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: uni.$u.props.modal.asyncClose + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.modal.closeOnClickOverlay + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: uni.$u.props.modal.negativeTop + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: uni.$u.props.modal.width + }, + // 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮 + confirmButtonShape: { + type: String, + default: uni.$u.props.modal.confirmButtonShape + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-modal/u-modal.vue b/nk-oa/uni_modules/uview-ui/components/u-modal/u-modal.vue new file mode 100644 index 0000000..2cbc737 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-modal/u-modal.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-navbar/props.js b/nk-oa/uni_modules/uview-ui/components/u-navbar/props.js new file mode 100644 index 0000000..5398de2 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-navbar/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: uni.$u.props.navbar.safeAreaInsetTop + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: uni.$u.props.navbar.placeholder + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: uni.$u.props.navbar.fixed + }, + // 是否显示下边框 + border: { + type: Boolean, + default: uni.$u.props.navbar.border + }, + // 左边的图标 + leftIcon: { + type: String, + default: uni.$u.props.navbar.leftIcon + }, + // 左边的提示文字 + leftText: { + type: String, + default: uni.$u.props.navbar.leftText + }, + // 左右的提示文字 + rightText: { + type: String, + default: uni.$u.props.navbar.rightText + }, + // 右边的图标 + rightIcon: { + type: String, + default: uni.$u.props.navbar.rightIcon + }, + // 标题 + title: { + type: [String, Number], + default: uni.$u.props.navbar.title + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.navbar.bgColor + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: uni.$u.props.navbar.titleWidth + }, + // 导航栏高度 + height: { + type: [String, Number], + default: uni.$u.props.navbar.height + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: uni.$u.props.navbar.leftIconSize + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: uni.$u.props.navbar.leftIconColor + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: uni.$u.props.navbar.autoBack + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: uni.$u.props.navbar.titleStyle + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-navbar/u-navbar.vue b/nk-oa/uni_modules/uview-ui/components/u-navbar/u-navbar.vue new file mode 100644 index 0000000..2b206b7 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-navbar/u-navbar.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-no-network/props.js b/nk-oa/uni_modules/uview-ui/components/u-no-network/props.js new file mode 100644 index 0000000..9f3af62 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-no-network/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 页面文字提示 + tips: { + type: String, + default: uni.$u.props.noNetwork.tips + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: uni.$u.props.noNetwork.zIndex + }, + // image 没有网络的图片提示 + image: { + type: String, + default: uni.$u.props.noNetwork.image + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-no-network/u-no-network.vue b/nk-oa/uni_modules/uview-ui/components/u-no-network/u-no-network.vue new file mode 100644 index 0000000..9710729 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-no-network/u-no-network.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-notice-bar/props.js b/nk-oa/uni_modules/uview-ui/components/u-notice-bar/props.js new file mode 100644 index 0000000..7040c29 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-notice-bar/props.js @@ -0,0 +1,70 @@ +export default { + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: uni.$u.props.noticeBar.text + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: uni.$u.props.noticeBar.direction + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: uni.$u.props.noticeBar.step + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: uni.$u.props.noticeBar.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: uni.$u.props.noticeBar.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: uni.$u.props.noticeBar.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.noticeBar.bgColor + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: uni.$u.props.noticeBar.speed + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.noticeBar.fontSize + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.noticeBar.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: uni.$u.props.noticeBar.disableTouch + }, + // 跳转的页面路径 + url: { + type: String, + default: uni.$u.props.noticeBar.url + }, + // 页面跳转的类型 + linkType: { + type: String, + default: uni.$u.props.noticeBar.linkType + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue b/nk-oa/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue new file mode 100644 index 0000000..a06eb39 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue @@ -0,0 +1,101 @@ + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-notify/props.js b/nk-oa/uni_modules/uview-ui/components/u-notify/props.js new file mode 100644 index 0000000..57a9d71 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-notify/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: uni.$u.props.notify.top + }, + // 是否展示组件 + // show: { + // type: Boolean, + // default: uni.$u.props.notify.show + // }, + // type主题,primary,success,warning,error + type: { + type: String, + default: uni.$u.props.notify.type + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.notify.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.notify.bgColor + }, + // 展示的文字内容 + message: { + type: String, + default: uni.$u.props.notify.message + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.notify.duration + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.notify.fontSize + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: uni.$u.props.notify.safeAreaInsetTop + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-notify/u-notify.vue b/nk-oa/uni_modules/uview-ui/components/u-notify/u-notify.vue new file mode 100644 index 0000000..30adb72 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-notify/u-notify.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-number-box/props.js b/nk-oa/uni_modules/uview-ui/components/u-number-box/props.js new file mode 100644 index 0000000..fb0fa94 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-number-box/props.js @@ -0,0 +1,109 @@ +export default { + props: { + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: uni.$u.props.numberBox.name + }, + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + value: { + type: [String, Number], + default: uni.$u.props.numberBox.value + }, + // 最小值 + min: { + type: [String, Number], + default: uni.$u.props.numberBox.min + }, + // 最大值 + max: { + type: [String, Number], + default: uni.$u.props.numberBox.max + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: uni.$u.props.numberBox.step + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: uni.$u.props.numberBox.integer + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: uni.$u.props.numberBox.disabled + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: uni.$u.props.numberBox.disabledInput + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: uni.$u.props.numberBox.asyncChange + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: uni.$u.props.numberBox.inputWidth + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: uni.$u.props.numberBox.showMinus + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: uni.$u.props.numberBox.showPlus + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: uni.$u.props.numberBox.decimalLength + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: uni.$u.props.numberBox.longPress + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: uni.$u.props.numberBox.color + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: uni.$u.props.numberBox.buttonSize + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: uni.$u.props.numberBox.bgColor + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: uni.$u.props.numberBox.cursorSpacing + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: uni.$u.props.numberBox.disablePlus + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: uni.$u.props.numberBox.disableMinus + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: uni.$u.props.numberBox.iconStyle + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-number-box/u-number-box.vue b/nk-oa/uni_modules/uview-ui/components/u-number-box/u-number-box.vue new file mode 100644 index 0000000..69211c5 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-number-box/u-number-box.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/props.js b/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/props.js new file mode 100644 index 0000000..5e3bf55 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: uni.$u.props.numberKeyboard.value + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: uni.$u.props.numberKeyboard.dotDisabled + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: uni.$u.props.numberKeyboard.random + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue b/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue new file mode 100644 index 0000000..4f505c6 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-overlay/props.js b/nk-oa/uni_modules/uview-ui/components/u-overlay/props.js new file mode 100644 index 0000000..e6974df --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-overlay/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: uni.$u.props.overlay.show + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: uni.$u.props.overlay.zIndex + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: uni.$u.props.overlay.duration + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: uni.$u.props.overlay.opacity + } + } +} diff --git a/nk-oa/uni_modules/uview-ui/components/u-overlay/u-overlay.vue b/nk-oa/uni_modules/uview-ui/components/u-overlay/u-overlay.vue new file mode 100644 index 0000000..92de4e9 --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-overlay/u-overlay.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/nk-oa/uni_modules/uview-ui/components/u-parse/node/node.vue b/nk-oa/uni_modules/uview-ui/components/u-parse/node/node.vue new file mode 100644 index 0000000..73e30fd --- /dev/null +++ b/nk-oa/uni_modules/uview-ui/components/u-parse/node/node.vue @@ -0,0 +1,499 @@ +