├── App.vue
├── README.md
├── app.config.js
├── common
├── css
│ ├── app.scss
│ └── uni.scss
├── function
│ └── myPubFunction.js
└── scss
│ └── common.scss
├── components
├── comment
│ └── zjs-comment.vue
├── uni-fab
│ └── uni-fab.vue
└── watch-login
│ ├── css
│ └── icon.css
│ ├── watch-button.vue
│ └── watch-input.vue
├── js_sdk
└── u-charts
│ ├── component.vue
│ ├── u-charts.js
│ └── u-charts.min.js
├── main.js
├── manifest.json
├── package.json
├── pages.json
├── pages
├── archives
│ └── archives.vue
├── firendCircle
│ └── firendCircle.vue
├── index
│ └── index.vue
├── login
│ ├── css
│ │ └── main.css
│ ├── login.vue
│ └── register.vue
└── my
│ └── my.vue
├── static
└── img
│ ├── find.png
│ ├── findActive.png
│ ├── guidang.png
│ ├── guidangActive.png
│ ├── home.png
│ ├── homeActive.png
│ ├── my.png
│ └── myActive.png
├── store
├── index.js
└── modules
│ ├── $app.js
│ └── $user.js
├── subPackages
├── archivesSelect
│ └── archivesSelect.vue
├── articleDetail
│ └── articleDetail.vue
├── comment
│ ├── index.vue
│ └── reply.vue
├── editUser
│ └── editUser.vue
├── error
│ └── 404
│ │ └── 404.vue
├── releaseFirendCircle
│ └── releaseFirendCircle.vue
├── search
│ └── search.vue
└── tags
│ └── tags.vue
├── template.h5.html
├── uni.scss
├── uniCloud-aliyun
├── cloudfunctions
│ └── router
│ │ ├── config.js
│ │ ├── dao
│ │ ├── index.js
│ │ └── modules
│ │ │ └── userDao.js
│ │ ├── index.js
│ │ ├── middleware
│ │ ├── index.js
│ │ └── modules
│ │ │ ├── customFilter1.js
│ │ │ ├── customFilter2.js
│ │ │ └── returnUserInfoFilter.js
│ │ ├── package.json
│ │ ├── router.param.json
│ │ ├── service
│ │ ├── admin
│ │ │ ├── article
│ │ │ │ └── sys
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── getCategoryAndTag.js
│ │ │ │ │ ├── getCountByMonth.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ └── update.js
│ │ │ ├── category
│ │ │ │ └── sys
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ └── update.js
│ │ │ ├── comment
│ │ │ │ └── sys
│ │ │ │ │ ├── delete.js
│ │ │ │ │ └── getList.js
│ │ │ ├── dashboard
│ │ │ │ └── sys
│ │ │ │ │ ├── getAllCount.js
│ │ │ │ │ └── getAllCountByMonth.js
│ │ │ ├── friend
│ │ │ │ └── sys
│ │ │ │ │ ├── delete.js
│ │ │ │ │ └── getList.js
│ │ │ ├── select
│ │ │ │ └── kh
│ │ │ │ │ └── user.js
│ │ │ ├── system
│ │ │ │ ├── app
│ │ │ │ │ ├── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getInfo.js
│ │ │ │ │ │ ├── getList.js
│ │ │ │ │ │ └── update.js
│ │ │ │ │ └── util
│ │ │ │ │ │ └── formRules.js
│ │ │ │ ├── menu
│ │ │ │ │ ├── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── adds.js
│ │ │ │ │ │ ├── bindPermission.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getAll.js
│ │ │ │ │ │ ├── getCascader.js
│ │ │ │ │ │ └── update.js
│ │ │ │ │ └── util
│ │ │ │ │ │ └── formRules.js
│ │ │ │ ├── permission
│ │ │ │ │ ├── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getAll.js
│ │ │ │ │ │ ├── update.js
│ │ │ │ │ │ ├── updateCategory.js
│ │ │ │ │ │ └── updateLevel.js
│ │ │ │ │ └── util
│ │ │ │ │ │ └── formRules.js
│ │ │ │ ├── role
│ │ │ │ │ ├── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── bindMenu.js
│ │ │ │ │ │ ├── bindPermission.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getList.js
│ │ │ │ │ │ └── update.js
│ │ │ │ │ └── util
│ │ │ │ │ │ └── formRules.js
│ │ │ │ └── user
│ │ │ │ │ ├── sys
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── batchUpdateAppLogin.js
│ │ │ │ │ ├── batchUpdateInviterUid.js
│ │ │ │ │ ├── batchUpdateStatus.js
│ │ │ │ │ ├── bindRole.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ ├── resetPassword.js
│ │ │ │ │ └── update.js
│ │ │ │ │ └── util
│ │ │ │ │ └── formRules.js
│ │ │ ├── system_uni
│ │ │ │ ├── admin-log
│ │ │ │ │ └── sys
│ │ │ │ │ │ └── getList.js
│ │ │ │ ├── components-dynamic
│ │ │ │ │ └── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getList.js
│ │ │ │ │ │ └── update.js
│ │ │ │ ├── global-data
│ │ │ │ │ ├── sys
│ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getList.js
│ │ │ │ │ │ └── update.js
│ │ │ │ │ └── util
│ │ │ │ │ │ └── formRules.js
│ │ │ │ ├── uni-id-files
│ │ │ │ │ ├── categories
│ │ │ │ │ │ ├── kh
│ │ │ │ │ │ │ └── getList.js
│ │ │ │ │ │ └── sys
│ │ │ │ │ │ │ ├── add.js
│ │ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ │ └── update.js
│ │ │ │ │ └── files
│ │ │ │ │ │ └── kh
│ │ │ │ │ │ ├── delete.js
│ │ │ │ │ │ ├── getList.js
│ │ │ │ │ │ └── update.js
│ │ │ │ └── uni-id-log
│ │ │ │ │ └── sys
│ │ │ │ │ └── getList.js
│ │ │ ├── tag
│ │ │ │ └── sys
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ └── update.js
│ │ │ └── user
│ │ │ │ ├── pub
│ │ │ │ └── test.js
│ │ │ │ └── sys
│ │ │ │ └── test.js
│ │ ├── client
│ │ │ ├── article
│ │ │ │ └── kh
│ │ │ │ │ └── getList.js
│ │ │ ├── comment
│ │ │ │ └── kh
│ │ │ │ │ ├── addComment.js
│ │ │ │ │ ├── getComment.js
│ │ │ │ │ └── updateComment.js
│ │ │ ├── friendCircle
│ │ │ │ └── kh
│ │ │ │ │ ├── addFriendCircle.js
│ │ │ │ │ ├── addFriendComment.js
│ │ │ │ │ ├── addFriendLike.js
│ │ │ │ │ └── getFriendList.js
│ │ │ ├── reply
│ │ │ │ └── kh
│ │ │ │ │ └── addReply.js
│ │ │ └── tag
│ │ │ │ └── kh
│ │ │ │ └── tagCoutByName.js
│ │ ├── plugs
│ │ │ └── components_dynamic
│ │ │ │ └── client
│ │ │ │ └── pub
│ │ │ │ ├── getComponentsDynamicData.js
│ │ │ │ ├── init.js
│ │ │ │ └── update.js
│ │ ├── template
│ │ │ ├── db_api
│ │ │ │ ├── pub
│ │ │ │ │ ├── Promise.all.js
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── adds.js
│ │ │ │ │ ├── avg.js
│ │ │ │ │ ├── count.js
│ │ │ │ │ ├── del.js
│ │ │ │ │ ├── deleteById.js
│ │ │ │ │ ├── findById.js
│ │ │ │ │ ├── findByWhereJson.js
│ │ │ │ │ ├── geo.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ ├── groupCount.js
│ │ │ │ │ ├── max.js
│ │ │ │ │ ├── min.js
│ │ │ │ │ ├── sample.js
│ │ │ │ │ ├── select.js
│ │ │ │ │ ├── select2.js
│ │ │ │ │ ├── selects.js
│ │ │ │ │ ├── selects_geo.js
│ │ │ │ │ ├── selects_getOne.js
│ │ │ │ │ ├── selects_mode_2.js
│ │ │ │ │ ├── selects_mode_3.js
│ │ │ │ │ ├── sum.js
│ │ │ │ │ ├── update.js
│ │ │ │ │ ├── updateAndReturn.js
│ │ │ │ │ └── updateById.js
│ │ │ │ └── sys
│ │ │ │ │ ├── add.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── getList.js
│ │ │ │ │ └── update.js
│ │ │ ├── openapi
│ │ │ │ └── weixin
│ │ │ │ │ └── pub
│ │ │ │ │ ├── imgSecCheck.js
│ │ │ │ │ ├── msgSecCheck.js
│ │ │ │ │ └── sendMessage.js
│ │ │ └── test
│ │ │ │ ├── pub
│ │ │ │ ├── addition.js
│ │ │ │ ├── findGoodsInfo.js
│ │ │ │ └── temporaryCache.js
│ │ │ │ └── sys
│ │ │ │ └── test.js
│ │ └── user
│ │ │ ├── kh
│ │ │ ├── acceptInvite.js
│ │ │ ├── addUploadRecord.js
│ │ │ ├── bindAlipay.js
│ │ │ ├── bindEmail.js
│ │ │ ├── bindMobile.js
│ │ │ ├── bindNewEmail.js
│ │ │ ├── bindNewMobile.js
│ │ │ ├── bindQQ.js
│ │ │ ├── bindWeixin.js
│ │ │ ├── getInvitedUser.js
│ │ │ ├── getMenu.js
│ │ │ ├── getMyUserInfo.js
│ │ │ ├── getWeixinMPqrcode.js
│ │ │ ├── getWeixinMPscheme.js
│ │ │ ├── resetPwd.js
│ │ │ ├── setAvatar.js
│ │ │ ├── setUserInviteCode.js
│ │ │ ├── unbindAlipay.js
│ │ │ ├── unbindEmail.js
│ │ │ ├── unbindMobile.js
│ │ │ ├── unbindQQ.js
│ │ │ ├── unbindWeixin.js
│ │ │ ├── updatePwd.js
│ │ │ └── updateUser.js
│ │ │ ├── pub
│ │ │ ├── checkToken.js
│ │ │ ├── code2SessionAlipay.js
│ │ │ ├── code2SessionWeixin.js
│ │ │ ├── getPhoneNumber.js
│ │ │ ├── getUserInfoByInviteCode.js
│ │ │ ├── login.js
│ │ │ ├── loginByAlipay.js
│ │ │ ├── loginByEmail.js
│ │ │ ├── loginByQQ.js
│ │ │ ├── loginBySms.js
│ │ │ ├── loginByUniverify.js
│ │ │ ├── loginByWeixin.js
│ │ │ ├── loginByWeixinPhoneNumber.js
│ │ │ ├── logout.js
│ │ │ ├── register.js
│ │ │ ├── resetPasswordByEmail.js
│ │ │ ├── resetPasswordByMobile.js
│ │ │ ├── sendEmailCode.js
│ │ │ └── sendSmsCode.js
│ │ │ ├── sys
│ │ │ ├── encryptPwd.js
│ │ │ └── setVerifyCode.js
│ │ │ └── util
│ │ │ └── login_log.js
│ │ └── util
│ │ ├── pubFunction.js
│ │ └── urlrewrite.js
└── database
│ ├── blog-article-category.schema.json
│ ├── blog-article-comment.schema.json
│ ├── blog-article-tag.schema.json
│ ├── blog-article.schema.json
│ ├── blog-comment-reply.schema.json
│ ├── blog-friend-like.schema.json
│ ├── blog-friend-reply.schema.json
│ ├── blog-friend.schema.json
│ ├── opendb-admin-menus.schema.json
│ ├── opendb-app-list.schema.json
│ ├── opendb-verify-codes.schema.json
│ ├── uni-id-log.schema.json
│ ├── uni-id-permissions.schema.json
│ ├── uni-id-roles.schema.json
│ └── uni-id-users.schema.json
├── uni_modules
├── uni-config-center
│ ├── package.json
│ └── uniCloud
│ │ └── cloudfunctions
│ │ └── common
│ │ └── uni-config-center
│ │ ├── index.js
│ │ ├── package.json
│ │ ├── uni-id
│ │ └── config.json
│ │ └── vk-unicloud
│ │ └── index.js
├── uni-file-picker
│ ├── components
│ │ └── uni-file-picker
│ │ │ ├── choose-and-upload-file.js
│ │ │ ├── uni-file-picker.vue
│ │ │ ├── upload-file.vue
│ │ │ ├── upload-image.vue
│ │ │ └── utils.js
│ └── package.json
├── uni-id
│ ├── package.json
│ └── uniCloud
│ │ └── cloudfunctions
│ │ └── common
│ │ └── uni-id
│ │ ├── index.js
│ │ └── package.json
├── vk-unicloud
│ ├── components
│ │ └── vk-data-verification-code
│ │ │ └── vk-data-verification-code.vue
│ ├── index.js
│ ├── package.json
│ ├── uniCloud
│ │ └── cloudfunctions
│ │ │ └── common
│ │ │ └── vk-unicloud
│ │ │ ├── LICENSE.md
│ │ │ ├── index.js
│ │ │ └── package.json
│ └── vk_modules
│ │ └── vk-unicloud-page
│ │ ├── index.js
│ │ └── libs
│ │ ├── function
│ │ ├── aliyunOSSUtil.js
│ │ ├── debounce.js
│ │ ├── deepClone.js
│ │ ├── deepMerge.js
│ │ ├── index.js
│ │ ├── modal.js
│ │ ├── permission.js
│ │ ├── queryParams.js
│ │ ├── setClipboardData.js
│ │ ├── throttle.js
│ │ ├── timeUtil.js
│ │ ├── treeUtil.js
│ │ ├── updateManager.js
│ │ ├── vk.filters.js
│ │ ├── vk.h5.js
│ │ ├── vk.importObject.js
│ │ ├── vk.localStorage.js
│ │ ├── vk.navigate.js
│ │ ├── vk.request.js
│ │ └── weixin-js-sdk.js
│ │ ├── install
│ │ └── console.log.js
│ │ ├── mixin
│ │ └── mixin.js
│ │ ├── openapi
│ │ ├── baidu
│ │ │ └── index.js
│ │ └── index.js
│ │ ├── store
│ │ ├── libs
│ │ │ └── error.js
│ │ └── mixin
│ │ │ └── mixin.js
│ │ └── vk-unicloud
│ │ ├── vk-unicloud-callFunctionUtil.js
│ │ └── vk-unicloud-user-center.js
└── vk-uview-ui
│ ├── changelog.md
│ ├── components
│ ├── u-action-sheet
│ │ └── u-action-sheet.vue
│ ├── u-alert-tips
│ │ └── u-alert-tips.vue
│ ├── u-avatar-cropper
│ │ ├── u-avatar-cropper.vue
│ │ └── weCropper.js
│ ├── u-avatar
│ │ └── u-avatar.vue
│ ├── u-back-top
│ │ └── u-back-top.vue
│ ├── u-badge
│ │ └── u-badge.vue
│ ├── u-button
│ │ └── u-button.vue
│ ├── u-calendar
│ │ └── u-calendar.vue
│ ├── u-car-keyboard
│ │ └── u-car-keyboard.vue
│ ├── u-card
│ │ └── u-card.vue
│ ├── u-cell-group
│ │ └── u-cell-group.vue
│ ├── u-cell-item
│ │ └── u-cell-item.vue
│ ├── u-checkbox-group
│ │ └── u-checkbox-group.vue
│ ├── u-checkbox
│ │ └── u-checkbox.vue
│ ├── u-circle-progress
│ │ └── u-circle-progress.vue
│ ├── u-col
│ │ └── u-col.vue
│ ├── u-collapse-item
│ │ └── u-collapse-item.vue
│ ├── u-collapse
│ │ └── u-collapse.vue
│ ├── u-column-notice
│ │ └── u-column-notice.vue
│ ├── u-count-down
│ │ ├── u-count-down.vue
│ │ └── utils.js
│ ├── u-count-to
│ │ └── u-count-to.vue
│ ├── u-divider
│ │ └── u-divider.vue
│ ├── u-dropdown-item
│ │ └── u-dropdown-item.vue
│ ├── u-dropdown
│ │ └── u-dropdown.vue
│ ├── u-empty
│ │ └── u-empty.vue
│ ├── u-field
│ │ └── u-field.vue
│ ├── u-form-item
│ │ └── u-form-item.vue
│ ├── u-form
│ │ └── u-form.vue
│ ├── u-full-screen
│ │ └── u-full-screen.vue
│ ├── u-gap
│ │ └── u-gap.vue
│ ├── u-grid-item
│ │ └── u-grid-item.vue
│ ├── u-grid
│ │ └── u-grid.vue
│ ├── u-icon
│ │ └── u-icon.vue
│ ├── u-image
│ │ └── u-image.vue
│ ├── u-index-anchor
│ │ └── u-index-anchor.vue
│ ├── u-index-list
│ │ └── u-index-list.vue
│ ├── u-input
│ │ └── u-input.vue
│ ├── u-keyboard
│ │ └── u-keyboard.vue
│ ├── u-lazy-load
│ │ └── u-lazy-load.vue
│ ├── u-line-progress
│ │ └── u-line-progress.vue
│ ├── u-line
│ │ └── u-line.vue
│ ├── u-link
│ │ └── u-link.vue
│ ├── u-loading-page
│ │ └── u-loading-page.vue
│ ├── u-loading
│ │ └── u-loading.vue
│ ├── u-loadmore
│ │ └── u-loadmore.vue
│ ├── u-mask
│ │ └── u-mask.vue
│ ├── u-message-input
│ │ └── u-message-input.vue
│ ├── u-modal
│ │ └── u-modal.vue
│ ├── u-navbar
│ │ └── u-navbar.vue
│ ├── u-no-network
│ │ └── u-no-network.vue
│ ├── u-notice-bar
│ │ └── u-notice-bar.vue
│ ├── u-number-box
│ │ └── u-number-box.vue
│ ├── u-number-keyboard
│ │ └── u-number-keyboard.vue
│ ├── u-parse
│ │ ├── libs
│ │ │ ├── CssHandler.js
│ │ │ ├── MpHtmlParser.js
│ │ │ ├── config.js
│ │ │ └── trees.vue
│ │ └── u-parse.vue
│ ├── u-picker
│ │ └── u-picker.vue
│ ├── u-popup
│ │ └── u-popup.vue
│ ├── u-radio-group
│ │ └── u-radio-group.vue
│ ├── u-radio
│ │ └── u-radio.vue
│ ├── u-rate
│ │ └── u-rate.vue
│ ├── u-read-more
│ │ └── u-read-more.vue
│ ├── u-row-notice
│ │ └── u-row-notice.vue
│ ├── u-row
│ │ └── u-row.vue
│ ├── u-search
│ │ └── u-search.vue
│ ├── u-section
│ │ └── u-section.vue
│ ├── u-select
│ │ └── u-select.vue
│ ├── u-skeleton
│ │ └── u-skeleton.vue
│ ├── u-slider
│ │ └── u-slider.vue
│ ├── u-steps
│ │ └── u-steps.vue
│ ├── u-sticky
│ │ └── u-sticky.vue
│ ├── u-subsection
│ │ └── u-subsection.vue
│ ├── u-swipe-action
│ │ └── u-swipe-action.vue
│ ├── u-swiper
│ │ └── u-swiper.vue
│ ├── u-switch
│ │ └── u-switch.vue
│ ├── u-tabbar
│ │ └── u-tabbar.vue
│ ├── u-table
│ │ └── u-table.vue
│ ├── u-tabs-swiper
│ │ └── u-tabs-swiper.vue
│ ├── u-tabs
│ │ └── u-tabs.vue
│ ├── u-tag
│ │ └── u-tag.vue
│ ├── u-td
│ │ └── u-td.vue
│ ├── u-th
│ │ └── u-th.vue
│ ├── u-time-line-item
│ │ └── u-time-line-item.vue
│ ├── u-time-line
│ │ └── u-time-line.vue
│ ├── u-toast
│ │ └── u-toast.vue
│ ├── u-top-tips
│ │ └── u-top-tips.vue
│ ├── u-tr
│ │ └── u-tr.vue
│ ├── u-upload
│ │ └── u-upload.vue
│ ├── u-verification-code
│ │ └── u-verification-code.vue
│ ├── u-waterfall
│ │ └── u-waterfall.vue
│ └── vk-uview-ui
│ │ └── vk-uview-ui.vue
│ ├── iconfont.css
│ ├── index.js
│ ├── index.scss
│ ├── libs
│ ├── address
│ │ ├── areas.json
│ │ ├── citys.json
│ │ └── provinces.json
│ ├── config
│ │ ├── config.js
│ │ └── zIndex.js
│ ├── css
│ │ ├── color.scss
│ │ ├── common.scss
│ │ ├── style.components.scss
│ │ ├── style.h5.scss
│ │ ├── style.mp.scss
│ │ ├── style.nvue.scss
│ │ └── style.vue.scss
│ ├── function
│ │ ├── $parent.js
│ │ ├── addUnit.js
│ │ ├── bem.js
│ │ ├── color.js
│ │ ├── colorGradient.js
│ │ ├── debounce.js
│ │ ├── deepClone.js
│ │ ├── deepMerge.js
│ │ ├── getParent.js
│ │ ├── guid.js
│ │ ├── md5.js
│ │ ├── queryParams.js
│ │ ├── random.js
│ │ ├── randomArray.js
│ │ ├── route.js
│ │ ├── sys.js
│ │ ├── test.js
│ │ ├── throttle.js
│ │ ├── timeFormat.js
│ │ ├── timeFrom.js
│ │ ├── toast.js
│ │ ├── trim.js
│ │ └── type2icon.js
│ ├── mixin
│ │ ├── mixin.js
│ │ └── mpShare.js
│ ├── request
│ │ └── index.js
│ ├── store
│ │ └── index.js
│ └── util
│ │ ├── async-validator.js
│ │ └── emitter.js
│ ├── package.json
│ ├── readme.md
│ └── theme.scss
└── untils
└── index.js
/App.vue:
--------------------------------------------------------------------------------
1 |
25 |
26 |
32 |
--------------------------------------------------------------------------------
/common/css/app.scss:
--------------------------------------------------------------------------------
1 | /* 这里是你自己写的全局css样式 */
2 | /* #ifdef H5 */
3 | .uni-mask,
4 | .uni-modal,
5 | uni-toast,
6 | uni-modal,
7 | .uni-actionsheet {
8 | z-index: 999999 !important;
9 | }
10 | /* #endif */
11 |
--------------------------------------------------------------------------------
/common/function/myPubFunction.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 自定义公共函数
3 | */
4 | var myfn = {};
5 | /**
6 | * 测试函数test1
7 | * vk.myfn.test1();
8 | */
9 | myfn.test1 = function(obj = {}) {
10 | let vk = uni.vk;
11 | console.log("执行了自定义公共函数test1");
12 | return obj;
13 | };
14 |
15 | export default myfn;
16 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | import App from './App'
2 | import store from './store'
3 | import config from '@/app.config.js'
4 |
5 | // 引入 uView UI
6 | import uView from './uni_modules/vk-uview-ui';
7 | // 引入 vk框架前端
8 | import vk from './uni_modules/vk-unicloud';
9 | // #ifndef VUE3
10 | import Vue from 'vue'
11 |
12 | // 引入 uView UI
13 | Vue.use(uView);
14 |
15 | // 引入 vk框架前端
16 | Vue.use(vk);
17 |
18 | // 初始化 vk框架
19 | Vue.prototype.vk.init({
20 | Vue, // Vue实例
21 | config, // 配置
22 | });
23 |
24 | Vue.config.productionTip = false
25 |
26 | App.mpType = 'app'
27 |
28 | const app = new Vue({
29 | store,
30 | ...App
31 | });
32 |
33 | app.$mount();
34 | // #endif
35 |
36 | // #ifdef VUE3
37 | import { createSSRApp } from 'vue'
38 |
39 | export function createApp() {
40 | const app = createSSRApp(App)
41 |
42 | // 引入vuex
43 | app.use(store)
44 |
45 | // 引入 uView UI
46 | // app.use(uView)
47 |
48 | // 引入 vk框架前端
49 | app.use(vk);
50 |
51 | // 初始化 vk框架
52 | app.config.globalProperties.vk.init({
53 | Vue: app, // Vue实例
54 | config, // 配置
55 | });
56 |
57 | return { app }
58 | }
59 | // #endif
--------------------------------------------------------------------------------
/pages/login/css/main.css:
--------------------------------------------------------------------------------
1 | .content {
2 | display: flex;
3 | flex-direction: column;
4 | justify-content:center;
5 | /* margin-top: 128rpx; */
6 | }
7 |
8 | /* 头部 logo */
9 | .header {
10 | border-radius:50%;
11 | margin-top: 128rpx;
12 | margin-bottom: 72rpx;
13 | margin-left: auto;
14 | margin-right: auto;
15 | }
16 | .header image{
17 | width:161rpx;
18 | height:161rpx;
19 | border-radius:50%;
20 | }
21 |
22 | /* 主体 */
23 | .main {
24 | display: flex;
25 | flex-direction: column;
26 | padding-left: 70rpx;
27 | padding-right: 70rpx;
28 | }
29 | .tips {
30 | color: #999999;
31 | font-size: 28rpx;
32 | margin-top: 64rpx;
33 | margin-left: 48rpx;
34 | }
35 |
36 | /* 登录按钮 */
37 | .wbutton{
38 | margin-top: 96rpx;
39 | }
40 |
41 | /* 其他登录方式 */
42 | .other_login{
43 | display: flex;
44 | flex-direction: row;
45 | justify-content: center;
46 | align-items: center;
47 | margin-top: 256rpx;
48 | text-align: center;
49 | }
50 | .login_icon{
51 | border: none;
52 | font-size: 64rpx;
53 | margin: 0 64rpx 0 64rpx;
54 | color: rgba(0,0,0,0.7)
55 | }
56 | .wechat_color{
57 | color: #83DC42;
58 | }
59 | .weibo_color{
60 | color: #F9221D;
61 | }
62 | .github_color{
63 | color: #24292E;
64 | }
65 |
66 | /* 底部 */
67 | .footer{
68 | display: flex;
69 | flex-direction: row;
70 | justify-content: center;
71 | align-items: center;
72 | font-size: 28rpx;
73 | margin-top: 64rpx;
74 | color: rgba(0,0,0,0.7);
75 | text-align: center;
76 | height: 40rpx;
77 | line-height: 40rpx;
78 | }
79 | .footer text{
80 | font-size: 24rpx;
81 | margin-left: 15rpx;
82 | margin-right: 15rpx;
83 | }
--------------------------------------------------------------------------------
/static/img/find.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/find.png
--------------------------------------------------------------------------------
/static/img/findActive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/findActive.png
--------------------------------------------------------------------------------
/static/img/guidang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/guidang.png
--------------------------------------------------------------------------------
/static/img/guidangActive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/guidangActive.png
--------------------------------------------------------------------------------
/static/img/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/home.png
--------------------------------------------------------------------------------
/static/img/homeActive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/homeActive.png
--------------------------------------------------------------------------------
/static/img/my.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/my.png
--------------------------------------------------------------------------------
/static/img/myActive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MotainZhang/uniBlog/0b678ad1e1876efe5b304e51dbc313fda63114cb/static/img/myActive.png
--------------------------------------------------------------------------------
/store/modules/$app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * vuex 系统状态管理模块
3 | */
4 | import config from '@/app.config.js'
5 |
6 | let lifeData = uni.getStorageSync('lifeData') || {};
7 |
8 | let $app = lifeData.$app || {};
9 |
10 | export default {
11 | // 通过添加 namespaced: true 的方式使其成为带命名空间的模块
12 | namespaced: true,
13 | /**
14 | * vuex的基本数据,用来存储变量
15 | */
16 | state: {
17 | /**
18 | * 是否已经初始化
19 | * js调用示例
20 | * vk.getVuex('$app.inited');
21 | * 页面上直接使用示例
22 | * {{ vk.getVuex('$app.inited') }}
23 | * js更新示例
24 | * vk.setVuex('$app.inited', true);
25 | */
26 | inited: $app.inited || false,
27 | config:{
28 | ...config
29 | }
30 | },
31 | /**
32 | * 从基本数据(state)派生的数据,相当于state的计算属性
33 | */
34 | getters: {
35 |
36 | },
37 | /**
38 | * 提交更新数据的方法,必须是同步的(如果需要异步使用action)。
39 | * 每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。
40 | * 回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。
41 | */
42 | mutations: {
43 |
44 | },
45 | /**
46 | * 和mutation的功能大致相同,不同之处在于 ==》
47 | * 1. Action 提交的是 mutation,而不是直接变更状态。
48 | * 2. Action 可以包含任意异步操作。
49 | */
50 | actions: {
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/store/modules/$user.js:
--------------------------------------------------------------------------------
1 | /**
2 | * vuex 用户状态管理模块
3 | */
4 | let lifeData = uni.getStorageSync('lifeData') || {};
5 |
6 | let $user = lifeData.$user || {};
7 |
8 | export default {
9 | // 通过添加 namespaced: true 的方式使其成为带命名空间的模块
10 | namespaced: true,
11 | /**
12 | * vuex的基本数据,用来存储变量
13 | */
14 | state: {
15 | /**
16 | * 登录用户信息
17 | * js调用示例
18 | * (推荐) vk.getVuex('$user.userInfo');
19 | * 或 vk.vuex.get('$user.userInfo');
20 | * 页面上直接使用示例
21 | * {{ vk.getVuex('$user.userInfo') }}
22 | * js更新示例
23 | * vk.setVuex('$user.userInfo.avatar', avatar);
24 | */
25 | userInfo: $user.userInfo || {},
26 | permission:$user.permission || [],
27 | },
28 | /**
29 | * 从基本数据(state)派生的数据,相当于state的计算属性
30 | */
31 | getters: {
32 | /**
33 | * 获取用户信息(使用计算属性获取)
34 | * js调用示例
35 | * vk.vuex.getters('$user/getUserInfo');
36 | * 或
37 | * that.$store.getters['$user/getUserInfo'];
38 | */
39 | getUserInfo: (state) => {
40 | return state.userInfo;
41 | }
42 | },
43 | /**
44 | * 提交更新数据的方法,必须是同步的(如果需要异步使用action)。
45 | * 每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。
46 | * 回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。
47 | */
48 | mutations: {
49 |
50 | },
51 | /**
52 | * 和mutation的功能大致相同,不同之处在于 ==》
53 | * 1. Action 提交的是 mutation,而不是直接变更状态。
54 | * 2. Action 可以包含任意异步操作。
55 | */
56 | actions: {
57 |
58 | }
59 | }
--------------------------------------------------------------------------------
/subPackages/error/404/404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 这里是404页面
6 |
7 |
8 |
9 |
10 |
11 |
44 |
--------------------------------------------------------------------------------
/template.h5.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/uni.scss:
--------------------------------------------------------------------------------
1 | @import "@/common/css/uni.scss";
2 | @import "@/uni_modules/vk-uview-ui/theme.scss";
3 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/config.js:
--------------------------------------------------------------------------------
1 | const requireFn = function(path) {
2 | return require(path);
3 | }
4 | const initConfig = {
5 | baseDir: __dirname, // 云函数根目录地址
6 | requireFn,
7 | customUtil :{
8 | // 你自己的工具包,写这里后即可听过customUtil.mynpm1调用
9 | // mynpm1:mynpm1
10 | }
11 | };
12 | module.exports = initConfig;
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/dao/index.js:
--------------------------------------------------------------------------------
1 | // 加载模块 - 数据库dao层 API 请勿改动此文件-----------------------------------
2 | const modulesPath = __dirname+"/modules";
3 | const fs = require('fs');
4 | const fileList = fs.readdirSync(modulesPath);
5 | const moduleObj = {};
6 | const modulesNames = [];
7 | fileList.map((file, index) => {
8 | if(file.indexOf("Dao.js") > -1){
9 | modulesNames.push(file.substring(0,file.length-3));
10 | }
11 | });
12 | modulesNames.map((modulesName, index) => {
13 | moduleObj[modulesName] = require(modulesPath+"/"+modulesName);
14 | });
15 | moduleObj.init = function(obj){
16 | modulesNames.map((modulesName, index) => {
17 | if(typeof moduleObj[modulesName].init === "function"){
18 | moduleObj[modulesName].init(obj);
19 | }
20 | });
21 | }
22 | module.exports = moduleObj;
23 | // 加载模块 - 数据库dao层 API 请勿改动此文件-----------------------------------
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/index.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | // 注意:此为云函数路由入口文件,请勿修改此文件代码,你自己的云函数逻辑应写在service目录下
3 | const vk = require('vk-unicloud'); // vk-unicloud 工具包
4 | vk.init(require('./config.js'));
5 | exports.main = async (event, context) => {
6 | return await vk.router({ event, context, vk });
7 | };
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/middleware/index.js:
--------------------------------------------------------------------------------
1 | // 加载模块 - 中间件 请勿改动此文件-----------------------------------
2 | const modulesPath = __dirname+"/modules";
3 | const fs = require('fs');
4 | const fileList = fs.readdirSync(modulesPath);
5 | var moduleList = [];
6 | var modulesNames = [];
7 |
8 | fileList.map((file, index) => {
9 | if(file.indexOf(".js") > -1){
10 | modulesNames.push(file.substring(0,file.length-3));
11 | }
12 | });
13 |
14 | modulesNames.map((modulesName, index) => {
15 | moduleList.push(require(modulesPath+"/"+modulesName));
16 | });
17 |
18 | var middlewareList = [];
19 | moduleList.map((moduleItem, index) => {
20 | middlewareList = middlewareList.concat(moduleItem);
21 | });
22 | module.exports = middlewareList;
23 | // 加载模块 - 中间件 请勿改动此文件-----------------------------------
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/middleware/modules/customFilter1.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 自定义过滤器 - 前置
3 | */
4 |
5 | module.exports = [
6 | {
7 | id: "xxxx1",
8 | regExp: "^xxx1/kh", // 正则匹配规则,这个是以^xxx1/kh/开头的云函数会被拦截
9 | description: "这里是你过滤器1号的描述",
10 | index: 310,// 此处必须>300 因为检测用户是否登录的过滤器的index是200(sys是300,因此为了能通用,建议填大于300的值)(越小越先执行)
11 | mode:"onActionExecuting", // 可选 onActionExecuting onActionExecuted
12 | main: async function(event) {
13 | // 这里是拦截规则,可以查数据库,最终code:0 代表通过,其他均为未通过,msg是被拦截的原因
14 | let { data = {}, util } = event;
15 | let { vk } = util;
16 | return {
17 | code: -1,
18 | msg: "被自定义过滤器1号拦截了"
19 | }
20 | }
21 | }
22 | ]
23 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/middleware/modules/customFilter2.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 自定义过滤器 - 后置
3 | */
4 |
5 | module.exports = [
6 | {
7 | id: "xxxx2",
8 | regExp: "^xxx2/kh", // 正则匹配规则,这个是以^xxx2/kh/开头的云函数会被拦截
9 | description: "这里是你过滤器2号的描述",
10 | index: 310,// 此处必须>300 因为检测用户是否登录的过滤器的index是200(sys是300,因此为了能通用,建议填大于300的值)(越小越先执行)
11 | mode:"onActionExecuted", // 可选 onActionExecuting onActionExecuted
12 | main: async function(event, serviceRes) {
13 | let { data = {}, util } = event;
14 | let { vk } = util;
15 | serviceRes.msg = "被过滤器修改后的值";
16 | return serviceRes;
17 | }
18 | }
19 | ]
20 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "router",
3 | "version": "1.0.0",
4 | "description": "【开箱即用】vk-uniCloud-router - 云函数路由模式 - uniCloud开发框架 - 已集成uni-id",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "uni-config-center": "file:../../../uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center",
14 | "uni-id": "file:../../../uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id",
15 | "uni-pay": "file:../../../uni_modules/uni-pay/uniCloud/cloudfunctions/common/uni-pay",
16 | "vk-unicloud": "file:../../../uni_modules/vk-unicloud/uniCloud/cloudfunctions/common/vk-unicloud"
17 | },
18 | "private": true,
19 | "cloudfunction-config": {
20 | "concurrency": 1,
21 | "memorySize": 256,
22 | "path": "",
23 | "timeout": 60,
24 | "triggers": [],
25 | "runtime": "Nodejs12"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/router.param.json:
--------------------------------------------------------------------------------
1 |
2 | // 运行方法:右键云函数根目录(如router目录),并点击【运行-本地云函数】即可。
3 | // 若函数需要登录才能访问,则填写uni_id_token的值,值为对应用户的token(可直接从数据库中复制1个过来)
4 | // $url 是 云函数运行路径,如 user/pub/checkToken
5 | // data 是 请求参数,为标准json格式(属性名需要加双引号)
6 |
7 | {
8 | "uni_id_token":"",
9 | "$url":"client/pub.test.test2",
10 | "data":{
11 | "username":"admin",
12 | "password":"123456"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/service/admin/article/sys/add.js:
--------------------------------------------------------------------------------
1 | const {
2 | error
3 | } = require("console");
4 |
5 | module.exports = {
6 | /**
7 | * 添加单条数据
8 | * @url admin/kong/sys/add 前端调用的url参数地址
9 | * data 请求参数 说明
10 | * res 返回参数说明
11 | * @param {Number} code 错误码,0表示成功
12 | * @param {String} msg 详细信息
13 | */
14 | main: async (event) => {
15 | let {
16 | data = {}, userInfo, util, filterResponse, originalParam
17 | } = event;
18 | let {
19 | customUtil,
20 | uniID,
21 | config,
22 | pubFun,
23 | vk,
24 | db,
25 | _
26 | } = util;
27 | let {
28 | uid
29 | } = data;
30 | let res = {
31 | code: 0,
32 | msg: 'ok'
33 | };
34 | // 业务逻辑开始-----------------------------------------------------------
35 | let dbName = "blog-article";
36 | res.id = await vk.baseDao.add({
37 | dbName,
38 | dataJson: data
39 | });
40 | // 业务逻辑结束-----------------------------------------------------------
41 | return res;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/service/admin/article/sys/delete.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | /**
3 | * 数据删除
4 | * @url admin/kong/sys/delete 前端调用的url参数地址
5 | * data 请求参数 说明
6 | * res 返回参数说明
7 | * @param {Number} code 错误码,0表示成功
8 | * @param {String} msg 详细信息
9 | */
10 | main: async (event) => {
11 | let { data = {}, userInfo, util, filterResponse, originalParam } = event;
12 | let { customUtil, uniID, config, pubFun, vk , db, _ } = util;
13 | let { uid } = data;
14 | let res = { code : 0, msg : 'ok' };
15 | // 业务逻辑开始-----------------------------------------------------------
16 | let { _id } = data;
17 | if(vk.pubfn.isNull(_id)){
18 | return { code : -1, msg : 'id不能为空' };
19 | }
20 | let dbName = "blog-article";
21 | await vk.baseDao.deleteById({
22 | dbName,
23 | id:_id
24 | });
25 | // 业务逻辑结束-----------------------------------------------------------
26 | return res;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/uniCloud-aliyun/cloudfunctions/router/service/admin/article/sys/getCountByMonth.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | /**
3 | * 查询多条记录 分页
4 | * @url admin/kong/sys/getList 前端调用的url参数地址
5 | * data 请求参数 说明
6 | * @param {Number} pageIndex 当前页码
7 | * @param {Number} pageSize 每页显示数量
8 | * @param {Array