From ce5b350705a10bd56ba72a900b0762eb3444134e Mon Sep 17 00:00:00 2001
From: fy <>
Date: Mon, 19 Jan 2026 16:52:24 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 16 +
.trae/documents/优化浅色模式样式.md | 21 +
App.vue | 33 +
LICENSE | 21 +
README.md | 51 +
api/login.js | 60 +
api/product.js | 256 +
api/store.js | 11 +
api/system/dict/data.js | 60 +
api/system/dict/type.js | 60 +
api/system/user.js | 41 +
components/ScanView.vue | 206 +
components/uni-section/uni-section.vue | 167 +
config.js | 29 +
main.js | 20 +
manifest.json | 78 +
pages.json | 176 +
pages/Import /Import .vue | 493 ++
pages/addProduct/addProduct.vue | 466 ++
pages/asset/asset.vue | 284 +
pages/common/textview/index.vue | 43 +
pages/common/webview/index.vue | 34 +
pages/edit/edit.vue | 892 +++
pages/enter/enter.vue | 676 +++
pages/index.vue | 1394 +++++
pages/login.vue | 221 +
pages/menu.vue | 109 +
pages/mine/about/index.vue | 75 +
pages/mine/avatar/index.vue | 618 ++
pages/mine/help/index.vue | 112 +
pages/mine/index.vue | 188 +
pages/mine/info/edit.vue | 127 +
pages/mine/info/index.vue | 44 +
pages/mine/pwd/index.vue | 85 +
pages/mine/setting/index.vue | 78 +
pages/product/product.vue | 704 +++
pages/register.vue | 189 +
pages/settings/settings.vue | 183 +
pages/storeSelect/storeSelect.vue | 221 +
pages/user/user.vue | 319 +
pages/userStores/userStores.vue | 225 +
pages/work/index.vue | 182 +
permission.js | 39 +
plugins/auth.js | 60 +
plugins/index.js | 14 +
plugins/modal.js | 78 +
plugins/tab.js | 30 +
static/687b6f95b14eff60f4b77147b3726ab2.jpg | Bin 0 -> 26495 bytes
static/Frame 52.png | Bin 0 -> 557 bytes
static/Frame 6.png | Bin 0 -> 2339 bytes
static/Frame 61.png | Bin 0 -> 5525 bytes
static/Frame 63.png | Bin 0 -> 5708 bytes
static/Frame 64.png | Bin 0 -> 5097 bytes
static/Frame 65-1.png | Bin 0 -> 5131 bytes
static/Frame 65.png | Bin 0 -> 5171 bytes
static/Frame 66.png | Bin 0 -> 4864 bytes
static/Frame 67.png | Bin 0 -> 5289 bytes
static/Frame 68.png | Bin 0 -> 4888 bytes
static/Frame 69.png | Bin 0 -> 5048 bytes
static/Frame 7.png | Bin 0 -> 5884 bytes
static/Frame 70.png | Bin 0 -> 5160 bytes
static/Frame 71.png | Bin 0 -> 4918 bytes
static/Frame 72.png | Bin 0 -> 4893 bytes
static/Frame 74.png | Bin 0 -> 347 bytes
static/Frame 75.png | Bin 0 -> 867 bytes
static/Frame 76.png | Bin 0 -> 4964 bytes
static/Frame 77.png | Bin 0 -> 5139 bytes
static/Frame 78.png | Bin 0 -> 5127 bytes
static/Frame 79.png | Bin 0 -> 5502 bytes
static/Frame 8.png | Bin 0 -> 3164 bytes
static/Rectangle 283.png | Bin 0 -> 6082 bytes
static/Rectangle 284.png | Bin 0 -> 2383 bytes
static/Rectangle 290.png | Bin 0 -> 4872 bytes
static/Snipaste_2026-01-09_15-34-20.jpg | Bin 0 -> 225129 bytes
static/Union (1).png | Bin 0 -> 263 bytes
static/Union.png | Bin 0 -> 263 bytes
static/favicon.ico | Bin 0 -> 16958 bytes
static/font/iconfont.css | 90 +
static/font/iconfont.ttf | Bin 0 -> 6724 bytes
static/image 71.png | Bin 0 -> 537816 bytes
static/images/banner/banner01.jpg | Bin 0 -> 39640 bytes
static/images/banner/banner02.jpg | Bin 0 -> 37061 bytes
static/images/banner/banner03.jpg | Bin 0 -> 38123 bytes
static/images/profile.jpg | Bin 0 -> 81131 bytes
static/images/tabbar/Frame 86.png | Bin 0 -> 3492 bytes
static/images/tabbar/Frame 87.png | Bin 0 -> 3429 bytes
static/images/tabbar/Union-1.png | Bin 0 -> 6936 bytes
static/images/tabbar/Union.png | Bin 0 -> 6751 bytes
static/images/tabbar/Vector-1.png | Bin 0 -> 5971 bytes
static/images/tabbar/Vector.png | Bin 0 -> 6116 bytes
static/images/tabbar/home.png | Bin 0 -> 3265 bytes
static/images/tabbar/home_.png | Bin 0 -> 3229 bytes
static/images/tabbar/mine.png | Bin 0 -> 4235 bytes
static/images/tabbar/mine_.png | Bin 0 -> 4219 bytes
static/images/tabbar/work.png | Bin 0 -> 4108 bytes
static/images/tabbar/work_.png | Bin 0 -> 5008 bytes
static/index.html | 75 +
static/logo.png | Bin 0 -> 3616 bytes
static/logo200.png | Bin 0 -> 7995 bytes
static/pei.png | Bin 0 -> 866 bytes
static/scss/colorui.css | 5142 +++++++++++++++++
static/scss/cross-platform.scss | 451 ++
static/scss/global.scss | 90 +
static/scss/index.scss | 6 +
static/scss/theme-variables.scss | 398 ++
static/zhen.png | Bin 0 -> 751 bytes
store/getters.js | 9 +
store/index.js | 15 +
store/modules/user.js | 110 +
uni.scss | 64 +
uni_modules/uni-badge/changelog.md | 33 +
.../components/uni-badge/uni-badge.vue | 268 +
uni_modules/uni-badge/package.json | 85 +
uni_modules/uni-badge/readme.md | 10 +
uni_modules/uni-breadcrumb/changelog.md | 6 +
.../uni-breadcrumb-item.vue | 121 +
.../uni-breadcrumb/uni-breadcrumb.vue | 41 +
uni_modules/uni-breadcrumb/package.json | 88 +
uni_modules/uni-breadcrumb/readme.md | 66 +
uni_modules/uni-calendar/changelog.md | 30 +
.../components/uni-calendar/calendar.js | 544 ++
.../components/uni-calendar/i18n/en.json | 12 +
.../components/uni-calendar/i18n/index.js | 8 +
.../components/uni-calendar/i18n/zh-Hans.json | 12 +
.../components/uni-calendar/i18n/zh-Hant.json | 12 +
.../uni-calendar/uni-calendar-item.vue | 187 +
.../components/uni-calendar/uni-calendar.vue | 567 ++
.../components/uni-calendar/util.js | 360 ++
uni_modules/uni-calendar/package.json | 86 +
uni_modules/uni-calendar/readme.md | 103 +
uni_modules/uni-card/changelog.md | 26 +
.../uni-card/components/uni-card/uni-card.vue | 270 +
uni_modules/uni-card/package.json | 90 +
uni_modules/uni-card/readme.md | 12 +
uni_modules/uni-collapse/changelog.md | 38 +
.../uni-collapse-item/uni-collapse-item.vue | 402 ++
.../components/uni-collapse/uni-collapse.vue | 147 +
uni_modules/uni-collapse/package.json | 86 +
uni_modules/uni-collapse/readme.md | 12 +
uni_modules/uni-combox/changelog.md | 17 +
.../components/uni-combox/uni-combox.vue | 284 +
uni_modules/uni-combox/package.json | 88 +
uni_modules/uni-combox/readme.md | 11 +
uni_modules/uni-countdown/changelog.md | 28 +
.../components/uni-countdown/i18n/en.json | 6 +
.../components/uni-countdown/i18n/index.js | 8 +
.../uni-countdown/i18n/zh-Hans.json | 6 +
.../uni-countdown/i18n/zh-Hant.json | 6 +
.../uni-countdown/uni-countdown.vue | 276 +
uni_modules/uni-countdown/package.json | 84 +
uni_modules/uni-countdown/readme.md | 10 +
uni_modules/uni-data-checkbox/changelog.md | 51 +
.../components/uni-data-checkbox/clientdb.js | 316 +
.../uni-data-checkbox/uni-data-checkbox.vue | 853 +++
uni_modules/uni-data-checkbox/package.json | 87 +
uni_modules/uni-data-checkbox/readme.md | 18 +
uni_modules/uni-data-picker/changelog.md | 79 +
.../components/uni-data-picker/keypress.js | 45 +
.../uni-data-picker/uni-data-picker.uvue | 381 ++
.../uni-data-picker/uni-data-picker.vue | 551 ++
.../uni-data-pickerview/uni-data-picker.js | 622 ++
.../uni-data-pickerview/uni-data-picker.uts | 692 +++
.../uni-data-pickerview.css | 76 +
.../uni-data-pickerview.uvue | 69 +
.../uni-data-pickerview.vue | 323 ++
uni_modules/uni-data-picker/package.json | 91 +
uni_modules/uni-data-picker/readme.md | 22 +
uni_modules/uni-data-select/changelog.md | 39 +
.../uni-data-select/uni-data-select.vue | 562 ++
uni_modules/uni-data-select/package.json | 86 +
uni_modules/uni-data-select/readme.md | 8 +
uni_modules/uni-dateformat/changelog.md | 10 +
.../components/uni-dateformat/date-format.js | 200 +
.../uni-dateformat/uni-dateformat.vue | 88 +
uni_modules/uni-dateformat/package.json | 88 +
uni_modules/uni-dateformat/readme.md | 11 +
uni_modules/uni-datetime-picker/changelog.md | 168 +
.../uni-datetime-picker/calendar-item.vue | 177 +
.../uni-datetime-picker/calendar.vue | 947 +++
.../uni-datetime-picker/i18n/en.json | 22 +
.../uni-datetime-picker/i18n/index.js | 8 +
.../uni-datetime-picker/i18n/zh-Hans.json | 22 +
.../uni-datetime-picker/i18n/zh-Hant.json | 22 +
.../uni-datetime-picker/time-picker.vue | 940 +++
.../uni-datetime-picker.vue | 1064 ++++
.../components/uni-datetime-picker/util.js | 421 ++
uni_modules/uni-datetime-picker/package.json | 88 +
uni_modules/uni-datetime-picker/readme.md | 21 +
uni_modules/uni-drawer/changelog.md | 13 +
.../components/uni-drawer/keypress.js | 45 +
.../components/uni-drawer/uni-drawer.vue | 183 +
uni_modules/uni-drawer/package.json | 87 +
uni_modules/uni-drawer/readme.md | 10 +
uni_modules/uni-easyinput/changelog.md | 115 +
.../components/uni-easyinput/common.js | 54 +
.../uni-easyinput/uni-easyinput.vue | 676 +++
uni_modules/uni-easyinput/package.json | 88 +
uni_modules/uni-easyinput/readme.md | 11 +
uni_modules/uni-fab/changelog.md | 25 +
.../uni-fab/components/uni-fab/uni-fab.vue | 491 ++
uni_modules/uni-fab/package.json | 85 +
uni_modules/uni-fab/readme.md | 9 +
uni_modules/uni-fav/changelog.md | 19 +
.../uni-fav/components/uni-fav/i18n/en.json | 4 +
.../uni-fav/components/uni-fav/i18n/index.js | 8 +
.../components/uni-fav/i18n/zh-Hans.json | 4 +
.../components/uni-fav/i18n/zh-Hant.json | 4 +
.../uni-fav/components/uni-fav/uni-fav.vue | 161 +
uni_modules/uni-fav/package.json | 89 +
uni_modules/uni-fav/readme.md | 10 +
uni_modules/uni-file-picker/changelog.md | 81 +
.../uni-file-picker/choose-and-upload-file.js | 287 +
.../uni-file-picker/uni-file-picker.vue | 668 +++
.../uni-file-picker/upload-file.vue | 325 ++
.../uni-file-picker/upload-image.vue | 292 +
.../components/uni-file-picker/utils.js | 110 +
uni_modules/uni-file-picker/package.json | 84 +
uni_modules/uni-file-picker/readme.md | 11 +
uni_modules/uni-forms/changelog.md | 100 +
.../uni-forms-item/uni-forms-item.vue | 632 ++
.../components/uni-forms/uni-forms.vue | 404 ++
.../uni-forms/components/uni-forms/utils.js | 293 +
.../components/uni-forms/validate.js | 486 ++
uni_modules/uni-forms/package.json | 89 +
uni_modules/uni-forms/readme.md | 23 +
uni_modules/uni-goods-nav/changelog.md | 18 +
.../components/uni-goods-nav/i18n/en.json | 6 +
.../components/uni-goods-nav/i18n/index.js | 8 +
.../uni-goods-nav/i18n/zh-Hans.json | 6 +
.../uni-goods-nav/i18n/zh-Hant.json | 6 +
.../uni-goods-nav/uni-goods-nav.vue | 229 +
uni_modules/uni-goods-nav/package.json | 88 +
uni_modules/uni-goods-nav/readme.md | 10 +
uni_modules/uni-grid/changelog.md | 13 +
.../uni-grid-item/uni-grid-item.vue | 127 +
.../uni-grid/components/uni-grid/uni-grid.vue | 142 +
uni_modules/uni-grid/package.json | 86 +
uni_modules/uni-grid/readme.md | 11 +
uni_modules/uni-group/changelog.md | 16 +
.../components/uni-group/uni-group.vue | 134 +
uni_modules/uni-group/package.json | 87 +
uni_modules/uni-group/readme.md | 9 +
uni_modules/uni-icons/changelog.md | 42 +
.../components/uni-icons/uni-icons.uvue | 91 +
.../components/uni-icons/uni-icons.vue | 110 +
.../components/uni-icons/uniicons.css | 664 +++
.../components/uni-icons/uniicons.ttf | Bin 0 -> 35824 bytes
.../components/uni-icons/uniicons_file.ts | 664 +++
.../components/uni-icons/uniicons_file_vue.js | 649 +++
uni_modules/uni-icons/package.json | 89 +
uni_modules/uni-icons/readme.md | 8 +
uni_modules/uni-indexed-list/changelog.md | 17 +
.../uni-indexed-list-item.vue | 144 +
.../uni-indexed-list/uni-indexed-list.vue | 367 ++
uni_modules/uni-indexed-list/package.json | 89 +
uni_modules/uni-indexed-list/readme.md | 11 +
uni_modules/uni-link/changelog.md | 17 +
.../uni-link/components/uni-link/uni-link.vue | 128 +
uni_modules/uni-link/package.json | 87 +
uni_modules/uni-link/readme.md | 11 +
uni_modules/uni-list/changelog.md | 48 +
.../components/uni-list-ad/uni-list-ad.vue | 107 +
.../uni-list-chat/uni-list-chat.scss | 58 +
.../uni-list-chat/uni-list-chat.vue | 593 ++
.../uni-list-item/uni-list-item.vue | 534 ++
.../uni-list/components/uni-list/uni-list.vue | 123 +
.../components/uni-list/uni-refresh.vue | 65 +
.../components/uni-list/uni-refresh.wxs | 87 +
uni_modules/uni-list/package.json | 91 +
uni_modules/uni-list/readme.md | 46 +
uni_modules/uni-load-more/changelog.md | 25 +
.../components/uni-load-more/i18n/en.json | 5 +
.../components/uni-load-more/i18n/index.js | 8 +
.../uni-load-more/i18n/zh-Hans.json | 5 +
.../uni-load-more/i18n/zh-Hant.json | 5 +
.../uni-load-more/uni-load-more.vue | 404 ++
uni_modules/uni-load-more/package.json | 84 +
uni_modules/uni-load-more/readme.md | 14 +
uni_modules/uni-nav-bar/changelog.md | 57 +
.../components/uni-nav-bar/uni-nav-bar.vue | 357 ++
.../components/uni-nav-bar/uni-status-bar.vue | 30 +
uni_modules/uni-nav-bar/package.json | 87 +
uni_modules/uni-nav-bar/readme.md | 15 +
uni_modules/uni-notice-bar/changelog.md | 20 +
.../uni-notice-bar/uni-notice-bar.vue | 431 ++
uni_modules/uni-notice-bar/package.json | 87 +
uni_modules/uni-notice-bar/readme.md | 13 +
uni_modules/uni-number-box/changelog.md | 39 +
.../uni-number-box/uni-number-box.vue | 232 +
uni_modules/uni-number-box/package.json | 83 +
uni_modules/uni-number-box/readme.md | 13 +
uni_modules/uni-pagination/changelog.md | 27 +
.../components/uni-pagination/i18n/en.json | 5 +
.../components/uni-pagination/i18n/es.json | 5 +
.../components/uni-pagination/i18n/fr.json | 5 +
.../components/uni-pagination/i18n/index.js | 12 +
.../uni-pagination/i18n/zh-Hans.json | 5 +
.../uni-pagination/i18n/zh-Hant.json | 5 +
.../uni-pagination/uni-pagination.vue | 465 ++
uni_modules/uni-pagination/package.json | 83 +
uni_modules/uni-pagination/readme.md | 11 +
uni_modules/uni-popup/changelog.md | 90 +
.../components/uni-popup-dialog/keypress.js | 45 +
.../uni-popup-dialog/uni-popup-dialog.vue | 316 +
.../uni-popup-message/uni-popup-message.vue | 143 +
.../uni-popup-share/uni-popup-share.vue | 188 +
.../components/uni-popup/i18n/en.json | 7 +
.../components/uni-popup/i18n/index.js | 8 +
.../components/uni-popup/i18n/zh-Hans.json | 7 +
.../components/uni-popup/i18n/zh-Hant.json | 7 +
.../components/uni-popup/keypress.js | 45 +
.../uni-popup/components/uni-popup/popup.js | 26 +
.../components/uni-popup/uni-popup.uvue | 90 +
.../components/uni-popup/uni-popup.vue | 518 ++
uni_modules/uni-popup/package.json | 90 +
uni_modules/uni-popup/readme.md | 17 +
uni_modules/uni-rate/changelog.md | 25 +
.../uni-rate/components/uni-rate/uni-rate.vue | 361 ++
uni_modules/uni-rate/package.json | 88 +
uni_modules/uni-rate/readme.md | 12 +
uni_modules/uni-row/changelog.md | 10 +
.../uni-row/components/uni-col/uni-col.vue | 317 +
.../uni-row/components/uni-row/uni-row.vue | 190 +
uni_modules/uni-row/package.json | 87 +
uni_modules/uni-row/readme.md | 10 +
uni_modules/uni-scss/changelog.md | 8 +
uni_modules/uni-scss/index.scss | 1 +
uni_modules/uni-scss/package.json | 82 +
uni_modules/uni-scss/readme.md | 4 +
uni_modules/uni-scss/styles/index.scss | 7 +
.../uni-scss/styles/setting/_border.scss | 3 +
.../uni-scss/styles/setting/_color.scss | 66 +
.../uni-scss/styles/setting/_radius.scss | 55 +
.../uni-scss/styles/setting/_space.scss | 56 +
.../uni-scss/styles/setting/_styles.scss | 167 +
.../uni-scss/styles/setting/_text.scss | 24 +
.../uni-scss/styles/setting/_variables.scss | 146 +
.../uni-scss/styles/tools/functions.scss | 19 +
uni_modules/uni-scss/theme.scss | 31 +
uni_modules/uni-scss/variables.scss | 62 +
uni_modules/uni-search-bar/changelog.md | 47 +
.../components/uni-search-bar/i18n/en.json | 4 +
.../components/uni-search-bar/i18n/index.js | 8 +
.../uni-search-bar/i18n/zh-Hans.json | 4 +
.../uni-search-bar/i18n/zh-Hant.json | 4 +
.../uni-search-bar/uni-search-bar.vue | 309 +
uni_modules/uni-search-bar/package.json | 87 +
uni_modules/uni-search-bar/readme.md | 14 +
.../uni-segmented-control/changelog.md | 15 +
.../uni-segmented-control.vue | 146 +
.../uni-segmented-control/package.json | 85 +
uni_modules/uni-segmented-control/readme.md | 13 +
uni_modules/uni-steps/changelog.md | 18 +
.../components/uni-steps/uni-steps.vue | 280 +
uni_modules/uni-steps/package.json | 87 +
uni_modules/uni-steps/readme.md | 13 +
uni_modules/uni-swipe-action/changelog.md | 47 +
.../uni-swipe-action-item/bindingx.js | 302 +
.../components/uni-swipe-action-item/isPC.js | 12 +
.../uni-swipe-action-item/mpalipay.js | 195 +
.../uni-swipe-action-item/mpother.js | 260 +
.../components/uni-swipe-action-item/mpwxs.js | 84 +
.../uni-swipe-action-item/render.js | 270 +
.../uni-swipe-action-item.vue | 348 ++
.../components/uni-swipe-action-item/wx.wxs | 341 ++
.../uni-swipe-action/uni-swipe-action.vue | 60 +
uni_modules/uni-swipe-action/package.json | 84 +
uni_modules/uni-swipe-action/readme.md | 11 +
uni_modules/uni-swiper-dot/changelog.md | 12 +
.../uni-swiper-dot/uni-swiper-dot.vue | 218 +
uni_modules/uni-swiper-dot/package.json | 87 +
uni_modules/uni-swiper-dot/readme.md | 11 +
uni_modules/uni-table/changelog.md | 33 +
.../components/uni-table/uni-table.vue | 460 ++
.../components/uni-tbody/uni-tbody.vue | 34 +
.../uni-table/components/uni-td/uni-td.vue | 95 +
.../components/uni-th/filter-dropdown.vue | 511 ++
.../uni-table/components/uni-th/uni-th.vue | 295 +
.../components/uni-thead/uni-thead.vue | 137 +
.../components/uni-tr/table-checkbox.vue | 179 +
.../uni-table/components/uni-tr/uni-tr.vue | 184 +
uni_modules/uni-table/i18n/en.json | 9 +
uni_modules/uni-table/i18n/es.json | 9 +
uni_modules/uni-table/i18n/fr.json | 9 +
uni_modules/uni-table/i18n/index.js | 12 +
uni_modules/uni-table/i18n/zh-Hans.json | 9 +
uni_modules/uni-table/i18n/zh-Hant.json | 9 +
uni_modules/uni-table/package.json | 84 +
uni_modules/uni-table/readme.md | 13 +
uni_modules/uni-tag/changelog.md | 23 +
.../uni-tag/components/uni-tag/uni-tag.vue | 252 +
uni_modules/uni-tag/package.json | 84 +
uni_modules/uni-tag/readme.md | 13 +
uni_modules/uni-title/changelog.md | 10 +
.../components/uni-title/uni-title.vue | 171 +
uni_modules/uni-title/package.json | 88 +
uni_modules/uni-title/readme.md | 14 +
uni_modules/uni-tooltip/changelog.md | 16 +
.../components/uni-tooltip/uni-tooltip.vue | 108 +
uni_modules/uni-tooltip/package.json | 86 +
uni_modules/uni-tooltip/readme.md | 8 +
uni_modules/uni-transition/changelog.md | 24 +
.../uni-transition/createAnimation.js | 131 +
.../uni-transition/uni-transition.vue | 286 +
uni_modules/uni-transition/package.json | 85 +
uni_modules/uni-transition/readme.md | 11 +
utils/auth.js | 71 +
utils/common.js | 54 +
utils/constant.js | 9 +
utils/errorCode.js | 6 +
utils/permission.js | 51 +
utils/request.js | 91 +
utils/storage.js | 32 +
utils/upload.js | 70 +
utils/validate.js | 114 +
自适应优化方案.md | 302 +
跨平台兼容优化方案.md | 628 ++
417 files changed, 56226 insertions(+)
create mode 100644 .gitignore
create mode 100644 .trae/documents/优化浅色模式样式.md
create mode 100644 App.vue
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 api/login.js
create mode 100644 api/product.js
create mode 100644 api/store.js
create mode 100644 api/system/dict/data.js
create mode 100644 api/system/dict/type.js
create mode 100644 api/system/user.js
create mode 100644 components/ScanView.vue
create mode 100644 components/uni-section/uni-section.vue
create mode 100644 config.js
create mode 100644 main.js
create mode 100644 manifest.json
create mode 100644 pages.json
create mode 100644 pages/Import /Import .vue
create mode 100644 pages/addProduct/addProduct.vue
create mode 100644 pages/asset/asset.vue
create mode 100644 pages/common/textview/index.vue
create mode 100644 pages/common/webview/index.vue
create mode 100644 pages/edit/edit.vue
create mode 100644 pages/enter/enter.vue
create mode 100644 pages/index.vue
create mode 100644 pages/login.vue
create mode 100644 pages/menu.vue
create mode 100644 pages/mine/about/index.vue
create mode 100644 pages/mine/avatar/index.vue
create mode 100644 pages/mine/help/index.vue
create mode 100644 pages/mine/index.vue
create mode 100644 pages/mine/info/edit.vue
create mode 100644 pages/mine/info/index.vue
create mode 100644 pages/mine/pwd/index.vue
create mode 100644 pages/mine/setting/index.vue
create mode 100644 pages/product/product.vue
create mode 100644 pages/register.vue
create mode 100644 pages/settings/settings.vue
create mode 100644 pages/storeSelect/storeSelect.vue
create mode 100644 pages/user/user.vue
create mode 100644 pages/userStores/userStores.vue
create mode 100644 pages/work/index.vue
create mode 100644 permission.js
create mode 100644 plugins/auth.js
create mode 100644 plugins/index.js
create mode 100644 plugins/modal.js
create mode 100644 plugins/tab.js
create mode 100644 static/687b6f95b14eff60f4b77147b3726ab2.jpg
create mode 100644 static/Frame 52.png
create mode 100644 static/Frame 6.png
create mode 100644 static/Frame 61.png
create mode 100644 static/Frame 63.png
create mode 100644 static/Frame 64.png
create mode 100644 static/Frame 65-1.png
create mode 100644 static/Frame 65.png
create mode 100644 static/Frame 66.png
create mode 100644 static/Frame 67.png
create mode 100644 static/Frame 68.png
create mode 100644 static/Frame 69.png
create mode 100644 static/Frame 7.png
create mode 100644 static/Frame 70.png
create mode 100644 static/Frame 71.png
create mode 100644 static/Frame 72.png
create mode 100644 static/Frame 74.png
create mode 100644 static/Frame 75.png
create mode 100644 static/Frame 76.png
create mode 100644 static/Frame 77.png
create mode 100644 static/Frame 78.png
create mode 100644 static/Frame 79.png
create mode 100644 static/Frame 8.png
create mode 100644 static/Rectangle 283.png
create mode 100644 static/Rectangle 284.png
create mode 100644 static/Rectangle 290.png
create mode 100644 static/Snipaste_2026-01-09_15-34-20.jpg
create mode 100644 static/Union (1).png
create mode 100644 static/Union.png
create mode 100644 static/favicon.ico
create mode 100644 static/font/iconfont.css
create mode 100644 static/font/iconfont.ttf
create mode 100644 static/image 71.png
create mode 100644 static/images/banner/banner01.jpg
create mode 100644 static/images/banner/banner02.jpg
create mode 100644 static/images/banner/banner03.jpg
create mode 100644 static/images/profile.jpg
create mode 100644 static/images/tabbar/Frame 86.png
create mode 100644 static/images/tabbar/Frame 87.png
create mode 100644 static/images/tabbar/Union-1.png
create mode 100644 static/images/tabbar/Union.png
create mode 100644 static/images/tabbar/Vector-1.png
create mode 100644 static/images/tabbar/Vector.png
create mode 100644 static/images/tabbar/home.png
create mode 100644 static/images/tabbar/home_.png
create mode 100644 static/images/tabbar/mine.png
create mode 100644 static/images/tabbar/mine_.png
create mode 100644 static/images/tabbar/work.png
create mode 100644 static/images/tabbar/work_.png
create mode 100644 static/index.html
create mode 100644 static/logo.png
create mode 100644 static/logo200.png
create mode 100644 static/pei.png
create mode 100644 static/scss/colorui.css
create mode 100644 static/scss/cross-platform.scss
create mode 100644 static/scss/global.scss
create mode 100644 static/scss/index.scss
create mode 100644 static/scss/theme-variables.scss
create mode 100644 static/zhen.png
create mode 100644 store/getters.js
create mode 100644 store/index.js
create mode 100644 store/modules/user.js
create mode 100644 uni.scss
create mode 100644 uni_modules/uni-badge/changelog.md
create mode 100644 uni_modules/uni-badge/components/uni-badge/uni-badge.vue
create mode 100644 uni_modules/uni-badge/package.json
create mode 100644 uni_modules/uni-badge/readme.md
create mode 100644 uni_modules/uni-breadcrumb/changelog.md
create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue
create mode 100644 uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue
create mode 100644 uni_modules/uni-breadcrumb/package.json
create mode 100644 uni_modules/uni-breadcrumb/readme.md
create mode 100644 uni_modules/uni-calendar/changelog.md
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js
create mode 100644 uni_modules/uni-calendar/package.json
create mode 100644 uni_modules/uni-calendar/readme.md
create mode 100644 uni_modules/uni-card/changelog.md
create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue
create mode 100644 uni_modules/uni-card/package.json
create mode 100644 uni_modules/uni-card/readme.md
create mode 100644 uni_modules/uni-collapse/changelog.md
create mode 100644 uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
create mode 100644 uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue
create mode 100644 uni_modules/uni-collapse/package.json
create mode 100644 uni_modules/uni-collapse/readme.md
create mode 100644 uni_modules/uni-combox/changelog.md
create mode 100644 uni_modules/uni-combox/components/uni-combox/uni-combox.vue
create mode 100644 uni_modules/uni-combox/package.json
create mode 100644 uni_modules/uni-combox/readme.md
create mode 100644 uni_modules/uni-countdown/changelog.md
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/en.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/index.js
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue
create mode 100644 uni_modules/uni-countdown/package.json
create mode 100644 uni_modules/uni-countdown/readme.md
create mode 100644 uni_modules/uni-data-checkbox/changelog.md
create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/clientdb.js
create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue
create mode 100644 uni_modules/uni-data-checkbox/package.json
create mode 100644 uni_modules/uni-data-checkbox/readme.md
create mode 100644 uni_modules/uni-data-picker/changelog.md
create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js
create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue
create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue
create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
create mode 100644 uni_modules/uni-data-picker/package.json
create mode 100644 uni_modules/uni-data-picker/readme.md
create mode 100644 uni_modules/uni-data-select/changelog.md
create mode 100644 uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
create mode 100644 uni_modules/uni-data-select/package.json
create mode 100644 uni_modules/uni-data-select/readme.md
create mode 100644 uni_modules/uni-dateformat/changelog.md
create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/date-format.js
create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue
create mode 100644 uni_modules/uni-dateformat/package.json
create mode 100644 uni_modules/uni-dateformat/readme.md
create mode 100644 uni_modules/uni-datetime-picker/changelog.md
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
create mode 100644 uni_modules/uni-datetime-picker/package.json
create mode 100644 uni_modules/uni-datetime-picker/readme.md
create mode 100644 uni_modules/uni-drawer/changelog.md
create mode 100644 uni_modules/uni-drawer/components/uni-drawer/keypress.js
create mode 100644 uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue
create mode 100644 uni_modules/uni-drawer/package.json
create mode 100644 uni_modules/uni-drawer/readme.md
create mode 100644 uni_modules/uni-easyinput/changelog.md
create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/common.js
create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
create mode 100644 uni_modules/uni-easyinput/package.json
create mode 100644 uni_modules/uni-easyinput/readme.md
create mode 100644 uni_modules/uni-fab/changelog.md
create mode 100644 uni_modules/uni-fab/components/uni-fab/uni-fab.vue
create mode 100644 uni_modules/uni-fab/package.json
create mode 100644 uni_modules/uni-fab/readme.md
create mode 100644 uni_modules/uni-fav/changelog.md
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/en.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/index.js
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-fav/components/uni-fav/uni-fav.vue
create mode 100644 uni_modules/uni-fav/package.json
create mode 100644 uni_modules/uni-fav/readme.md
create mode 100644 uni_modules/uni-file-picker/changelog.md
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js
create mode 100644 uni_modules/uni-file-picker/package.json
create mode 100644 uni_modules/uni-file-picker/readme.md
create mode 100644 uni_modules/uni-forms/changelog.md
create mode 100644 uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue
create mode 100644 uni_modules/uni-forms/components/uni-forms/uni-forms.vue
create mode 100644 uni_modules/uni-forms/components/uni-forms/utils.js
create mode 100644 uni_modules/uni-forms/components/uni-forms/validate.js
create mode 100644 uni_modules/uni-forms/package.json
create mode 100644 uni_modules/uni-forms/readme.md
create mode 100644 uni_modules/uni-goods-nav/changelog.md
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue
create mode 100644 uni_modules/uni-goods-nav/package.json
create mode 100644 uni_modules/uni-goods-nav/readme.md
create mode 100644 uni_modules/uni-grid/changelog.md
create mode 100644 uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
create mode 100644 uni_modules/uni-grid/components/uni-grid/uni-grid.vue
create mode 100644 uni_modules/uni-grid/package.json
create mode 100644 uni_modules/uni-grid/readme.md
create mode 100644 uni_modules/uni-group/changelog.md
create mode 100644 uni_modules/uni-group/components/uni-group/uni-group.vue
create mode 100644 uni_modules/uni-group/package.json
create mode 100644 uni_modules/uni-group/readme.md
create mode 100644 uni_modules/uni-icons/changelog.md
create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.uvue
create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file.ts
create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js
create mode 100644 uni_modules/uni-icons/package.json
create mode 100644 uni_modules/uni-icons/readme.md
create mode 100644 uni_modules/uni-indexed-list/changelog.md
create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue
create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue
create mode 100644 uni_modules/uni-indexed-list/package.json
create mode 100644 uni_modules/uni-indexed-list/readme.md
create mode 100644 uni_modules/uni-link/changelog.md
create mode 100644 uni_modules/uni-link/components/uni-link/uni-link.vue
create mode 100644 uni_modules/uni-link/package.json
create mode 100644 uni_modules/uni-link/readme.md
create mode 100644 uni_modules/uni-list/changelog.md
create mode 100644 uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue
create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss
create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
create mode 100644 uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-list.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.vue
create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.wxs
create mode 100644 uni_modules/uni-list/package.json
create mode 100644 uni_modules/uni-list/readme.md
create mode 100644 uni_modules/uni-load-more/changelog.md
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
create mode 100644 uni_modules/uni-load-more/package.json
create mode 100644 uni_modules/uni-load-more/readme.md
create mode 100644 uni_modules/uni-nav-bar/changelog.md
create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue
create mode 100644 uni_modules/uni-nav-bar/package.json
create mode 100644 uni_modules/uni-nav-bar/readme.md
create mode 100644 uni_modules/uni-notice-bar/changelog.md
create mode 100644 uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
create mode 100644 uni_modules/uni-notice-bar/package.json
create mode 100644 uni_modules/uni-notice-bar/readme.md
create mode 100644 uni_modules/uni-number-box/changelog.md
create mode 100644 uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue
create mode 100644 uni_modules/uni-number-box/package.json
create mode 100644 uni_modules/uni-number-box/readme.md
create mode 100644 uni_modules/uni-pagination/changelog.md
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/en.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/es.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/index.js
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue
create mode 100644 uni_modules/uni-pagination/package.json
create mode 100644 uni_modules/uni-pagination/readme.md
create mode 100644 uni_modules/uni-popup/changelog.md
create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js
create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue
create mode 100644 uni_modules/uni-popup/package.json
create mode 100644 uni_modules/uni-popup/readme.md
create mode 100644 uni_modules/uni-rate/changelog.md
create mode 100644 uni_modules/uni-rate/components/uni-rate/uni-rate.vue
create mode 100644 uni_modules/uni-rate/package.json
create mode 100644 uni_modules/uni-rate/readme.md
create mode 100644 uni_modules/uni-row/changelog.md
create mode 100644 uni_modules/uni-row/components/uni-col/uni-col.vue
create mode 100644 uni_modules/uni-row/components/uni-row/uni-row.vue
create mode 100644 uni_modules/uni-row/package.json
create mode 100644 uni_modules/uni-row/readme.md
create mode 100644 uni_modules/uni-scss/changelog.md
create mode 100644 uni_modules/uni-scss/index.scss
create mode 100644 uni_modules/uni-scss/package.json
create mode 100644 uni_modules/uni-scss/readme.md
create mode 100644 uni_modules/uni-scss/styles/index.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss
create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss
create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss
create mode 100644 uni_modules/uni-scss/theme.scss
create mode 100644 uni_modules/uni-scss/variables.scss
create mode 100644 uni_modules/uni-search-bar/changelog.md
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
create mode 100644 uni_modules/uni-search-bar/package.json
create mode 100644 uni_modules/uni-search-bar/readme.md
create mode 100644 uni_modules/uni-segmented-control/changelog.md
create mode 100644 uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue
create mode 100644 uni_modules/uni-segmented-control/package.json
create mode 100644 uni_modules/uni-segmented-control/readme.md
create mode 100644 uni_modules/uni-steps/changelog.md
create mode 100644 uni_modules/uni-steps/components/uni-steps/uni-steps.vue
create mode 100644 uni_modules/uni-steps/package.json
create mode 100644 uni_modules/uni-steps/readme.md
create mode 100644 uni_modules/uni-swipe-action/changelog.md
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs
create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue
create mode 100644 uni_modules/uni-swipe-action/package.json
create mode 100644 uni_modules/uni-swipe-action/readme.md
create mode 100644 uni_modules/uni-swiper-dot/changelog.md
create mode 100644 uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue
create mode 100644 uni_modules/uni-swiper-dot/package.json
create mode 100644 uni_modules/uni-swiper-dot/readme.md
create mode 100644 uni_modules/uni-table/changelog.md
create mode 100644 uni_modules/uni-table/components/uni-table/uni-table.vue
create mode 100644 uni_modules/uni-table/components/uni-tbody/uni-tbody.vue
create mode 100644 uni_modules/uni-table/components/uni-td/uni-td.vue
create mode 100644 uni_modules/uni-table/components/uni-th/filter-dropdown.vue
create mode 100644 uni_modules/uni-table/components/uni-th/uni-th.vue
create mode 100644 uni_modules/uni-table/components/uni-thead/uni-thead.vue
create mode 100644 uni_modules/uni-table/components/uni-tr/table-checkbox.vue
create mode 100644 uni_modules/uni-table/components/uni-tr/uni-tr.vue
create mode 100644 uni_modules/uni-table/i18n/en.json
create mode 100644 uni_modules/uni-table/i18n/es.json
create mode 100644 uni_modules/uni-table/i18n/fr.json
create mode 100644 uni_modules/uni-table/i18n/index.js
create mode 100644 uni_modules/uni-table/i18n/zh-Hans.json
create mode 100644 uni_modules/uni-table/i18n/zh-Hant.json
create mode 100644 uni_modules/uni-table/package.json
create mode 100644 uni_modules/uni-table/readme.md
create mode 100644 uni_modules/uni-tag/changelog.md
create mode 100644 uni_modules/uni-tag/components/uni-tag/uni-tag.vue
create mode 100644 uni_modules/uni-tag/package.json
create mode 100644 uni_modules/uni-tag/readme.md
create mode 100644 uni_modules/uni-title/changelog.md
create mode 100644 uni_modules/uni-title/components/uni-title/uni-title.vue
create mode 100644 uni_modules/uni-title/package.json
create mode 100644 uni_modules/uni-title/readme.md
create mode 100644 uni_modules/uni-tooltip/changelog.md
create mode 100644 uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue
create mode 100644 uni_modules/uni-tooltip/package.json
create mode 100644 uni_modules/uni-tooltip/readme.md
create mode 100644 uni_modules/uni-transition/changelog.md
create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js
create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue
create mode 100644 uni_modules/uni-transition/package.json
create mode 100644 uni_modules/uni-transition/readme.md
create mode 100644 utils/auth.js
create mode 100644 utils/common.js
create mode 100644 utils/constant.js
create mode 100644 utils/errorCode.js
create mode 100644 utils/permission.js
create mode 100644 utils/request.js
create mode 100644 utils/storage.js
create mode 100644 utils/upload.js
create mode 100644 utils/validate.js
create mode 100644 自适应优化方案.md
create mode 100644 跨平台兼容优化方案.md
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..59c9154
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+######################################################################
+# Build Tools
+
+/unpackage/*
+/node_modules/*
+
+######################################################################
+# Development Tools
+
+/.idea/*
+/.vscode/*
+/.hbuilderx/*
+
+package-lock.json
+yarn.lock
+
diff --git a/.trae/documents/优化浅色模式样式.md b/.trae/documents/优化浅色模式样式.md
new file mode 100644
index 0000000..9492dda
--- /dev/null
+++ b/.trae/documents/优化浅色模式样式.md
@@ -0,0 +1,21 @@
+## 修改浅色模式样式,增强模块区分度
+
+### 修改内容:
+1. **调整CSS变量**(在 `:root` 中)
+ - 背景色:`#f5f7fa` → `#e8ecf1`(增强对比)
+ - 卡片阴影:`rgba(0, 0, 0, 0.05)` → `rgba(0, 0, 0, 0.12)`(更明显)
+ - 边框色:`#e0e0e0` → `#d1d5db`(更清晰的边框)
+ - 分割线:`darkgray` → `#d1d5db`
+
+2. **增强卡片样式**
+ - 添加微妙的边框效果
+ - 增强阴影深度
+ - 优化卡片与背景的对比
+
+3. **保持深色模式不变**
+ - 深色模式已经很清晰,无需修改
+
+### 预期效果:
+- 模块之间区分更明显
+- 视觉层次更清晰
+- 保持简洁风格的同时提升可读性
\ No newline at end of file
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..52628e7
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,33 @@
+
+
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2c46dba
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 若依
+
+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/README.md b/README.md
new file mode 100644
index 0000000..45b1e27
--- /dev/null
+++ b/README.md
@@ -0,0 +1,51 @@
+
+
+
+RuoYi v1.2.0
+基于UniApp开发的轻量级移动端框架
+
+
+
+
+
+
+## 平台简介
+
+RuoYi App 移动解决方案,采用uniapp框架,一份代码多终端适配,同时支持APP、小程序、H5!实现了与[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)、[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)完美对接的移动解决方案!目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
+
+* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 或 [RuoYi-Cloud](https://github.com/yangzongzhuan/RuoYi-Cloud) 版本。
+* 应用框架基于[uniapp](https://uniapp.dcloud.net.cn/),支持小程序、H5、Android和IOS。
+* 前端组件采用[uni-ui](https://github.com/dcloudio/uni-ui),全端兼容的高性能UI框架。
+* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)
+
+
+## 技术文档
+
+- 官网网站:[http://ruoyi.vip](http://ruoyi.vip)
+- 文档地址:[http://doc.ruoyi.vip](http://doc.ruoyi.vip)
+- H5页体验:[http://h5.ruoyi.vip](http://h5.ruoyi.vip)
+- QQ交流群: ①133713780(满)、②146013835(满)、③189091635
+- 小程序体验
+
+
+
+
+## 演示图
+
+
+
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+
+
+  |
+  |
+  |
+
+
diff --git a/api/login.js b/api/login.js
new file mode 100644
index 0000000..c69249d
--- /dev/null
+++ b/api/login.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+ const data = {
+ username,
+ password,
+ code,
+ uuid
+ }
+ return request({
+ 'url': '/login',
+ headers: {
+ isToken: false
+ },
+ 'method': 'post',
+ 'data': data
+ })
+}
+
+// 注册方法
+export function register(data) {
+ return request({
+ url: '/register',
+ headers: {
+ isToken: false
+ },
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+ return request({
+ 'url': '/getInfo',
+ 'method': 'get'
+ })
+}
+
+// 退出方法
+export function logout() {
+ return request({
+ 'url': '/logout',
+ 'method': 'post'
+ })
+}
+
+// 获取验证码
+export function getCodeImg() {
+ return request({
+ 'url': '/captchaImage',
+ headers: {
+ isToken: false
+ },
+ method: 'get',
+ timeout: 20000
+ })
+}
+
diff --git a/api/product.js b/api/product.js
new file mode 100644
index 0000000..4b3c730
--- /dev/null
+++ b/api/product.js
@@ -0,0 +1,256 @@
+import { getToken } from '@/utils/auth'
+import { toast } from '@/utils/common'
+
+// 参数转URL查询字符串
+function tansParams(params) {
+ let result = ''
+ for (const propName of Object.keys(params)) {
+ const value = params[propName]
+ var part = encodeURIComponent(propName) + "="
+ if (value !== null && value !== "" && typeof (value) !== "undefined") {
+ if (typeof value === 'object') {
+ for (const key of Object.keys(value)) {
+ if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
+ let params = propName + '[' + key + ']'
+ var subPart = encodeURIComponent(params) + "="
+ result += subPart + encodeURIComponent(value[key]) + "&"
+ }
+ }
+ } else {
+ result += part + encodeURIComponent(value) + "&"
+ }
+ }
+ }
+ return result
+}
+
+// 专门用于8081端口的请求
+const request8081 = config => {
+ config.header = config.header || {}
+
+ // 8081端口可能使用不同的认证方式
+ const token = getToken()
+
+ console.log('=== 8081端口请求详情 ===')
+ console.log('Token值:', token)
+ console.log('Token存在:', !!token)
+
+ if (token) {
+ // 尝试多种认证方式
+ // 方式1:Bearer Token(标准JWT)
+ config.header['Authorization'] = 'Bearer ' + token
+
+ // 方式2:直接使用token(不带Bearer)
+ // config.header['Authorization'] = token
+
+ // 方式3:自定义认证头
+ // config.header['X-Auth-Token'] = token
+
+ // 方式4:Cookie方式
+ // config.header['Cookie'] = 'token=' + token
+ }
+
+ // 处理GET请求参数
+ let requestUrl = config.baseUrl + config.url
+ if (config.params) {
+ let url = requestUrl + '?' + tansParams(config.params)
+ requestUrl = url.slice(0, -1)
+ }
+
+ console.log('使用的认证方式:', 'Bearer Token')
+ console.log('请求头:', config.header)
+ console.log('请求URL:', requestUrl)
+ console.log('请求参数:', config.params)
+ console.log('请求方法:', config.method)
+
+ return new Promise((resolve, reject) => {
+ // 为PUT请求设置Content-Type
+ if (config.method && config.method.toLowerCase() === 'put') {
+ config.header = {
+ ...config.header,
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ uni.request({
+ method: config.method || 'get',
+ timeout: config.timeout || 10000,
+ url: requestUrl,
+ data: config.data,
+ header: config.header,
+ dataType: 'json'
+ }).then(response => {
+ let [error, res] = response
+ console.log('=== 8081端口响应详情 ===')
+ // console.log('响应状态码:', res.statusCode)
+ console.log('响应头:', res.header)
+ console.log('响应数据:', res.data)
+ console.log('响应数据类型:', typeof res.data)
+
+ if (error) {
+ toast('后端接口连接异常')
+ reject('后端接口连接异常')
+ return
+ }
+
+ const code = res.data.code || 200
+ const msg = res.data.msg || '请求失败'
+
+ // console.log('业务状态码:', code)
+ // console.log('业务消息:', msg)
+
+ if (code === 401) {
+ toast('认证失败,请重新登录')
+ reject('401')
+ } else if (code === 403) {
+ // console.log('=== 403错误详细信息 ===')
+ // console.log('完整响应:', JSON.stringify(res, null, 2))
+ toast('没有权限访问该资源')
+ reject('403')
+ } else if (code === 500) {
+ toast(msg)
+ reject('500')
+ } else if (code !== 200) {
+ toast(msg)
+ reject(code)
+ }
+
+ resolve(res.data)
+ }).catch(error => {
+ console.error('8081端口请求异常:', error)
+ toast('网络请求失败')
+ reject(error)
+ })
+ })
+}
+
+// 获取商品列表
+export function getProductList(params) {
+ const token = getToken()
+ // console.log('=== 商品列表请求诊断 ===')
+ // console.log('1. Token值:', token)
+ // console.log('2. Token长度:', token ? token.length : 0)
+ // console.log('3. Token前缀:', token ? token.substring(0, 20) + '...' : '无')
+ // console.log('4. 请求URL:', 'http://193.112.94.36:8081/mall/product/list')
+ // console.log('5. 认证方式:', 'Bearer Token (与8080共享)')
+
+ return request8081({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: '/mall/product/list',
+ method: 'get',
+ params: params
+ })
+}
+
+// 删除商品
+export function deleteProduct(id) {
+ return request8081({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: `/mall/product/delete/${id}`,
+ method: 'delete'
+ })
+}
+
+// 新增商品
+export function addProduct(data) {
+ return request8081({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: '/mall/product/add',
+ method: 'post',
+ data: data
+ })
+}
+
+// 新增商品(带文件上传)
+export function addProductWithFile(filePath, formData) {
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ url: 'http://193.112.94.36:8081/mall/product/add',
+ filePath: filePath,
+ name: 'file',
+ formData: formData,
+ header: {
+ 'Authorization': 'Bearer ' + getToken()
+ },
+ success: (uploadRes) => {
+ const res = JSON.parse(uploadRes.data);
+ resolve(res);
+ },
+ fail: (error) => {
+ reject(error);
+ }
+ });
+ });
+}
+
+// 获取商品详情
+export function getProductDetail(id) {
+ return request8081({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: `/mall/product/${id}`,
+ method: 'get'
+ })
+}
+
+// 修改商品(form-data格式,支持文件上传)
+export function updateProductWithFile(filePath, formData) {
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ url: 'http://193.112.94.36:8081/mall/product/update',
+ filePath: filePath,
+ name: 'file',
+ formData: formData,
+ header: {
+ 'Authorization': 'Bearer ' + getToken()
+ },
+ success: (uploadRes) => {
+ const res = JSON.parse(uploadRes.data);
+ resolve(res);
+ },
+ fail: (error) => {
+ reject(error);
+ }
+ });
+ });
+}
+
+// 修改商品
+export function updateProduct(data) {
+ return request8081({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: '/mall/product/update',
+ method: 'post',
+ data: data
+ })
+}
+
+// 商品数据导入(文件上传)
+export function importProductData(filePath, formData) {
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ url: 'http://193.112.94.36:8081/mall/product/importData',
+ filePath: filePath,
+ name: 'file',
+ formData: formData,
+ header: {
+ 'Authorization': 'Bearer ' + getToken()
+ },
+ success: (uploadRes) => {
+ const res = JSON.parse(uploadRes.data);
+ resolve(res);
+ },
+ fail: (error) => {
+ reject(error);
+ }
+ });
+ });
+}
+
+// 获取导入记录
+export function getImportRecord() {
+ return request8081({
+ baseUrl: 'http://192.168.0.7:8081',
+ url: '/mall/product/importRecord',
+ method: 'get'
+ });
+}
\ No newline at end of file
diff --git a/api/store.js b/api/store.js
new file mode 100644
index 0000000..6d27ad5
--- /dev/null
+++ b/api/store.js
@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+// 根据用户ID查询门店列表
+export function getStoreList(userId) {
+ return request({
+ baseUrl: 'http://193.112.94.36:8081',
+ url: `/mall/store/getUserStore/${userId}`,
+ method: 'get'
+ })
+}
+
diff --git a/api/system/dict/data.js b/api/system/dict/data.js
new file mode 100644
index 0000000..18cac8d
--- /dev/null
+++ b/api/system/dict/data.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询字典数据列表
+export function listData(query) {
+ return request({
+ url: '/system/dict/data/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典数据详细
+export function getData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'get'
+ })
+}
+
+// 根据字典类型查询字典数据信息
+export function getDicts(dictType) {
+ return request({
+ url: '/system/dict/data/type/' + dictType,
+ method: 'get'
+ })
+}
+
+// 新增字典数据
+export function addData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典数据
+export function updateData(data) {
+ return request({
+ url: '/system/dict/data',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典数据
+export function delData(dictCode) {
+ return request({
+ url: '/system/dict/data/' + dictCode,
+ method: 'delete'
+ })
+}
+
+// 测试接口
+export function getOen() {
+ return request({
+ url: '/system/config/test',
+ method: 'get'
+ })
+}
diff --git a/api/system/dict/type.js b/api/system/dict/type.js
new file mode 100644
index 0000000..a0254ba
--- /dev/null
+++ b/api/system/dict/type.js
@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// 查询字典类型列表
+export function listType(query) {
+ return request({
+ url: '/system/dict/type/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询字典类型详细
+export function getType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'get'
+ })
+}
+
+// 新增字典类型
+export function addType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改字典类型
+export function updateType(data) {
+ return request({
+ url: '/system/dict/type',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除字典类型
+export function delType(dictId) {
+ return request({
+ url: '/system/dict/type/' + dictId,
+ method: 'delete'
+ })
+}
+
+// 刷新字典缓存
+export function refreshCache() {
+ return request({
+ url: '/system/dict/type/refreshCache',
+ method: 'delete'
+ })
+}
+
+// 获取字典选择框列表
+export function optionselect() {
+ return request({
+ url: '/system/dict/type/optionselect',
+ method: 'get'
+ })
+}
diff --git a/api/system/user.js b/api/system/user.js
new file mode 100644
index 0000000..0e307ea
--- /dev/null
+++ b/api/system/user.js
@@ -0,0 +1,41 @@
+import upload from '@/utils/upload'
+import request from '@/utils/request'
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+ const data = {
+ oldPassword,
+ newPassword
+ }
+ return request({
+ url: '/system/user/profile/updatePwd',
+ method: 'put',
+ data: data
+ })
+}
+
+// 查询用户个人信息
+export function getUserProfile() {
+ return request({
+ url: '/system/user/profile',
+ method: 'get'
+ })
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+ return request({
+ url: '/system/user/profile',
+ method: 'put',
+ data: data
+ })
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+ return upload({
+ url: '/system/user/profile/avatar',
+ name: data.name,
+ filePath: data.filePath
+ })
+}
diff --git a/components/ScanView.vue b/components/ScanView.vue
new file mode 100644
index 0000000..7df19f5
--- /dev/null
+++ b/components/ScanView.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+ 正在扫描...
+
+
+
+
+
+
+ {{ flashOn ? '关闭手电' : '开启手电' }}
+
+
+
+ {{ scanPaused ? '继续扫码' : '暂停扫码' }}
+
+
+
+
+
+
+
+
diff --git a/components/uni-section/uni-section.vue b/components/uni-section/uni-section.vue
new file mode 100644
index 0000000..9a52e0b
--- /dev/null
+++ b/components/uni-section/uni-section.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..3bbb724
--- /dev/null
+++ b/config.js
@@ -0,0 +1,29 @@
+// 应用全局配置
+module.exports = {
+ // baseUrl: 'https://vue.ruoyi.vip/prod-api',
+
+ baseUrl:'http://193.112.94.36:8080',
+ // prodApi: 'https://vue.ruoyi.vip/prod-api',
+ // baseUrl: 'http://localhost:8080',
+ // 应用信息
+ appInfo: {
+ // 应用名称
+ name: "ruoyi-app",
+ // 应用版本
+ version: "1.2.0",
+ // 应用logo
+ logo: "/static/logo.png",
+ // 官方网站
+ site_url: "http://ruoyi.vip",
+ // 政策协议
+ agreements: [{
+ title: "隐私政策",
+ url: "https://ruoyi.vip/protocol.html"
+ },
+ {
+ title: "用户服务协议",
+ url: "https://ruoyi.vip/protocol.html"
+ }
+ ]
+ }
+}
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..ab2c781
--- /dev/null
+++ b/main.js
@@ -0,0 +1,20 @@
+import Vue from 'vue'
+import App from './App'
+import store from './store' // store
+import plugins from './plugins' // plugins
+import './permission' // permission
+import { getDicts } from "@/api/system/dict/data"
+
+Vue.use(plugins)
+
+Vue.config.productionTip = false
+Vue.prototype.$store = store
+Vue.prototype.getDicts = getDicts
+
+App.mpType = 'app'
+
+const app = new Vue({
+ ...App
+})
+
+app.$mount()
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..a542f59
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,78 @@
+{
+ "name" : "若依移动端",
+ "appid" : "__UNI__34800B4",
+ "description" : "111",
+ "versionName" : "1.2.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "modules" : {
+ "Barcode" : {},
+ "Camera" : {}
+ },
+ "distribute" : {
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios" : {
+ "dSYMs" : false,
+ "privacyDescription" : {
+ "NSCameraUsageDescription" : "需要使用相机扫描条码",
+ "NSPhotoLibraryUsageDescription" : "需要访问相册选择图片扫码"
+ }
+ },
+ "sdkConfigs" : {}
+ }
+ },
+ "quickapp" : {},
+ "mp-weixin" : {
+ "appid" : "wxccd7e2a0911b3397",
+ "setting" : {
+ "urlCheck" : false,
+ "es6" : false,
+ "minified" : true,
+ "postcss" : true
+ },
+ "optimization" : {
+ "subPackages" : true
+ },
+ "usingComponents" : true
+ },
+ "vueVersion" : "2",
+ "h5" : {
+ "template" : "static/index.html",
+ "devServer" : {
+ "port" : 9090,
+ "https" : false
+ },
+ "title" : "RuoYi-App",
+ "router" : {
+ "mode" : "hash",
+ "base" : "./"
+ }
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..ee695a2
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,176 @@
+{
+ "pages": [{
+ "path": "pages/login",
+ "style": {
+ "navigationBarTitleText": "登录"
+ }
+ },
+ {
+ "path": "pages/register",
+ "style": {
+ "navigationBarTitleText": "注册"
+ }
+ }, {
+ "path": "pages/index",
+ "style": {
+ "navigationBarTitleText": "若依移动端框架",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "pages/work/index",
+ "style": {
+ "navigationBarTitleText": "工作台"
+ }
+ }, {
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "我的"
+ }
+ }, {
+ "path": "pages/mine/avatar/index",
+ "style": {
+ "navigationBarTitleText": "修改头像"
+ }
+ }, {
+ "path": "pages/mine/info/index",
+ "style": {
+ "navigationBarTitleText": "个人信息"
+ }
+ }, {
+ "path": "pages/mine/info/edit",
+ "style": {
+ "navigationBarTitleText": "编辑资料"
+ }
+ }, {
+ "path": "pages/mine/pwd/index",
+ "style": {
+ "navigationBarTitleText": "修改密码"
+ }
+ }, {
+ "path": "pages/mine/setting/index",
+ "style": {
+ "navigationBarTitleText": "应用设置"
+ }
+ }, {
+ "path": "pages/mine/help/index",
+ "style": {
+ "navigationBarTitleText": "常见问题"
+ }
+ }, {
+ "path": "pages/mine/about/index",
+ "style": {
+ "navigationBarTitleText": "关于我们"
+ }
+ }, {
+ "path": "pages/common/webview/index",
+ "style": {
+ "navigationBarTitleText": "浏览网页"
+ }
+ }, {
+ "path": "pages/common/textview/index",
+ "style": {
+ "navigationBarTitleText": "浏览文本"
+ }
+},
+{
+ "path": "pages/menu",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/user/user",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/settings/settings",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/product/product",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/asset/asset",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/enter/enter",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/addProduct/addProduct",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/storeSelect/storeSelect",
+ "style": {
+ "navigationBarTitleText": "选择门店"
+ }
+},
+{
+ "path": "pages/edit/edit",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+},
+{
+ "path": "pages/Import /Import ",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ },
+ {
+ "path": "pages/userStores/userStores",
+ "style": {
+ "navigationBarTitleText": "用户门店关联"
+ }
+ },
+ {
+ "path": "pages/userStores/userStores",
+ "style": {
+ "navigationBarTitleText": ""
+ }
+ }
+],
+ "tabBar": {
+ "color": "#000000",
+ "selectedColor": "#000000",
+ "borderStyle": "white",
+ "backgroundColor": "#ffffff",
+ "list": [{
+ "pagePath": "pages/index",
+ "iconPath": "/static/images/tabbar/Frame 87.png",
+ "selectedIconPath": "/static/images/tabbar/Frame 86.png",
+ "text": "我的店"
+ }, {
+ "pagePath": "pages/work/index",
+ "iconPath": "/static/images/tabbar/Union.png",
+ "selectedIconPath": "/static/images/tabbar/Union-1.png",
+ "text": "热销榜"
+ }, {
+ "pagePath": "pages/mine/index",
+ "iconPath": "/static/images/tabbar/Vector-1.png",
+ "selectedIconPath": "/static/images/tabbar/Vector.png",
+ "text": "消息"
+ }
+ ]
+ },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "RuoYi",
+ "navigationBarBackgroundColor": "#FFFFFF"
+ }
+}
diff --git a/pages/Import /Import .vue b/pages/Import /Import .vue
new file mode 100644
index 0000000..9bf1c32
--- /dev/null
+++ b/pages/Import /Import .vue
@@ -0,0 +1,493 @@
+
+
+
+
+
+ ←
+
+ 批量导入
+
+ ···
+
+
+
+
+
+
+ 批量导入
+
+
+ 导入记录
+
+
+
+
+
+
+
+
+
+
+ ↥
+
+ 点击上传文件
+ (仅支持10M以下,以xls、xlsx或csv结尾的文件类型)
+
+
+
+ {{uploadFileName}}
+
+ 重新选择
+ 取消
+
+
+
+
+
+
+
+ 1. 可导入:供应商进货单、其他收银系统的商品导出明细
+ 2. 支持录入条形码、商品名称、零售价、库存、进货价、商品品牌
+ 3. 导入成功后会在原商品基础上增加库存,不会覆盖原库存
+
+
+
+
+
+
+
+ 支持导入更大文件、更多商品数、商品信息
+
+ 请在电脑端访问 http://e.weidian.com/main
+ ↗
+
+
+
+
+
+
+
+
+ 如果您没有电脑,可以试试我们的快捷设置功能
+
+ 3-20分钟快速设置价格 >
+
+
+
+
+
+
+
+
+ 📋
+ 暂无导入记录
+ 导入商品后,记录将展示在这里
+
+
+
+ {{item.fileName}}
+
+ {{item.createTime}}
+ {{item.statusText}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/addProduct/addProduct.vue b/pages/addProduct/addProduct.vue
new file mode 100644
index 0000000..5d69fef
--- /dev/null
+++ b/pages/addProduct/addProduct.vue
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+ 商品名称
+
+
+
+
+
+ 条码
+
+
+
+ 扫码
+
+
+
+
+
+
+ 商品图
+
+
+ +
+ 点击上传商品图片
+
+
+
+
+
+
+
+
+
+ 售价
+
+
+ 元
+
+
+
+
+
+ 推荐价格(点击快速设置售价)
+
+
+ 82%商家卖
+ 5.0元
+
+
+ 9%商家卖
+ 5.5元
+
+
+ 2%商家卖
+ 4.5元
+
+
+
+
+
+
+
+
+ 进货数量
+
+
+ 件
+
+
+
+
+
+ 进货价
+
+
+ 元
+
+
+
+
+
+ 保质期管理
+
+
+
+
+
+ 保质期天数
+
+
+ 1年
+ 36天
+
+
+ 9个月
+ 27天
+
+
+ 6个月
+ 18天
+
+
+ 8个月
+ 24天
+
+
+ 10个月
+ 30天
+
+
+
+
+
+
+ 临期提醒天数
+
+ {{ warningDaysDisplay }}
+ 天
+
+
+
+
+
+ 生产日期
+
+
+
+
+
+ 货架码
+
+
+
+
+
+ 商品编码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/asset/asset.vue b/pages/asset/asset.vue
new file mode 100644
index 0000000..de9fad8
--- /dev/null
+++ b/pages/asset/asset.vue
@@ -0,0 +1,284 @@
+
+
+
+
+ 我的资产
+ ¥0.00
+
+
+
+ 可提现
+ ¥0.00
+
+
+
+ 待结算
+ ¥0.00
+ 次日可提现
+
+
+
+
+
+
+
+
+
+
+
+ 资金明细
+
+
+
+
+
+ 可提现
+ ¥0.00
+
+ >
+
+
+
+
+ 待结算(元)
+ ¥0.00
+
+ ✓
+
+
+
+
+ 已提现(元)
+ ¥0.00
+
+ >
+
+
+
+
+ 现金支付(元)
+ ¥0.00
+
+ >
+
+
+
+
+ 我的银行卡
+ 未绑定
+
+ >
+
+
+
+
+
+ 常见问题
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/common/textview/index.vue b/pages/common/textview/index.vue
new file mode 100644
index 0000000..e9b05fb
--- /dev/null
+++ b/pages/common/textview/index.vue
@@ -0,0 +1,43 @@
+
+
+
+ {{ content }}
+
+
+
+
+
+
+
diff --git a/pages/common/webview/index.vue b/pages/common/webview/index.vue
new file mode 100644
index 0000000..8388c76
--- /dev/null
+++ b/pages/common/webview/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/pages/edit/edit.vue b/pages/edit/edit.vue
new file mode 100644
index 0000000..3879e81
--- /dev/null
+++ b/pages/edit/edit.vue
@@ -0,0 +1,892 @@
+
+
+
+
+
+ ←
+
+ 编辑商品
+
+ ···
+
+
+
+
+
+
+ 更换图片
+
+
+
+
+
+
+
+ *名称
+
+
+
+
+
+
+ 商品单位
+
+
+
+
+
+
+ *条码
+
+
+
+ 扫码
+
+
+
+
+
+
+ *售价
+
+
+
+ 元
+
+
+
+
+
+
+ 推荐价格(点击快速设置售价)i
+
+
+
+ {{ item.desc }}
+ {{ item.price }}元
+
+
+
+
+
+
+ 库存
+
+
+ 件
+
+
+
+
+
+ 最近进货价
+
+
+ 元
+
+
+
+
+
+ 货架码
+
+
+
+
+ + 添加更多单位
+
+
+
+
+ 其他设置
+
+
+
+ 保质期管理
+
+
+
+
+
+ 保质期天数
+
+
+ 1年
+ 365天
+
+
+ 9个月
+ 270天
+
+
+ 6个月
+ 180天
+
+
+ 8个月
+ 240天
+
+
+ 10个月
+ 300天
+
+
+
+
+
+
+ 临期提醒天数
+
+
+ 天
+
+
+
+
+
+
+ 未成年人购买香烟提示
+ i
+
+
+
+
+
+
+
+
+
+ 商品分类
+
+
+
+
+
+ 商品品牌
+
+
+
+
+
+ 商品编码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/enter/enter.vue b/pages/enter/enter.vue
new file mode 100644
index 0000000..cfe3376
--- /dev/null
+++ b/pages/enter/enter.vue
@@ -0,0 +1,676 @@
+
+
+
+
+
+
+
+ 录入清单
+
+
+ 记录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 对准商品条码,自动识别
+
+
+
+
+
+
+ 正在扫描...
+
+
+
+
+ {{ flashOn ? '关闭手电' : '开启手电' }}
+
+
+
+ {{ scanPaused ? '继续扫码' : '暂停扫码' }}
+
+
+
+ 全屏扫码
+
+
+
+
+
+
+
+ 扫码功能需要在App中使用
+
+
+
+
+
+
+
+
+ 暂未录入商品
+ 请在上方选择商品录入方式
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index.vue b/pages/index.vue
new file mode 100644
index 0000000..8aa3793
--- /dev/null
+++ b/pages/index.vue
@@ -0,0 +1,1394 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ storeName }}
+
+ 值守中
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 202
+ 今日进店
+
+
+ 121
+ 支付订单
+
+
+ 433.23
+ 支付金额
+
+
+
+ 分享
+
+
+
+
+
+
+
+
+
+
+
+ 待办
+ 店铺暂未投保
+ 去认证 >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 商品管理
+
+
+
+
+
+
+ 订单
+
+
+
+
+
+ 收入资产
+
+
+
+
+
+ 数据分析
+
+
+
+
+
+
+ 实时监控
+
+
+
+
+
+ 查看回放
+
+
+
+
+
+ 值班报告
+
+
+
+
+
+ 服务费
+
+
+
+
+
+ 商品管理
+
+
+
+
+
+
+ 数据分析
+
+
+
+
+
+ 订单管理
+
+
+
+
+
+ 监控视频
+
+
+
+
+
+ 商品管理
+
+
+
+
+
+
+ 数据分析
+
+
+
+
+
+ 订单管理
+
+
+
+
+
+ 监控视频
+
+
+
+
+
+ 商品管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 📈
+ 收入增长趋势分析
+
+
+
+
+
+
+ 把心意,做到生意里
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login.vue b/pages/login.vue
new file mode 100644
index 0000000..3d5de27
--- /dev/null
+++ b/pages/login.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+ 若依移动端登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 没有账号?
+ 立即注册
+
+
+ 登录即代表同意
+ 《用户协议》
+ 《隐私协议》
+
+
+
+
+
+
+
+
+
diff --git a/pages/menu.vue b/pages/menu.vue
new file mode 100644
index 0000000..b187cb8
--- /dev/null
+++ b/pages/menu.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/mine/about/index.vue b/pages/mine/about/index.vue
new file mode 100644
index 0000000..77bc093
--- /dev/null
+++ b/pages/mine/about/index.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+ Copyright © 2025 ruoyi.vip All Rights Reserved.
+
+
+
+
+
+
+
diff --git a/pages/mine/avatar/index.vue b/pages/mine/avatar/index.vue
new file mode 100644
index 0000000..18ac16c
--- /dev/null
+++ b/pages/mine/avatar/index.vue
@@ -0,0 +1,618 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/help/index.vue b/pages/mine/help/index.vue
new file mode 100644
index 0000000..d2e4374
--- /dev/null
+++ b/pages/mine/help/index.vue
@@ -0,0 +1,112 @@
+
+
+
+
+ {{ item.title }}
+
+
+
+ {{ child.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/index.vue b/pages/mine/index.vue
new file mode 100644
index 0000000..2ead74b
--- /dev/null
+++ b/pages/mine/index.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+ 交流群
+
+
+
+ 在线客服
+
+
+
+ 反馈社区
+
+
+
+ 点赞我们
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/info/edit.vue b/pages/mine/info/edit.vue
new file mode 100644
index 0000000..aaf92d1
--- /dev/null
+++ b/pages/mine/info/edit.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/info/index.vue b/pages/mine/info/index.vue
new file mode 100644
index 0000000..65c861a
--- /dev/null
+++ b/pages/mine/info/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/pwd/index.vue b/pages/mine/pwd/index.vue
new file mode 100644
index 0000000..405dcbd
--- /dev/null
+++ b/pages/mine/pwd/index.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/mine/setting/index.vue b/pages/mine/setting/index.vue
new file mode 100644
index 0000000..87f1f06
--- /dev/null
+++ b/pages/mine/setting/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/product/product.vue b/pages/product/product.vue
new file mode 100644
index 0000000..6501aff
--- /dev/null
+++ b/pages/product/product.vue
@@ -0,0 +1,704 @@
+
+
+
+
+ 9:41
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 全部
+
+
+ 临期/过期0
+
+
+ 缺货0
+
+
+ 筛选
+
+
+
+
+
+
+
+
+
+
+
+
+ 已开启微店商店库
+ 微店商品库全226+商品
+
+
+
+ 设置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.productName }}
+ {{ item.productBarCode }}
+ ¥{{ item.storePrice ? item.storePrice.toFixed(2) : '0.00' }}
+
+
+
+
+ 总库存
+ {{ item.stockQuantity }} 件
+ >
+
+
+
+
+
+
+
+
+ 更多
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/register.vue b/pages/register.vue
new file mode 100644
index 0000000..52760fe
--- /dev/null
+++ b/pages/register.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+ 若依移动端注册
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用已有账号登录
+
+
+
+
+
+
+
diff --git a/pages/settings/settings.vue b/pages/settings/settings.vue
new file mode 100644
index 0000000..89b13cf
--- /dev/null
+++ b/pages/settings/settings.vue
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+ 个人信息
+ ›
+
+
+ 店铺信息
+ ›
+
+
+ 子账号管理
+ ›
+
+
+
+
+
+
+
+
+
+ 开关门设置
+ ›
+
+
+ 进店语音设置
+ ›
+
+
+ 推荐设置
+ ›
+
+
+
+
+
+
+
+
+
+ 支付方式认证
+ ›
+
+
+ 自动化扣
+ ›
+
+
+ 音频级别设置
+ ›
+
+
+ 非值守期间现金收银
+ ›
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/storeSelect/storeSelect.vue b/pages/storeSelect/storeSelect.vue
new file mode 100644
index 0000000..7c239b7
--- /dev/null
+++ b/pages/storeSelect/storeSelect.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+ 选择门店
+
+
+
+
+
+
+ {{ item.storeName }}
+ 编码:{{ item.storeCode }}
+
+
+
+
+
+
+ 暂无门店数据
+
+
+
+
+
+
+
diff --git a/pages/user/user.vue b/pages/user/user.vue
new file mode 100644
index 0000000..ef982e8
--- /dev/null
+++ b/pages/user/user.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 昵称
+ 名称
+
+
+ 绑定微信号
+ 名称
+
+
+
+
+
+ 账户安全
+
+ 修改手机号
+
+ >
+
+
+
+ 修改密码
+
+ >
+
+
+
+
+
+
+ 设备管理
+
+ 设备管理
+
+ >
+
+
+
+
+
+
+ 账号管理
+
+ 注销账号
+
+ >
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/userStores/userStores.vue b/pages/userStores/userStores.vue
new file mode 100644
index 0000000..f999347
--- /dev/null
+++ b/pages/userStores/userStores.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+ {{ store.storeName }}
+ 编码:{{ store.storeCode }}
+
+
+
+
+
+
+
+ 暂无门店数据
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/work/index.vue b/pages/work/index.vue
new file mode 100644
index 0000000..04f7a5e
--- /dev/null
+++ b/pages/work/index.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户管理
+
+
+
+
+
+ 角色管理
+
+
+
+
+
+ 菜单管理
+
+
+
+
+
+ 部门管理
+
+
+
+
+
+ 岗位管理
+
+
+
+
+
+ 字典管理
+
+
+
+
+
+ 参数设置
+
+
+
+
+
+ 通知公告
+
+
+
+
+
+ 日志管理
+
+
+
+
+
+
+
+
+
+
diff --git a/permission.js b/permission.js
new file mode 100644
index 0000000..cbaec53
--- /dev/null
+++ b/permission.js
@@ -0,0 +1,39 @@
+import { getToken } from '@/utils/auth'
+
+// 登录页面
+const loginPage = "/pages/login"
+
+// 页面白名单
+const whiteList = [
+ '/pages/login', '/pages/register', '/pages/common/webview/index'
+]
+
+// 检查地址白名单
+function checkWhite(url) {
+ const path = url.split('?')[0]
+ return whiteList.indexOf(path) !== -1
+}
+
+// 页面跳转验证拦截器
+let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
+list.forEach(item => {
+ uni.addInterceptor(item, {
+ invoke(to) {
+ if (getToken()) {
+ if (to.url === loginPage) {
+ uni.reLaunch({ url: "/" })
+ }
+ return true
+ } else {
+ if (checkWhite(to.url)) {
+ return true
+ }
+ uni.reLaunch({ url: loginPage })
+ return false
+ }
+ },
+ fail(err) {
+ console.log(err)
+ }
+ })
+})
diff --git a/plugins/auth.js b/plugins/auth.js
new file mode 100644
index 0000000..3b91c14
--- /dev/null
+++ b/plugins/auth.js
@@ -0,0 +1,60 @@
+import store from '@/store'
+
+function authPermission(permission) {
+ const all_permission = "*:*:*"
+ const permissions = store.getters && store.getters.permissions
+ if (permission && permission.length > 0) {
+ return permissions.some(v => {
+ return all_permission === v || v === permission
+ })
+ } else {
+ return false
+ }
+}
+
+function authRole(role) {
+ const super_admin = "admin"
+ const roles = store.getters && store.getters.roles
+ if (role && role.length > 0) {
+ return roles.some(v => {
+ return super_admin === v || v === role
+ })
+ } else {
+ return false
+ }
+}
+
+export default {
+ // 验证用户是否具备某权限
+ hasPermi(permission) {
+ return authPermission(permission)
+ },
+ // 验证用户是否含有指定权限,只需包含其中一个
+ hasPermiOr(permissions) {
+ return permissions.some(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否含有指定权限,必须全部拥有
+ hasPermiAnd(permissions) {
+ return permissions.every(item => {
+ return authPermission(item)
+ })
+ },
+ // 验证用户是否具备某角色
+ hasRole(role) {
+ return authRole(role)
+ },
+ // 验证用户是否含有指定角色,只需包含其中一个
+ hasRoleOr(roles) {
+ return roles.some(item => {
+ return authRole(item)
+ })
+ },
+ // 验证用户是否含有指定角色,必须全部拥有
+ hasRoleAnd(roles) {
+ return roles.every(item => {
+ return authRole(item)
+ })
+ }
+}
diff --git a/plugins/index.js b/plugins/index.js
new file mode 100644
index 0000000..efbae15
--- /dev/null
+++ b/plugins/index.js
@@ -0,0 +1,14 @@
+import tab from './tab'
+import auth from './auth'
+import modal from './modal'
+
+export default {
+ install(Vue) {
+ // 页签操作
+ Vue.prototype.$tab = tab
+ // 认证对象
+ Vue.prototype.$auth = auth
+ // 模态框对象
+ Vue.prototype.$modal = modal
+ }
+}
diff --git a/plugins/modal.js b/plugins/modal.js
new file mode 100644
index 0000000..46af2f5
--- /dev/null
+++ b/plugins/modal.js
@@ -0,0 +1,78 @@
+export default {
+ // 消息提示
+ msg(content) {
+ uni.showToast({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 错误消息
+ msgError(content) {
+ uni.showToast({
+ title: content,
+ icon: 'error'
+ })
+ },
+ // 成功消息
+ msgSuccess(content) {
+ uni.showToast({
+ title: content,
+ icon: 'success'
+ })
+ },
+ // 隐藏消息
+ hideMsg(content) {
+ uni.hideToast()
+ },
+ // 弹出提示
+ alert(content, title) {
+ uni.showModal({
+ title: title || '系统提示',
+ content: content,
+ showCancel: false
+ })
+ },
+ // 确认窗体
+ confirm(content, title) {
+ return new Promise((resolve, reject) => {
+ uni.showModal({
+ title: title || '系统提示',
+ content: content,
+ cancelText: '取消',
+ confirmText: '确定',
+ success: function(res) {
+ if (res.confirm) {
+ resolve(res.confirm)
+ }
+ }
+ })
+ })
+ },
+ // 提示信息
+ showToast(option) {
+ if (typeof option === "object") {
+ uni.showToast(option)
+ } else {
+ uni.showToast({
+ title: option,
+ icon: "none",
+ duration: 2500
+ })
+ }
+ },
+ // 打开遮罩层
+ loading(content) {
+ uni.showLoading({
+ title: content,
+ icon: 'none'
+ })
+ },
+ // 关闭遮罩层
+ closeLoading() {
+ try {
+ uni.hideLoading()
+ } catch (e) {
+ console.log(e)
+ }
+ }
+}
diff --git a/plugins/tab.js b/plugins/tab.js
new file mode 100644
index 0000000..5d1b305
--- /dev/null
+++ b/plugins/tab.js
@@ -0,0 +1,30 @@
+export default {
+ // 关闭所有页面,打开到应用内的某个页面
+ reLaunch(url) {
+ return uni.reLaunch({
+ url: url
+ })
+ },
+ // 跳转到tabBar页面,并关闭其他所有非tabBar页面
+ switchTab(url) {
+ return uni.switchTab({
+ url: url
+ })
+ },
+ // 关闭当前页面,跳转到应用内的某个页面
+ redirectTo(url) {
+ return uni.redirectTo({
+ url: url
+ })
+ },
+ // 保留当前页面,跳转到应用内的某个页面
+ navigateTo(url) {
+ return uni.navigateTo({
+ url: url
+ })
+ },
+ // 关闭当前页面,返回上一页面或多级页面
+ navigateBack() {
+ return uni.navigateBack()
+ }
+}
diff --git a/static/687b6f95b14eff60f4b77147b3726ab2.jpg b/static/687b6f95b14eff60f4b77147b3726ab2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3fd9c97c8342c2e5cfd876a7cfc89b1d6bf86490
GIT binary patch
literal 26495
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⪚g8|nHA
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
literal 0
HcmV?d00001
diff --git a/static/Frame 61.png b/static/Frame 61.png
new file mode 100644
index 0000000000000000000000000000000000000000..4056f3a884e881e6f1233969b28deca358dc880f
GIT binary patch
literal 5525
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