demo完成数据仓库,自定义全局变量,自定义环境变量,demo首页,自定义组件w-footer,w-loader,w-navbar,w-safe-area,w-safe-var

master
管理员 3 years ago
parent 5f2a5bb71f
commit d7984bf05c

@ -51,6 +51,11 @@
"@dcloudio/uni-mp-toutiao": "3.0.0-3071120230427001",
"@dcloudio/uni-mp-weixin": "3.0.0-3071120230427001",
"@dcloudio/uni-quickapp-webview": "3.0.0-3071120230427001",
"clipboard": "^2.0.11",
"dayjs": "^1.11.7",
"pinia": "2.0.22",
"pinia-plugin-unistorage": "^0.0.17",
"uview-plus": "^3.1.30",
"vue": "^3.2.45",
"vue-i18n": "^9.1.9"
},
@ -60,7 +65,8 @@
"@dcloudio/uni-cli-shared": "3.0.0-3071120230427001",
"@dcloudio/uni-stacktracey": "3.0.0-3071120230427001",
"@dcloudio/vite-plugin-uni": "3.0.0-3071120230427001",
"vite": "4.1.4",
"sass": "^1.59.3"
"sass": "^1.59.3",
"sass-loader": "10",
"vite": "4.1.4"
}
}

@ -19,7 +19,13 @@ specifiers:
'@dcloudio/uni-quickapp-webview': 3.0.0-3071120230427001
'@dcloudio/uni-stacktracey': 3.0.0-3071120230427001
'@dcloudio/vite-plugin-uni': 3.0.0-3071120230427001
sass: 1.59.3
clipboard: ^2.0.11
dayjs: ^1.11.7
pinia: 2.0.22
pinia-plugin-unistorage: ^0.0.17
sass: ^1.59.3
sass-loader: '10'
uview-plus: ^3.1.30
vite: 4.1.4
vue: ^3.2.45
vue-i18n: ^9.1.9
@ -38,6 +44,11 @@ dependencies:
'@dcloudio/uni-mp-toutiao': registry.npmmirror.com/@dcloudio/uni-mp-toutiao/3.0.0-3071120230427001_vue@3.3.2
'@dcloudio/uni-mp-weixin': registry.npmmirror.com/@dcloudio/uni-mp-weixin/3.0.0-3071120230427001_vue@3.3.2
'@dcloudio/uni-quickapp-webview': registry.npmmirror.com/@dcloudio/uni-quickapp-webview/3.0.0-3071120230427001_vue@3.3.2
clipboard: registry.npmmirror.com/clipboard/2.0.11
dayjs: registry.npmmirror.com/dayjs/1.11.7
pinia: registry.npmmirror.com/pinia/2.0.22_vue@3.3.2
pinia-plugin-unistorage: registry.npmmirror.com/pinia-plugin-unistorage/0.0.17_vue@3.3.2
uview-plus: registry.npmmirror.com/uview-plus/3.1.30
vue: registry.npmmirror.com/vue/3.3.2
vue-i18n: registry.npmmirror.com/vue-i18n/9.2.2_vue@3.3.2
@ -48,6 +59,7 @@ devDependencies:
'@dcloudio/uni-stacktracey': registry.npmmirror.com/@dcloudio/uni-stacktracey/3.0.0-3071120230427001
'@dcloudio/vite-plugin-uni': registry.npmmirror.com/@dcloudio/vite-plugin-uni/3.0.0-3071120230427001_vite@4.1.4+vue@3.3.2
sass: registry.npmmirror.com/sass/1.59.3
sass-loader: registry.npmmirror.com/sass-loader/10.4.1_sass@1.59.3
vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
packages:
@ -3002,6 +3014,12 @@ packages:
estree-walker: registry.npmmirror.com/estree-walker/2.0.2
picomatch: registry.npmmirror.com/picomatch/2.3.1
registry.npmmirror.com/@types/json-schema/7.0.11:
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz}
name: '@types/json-schema'
version: 7.0.11
dev: true
registry.npmmirror.com/@vitejs/plugin-legacy/4.0.3_terser@5.17.3+vite@4.1.4:
resolution: {integrity: sha512-RqDQOSEmFSNL42vITkNp8HE8Ak1yjGgaav4B6BGcZ8/URK0wikzwSyhNRirHDkp+snflEEk7iPZXTXUYA9exbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.0.3.tgz}
id: registry.npmmirror.com/@vitejs/plugin-legacy/4.0.3
@ -3278,6 +3296,28 @@ packages:
engines: {node: '>= 10.0.0'}
dev: true
registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6:
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz}
id: registry.npmmirror.com/ajv-keywords/3.5.2
name: ajv-keywords
version: 3.5.2
peerDependencies:
ajv: ^6.9.1
dependencies:
ajv: registry.npmmirror.com/ajv/6.12.6
dev: true
registry.npmmirror.com/ajv/6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz}
name: ajv
version: 6.12.6
dependencies:
fast-deep-equal: registry.npmmirror.com/fast-deep-equal/3.1.3
fast-json-stable-stringify: registry.npmmirror.com/fast-json-stable-stringify/2.1.0
json-schema-traverse: registry.npmmirror.com/json-schema-traverse/0.4.1
uri-js: registry.npmmirror.com/uri-js/4.4.1
dev: true
registry.npmmirror.com/ansi-styles/3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}
name: ansi-styles
@ -3380,6 +3420,12 @@ packages:
version: 3.0.1
engines: {node: '>=6.0.0'}
registry.npmmirror.com/big.js/5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz}
name: big.js
version: 5.2.2
dev: true
registry.npmmirror.com/binary-extensions/2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
name: binary-extensions
@ -3517,6 +3563,16 @@ packages:
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
registry.npmmirror.com/clipboard/2.0.11:
resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz}
name: clipboard
version: 2.0.11
dependencies:
good-listener: registry.npmmirror.com/good-listener/1.2.2
select: registry.npmmirror.com/select/1.1.2
tiny-emitter: registry.npmmirror.com/tiny-emitter/2.1.0
dev: false
registry.npmmirror.com/color-convert/1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}
name: color-convert
@ -3657,6 +3713,12 @@ packages:
name: csstype
version: 3.1.2
registry.npmmirror.com/dayjs/1.11.7:
resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz}
name: dayjs
version: 1.11.7
dev: false
registry.npmmirror.com/debug/2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz}
name: debug
@ -3692,6 +3754,12 @@ packages:
execa: registry.npmmirror.com/execa/5.1.1
dev: true
registry.npmmirror.com/delegate/3.2.0:
resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz}
name: delegate
version: 3.2.0
dev: false
registry.npmmirror.com/depd/2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz}
name: depd
@ -3723,6 +3791,13 @@ packages:
name: electron-to-chromium
version: 1.4.396
registry.npmmirror.com/emojis-list/3.0.0:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz}
name: emojis-list
version: 3.0.0
engines: {node: '>= 4'}
dev: true
registry.npmmirror.com/encodeurl/1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz}
name: encodeurl
@ -3867,6 +3942,12 @@ packages:
- supports-color
dev: true
registry.npmmirror.com/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
name: fast-deep-equal
version: 3.1.3
dev: true
registry.npmmirror.com/fast-glob/3.2.12:
resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz}
name: fast-glob
@ -3879,6 +3960,12 @@ packages:
merge2: registry.npmmirror.com/merge2/1.4.1
micromatch: registry.npmmirror.com/micromatch/4.0.5
registry.npmmirror.com/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
name: fast-json-stable-stringify
version: 2.1.0
dev: true
registry.npmmirror.com/fastq/1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz}
name: fastq
@ -4015,6 +4102,14 @@ packages:
version: 11.12.0
engines: {node: '>=4'}
registry.npmmirror.com/good-listener/1.2.2:
resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz}
name: good-listener
version: 1.2.2
dependencies:
delegate: registry.npmmirror.com/delegate/3.2.0
dev: false
registry.npmmirror.com/graceful-fs/4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz}
name: graceful-fs
@ -4224,6 +4319,12 @@ packages:
engines: {node: '>=4'}
hasBin: true
registry.npmmirror.com/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
name: json-schema-traverse
version: 0.4.1
dev: true
registry.npmmirror.com/json5/2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz}
name: json5
@ -4245,6 +4346,13 @@ packages:
optionalDependencies:
graceful-fs: registry.npmmirror.com/graceful-fs/4.2.11
registry.npmmirror.com/klona/2.0.6:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz}
name: klona
version: 2.0.6
engines: {node: '>= 8'}
dev: true
registry.npmmirror.com/lcid/3.1.1:
resolution: {integrity: sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz}
name: lcid
@ -4279,6 +4387,17 @@ packages:
xtend: registry.npmmirror.com/xtend/4.0.2
dev: false
registry.npmmirror.com/loader-utils/2.0.4:
resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz}
name: loader-utils
version: 2.0.4
engines: {node: '>=8.9.0'}
dependencies:
big.js: registry.npmmirror.com/big.js/5.2.2
emojis-list: registry.npmmirror.com/emojis-list/3.0.0
json5: registry.npmmirror.com/json5/2.2.3
dev: true
registry.npmmirror.com/loader-utils/3.2.1:
resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz}
name: loader-utils
@ -4310,6 +4429,15 @@ packages:
dependencies:
yallist: registry.npmmirror.com/yallist/3.1.1
registry.npmmirror.com/lru-cache/6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}
name: lru-cache
version: 6.0.0
engines: {node: '>=10'}
dependencies:
yallist: registry.npmmirror.com/yallist/4.0.0
dev: true
registry.npmmirror.com/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz}
name: magic-string
@ -4475,6 +4603,12 @@ packages:
engines: {node: '>= 0.6'}
dev: true
registry.npmmirror.com/neo-async/2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz}
name: neo-async
version: 2.6.2
dev: true
registry.npmmirror.com/node-releases/2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.10.tgz}
name: node-releases
@ -4634,6 +4768,59 @@ packages:
version: 2.3.0
engines: {node: '>=0.10.0'}
registry.npmmirror.com/pinia-plugin-unistorage/0.0.17_vue@3.3.2:
resolution: {integrity: sha512-Oo4KTWyZP+7/fRRGG5ACoFIBZznEgFt8SPSOcg99t5NHzFP1wSTAfgl25eRr7Tv11pkWyzgZSa3oMGVIBBs1MA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia-plugin-unistorage/-/pinia-plugin-unistorage-0.0.17.tgz}
id: registry.npmmirror.com/pinia-plugin-unistorage/0.0.17
name: pinia-plugin-unistorage
version: 0.0.17
dependencies:
pinia: registry.npmmirror.com/pinia/2.1.3_vue@3.3.2
transitivePeerDependencies:
- '@vue/composition-api'
- typescript
- vue
dev: false
registry.npmmirror.com/pinia/2.0.22_vue@3.3.2:
resolution: {integrity: sha512-u+b8/BC+tmvo3ACbYO2w5NfxHWFOjvvw9DQnyT0dW8aUMCPRQT5QnfZ5R5W2MzZBMTeZRMQI7V/QFbafmM9QHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.0.22.tgz}
id: registry.npmmirror.com/pinia/2.0.22
name: pinia
version: 2.0.22
peerDependencies:
'@vue/composition-api': ^1.4.0
typescript: '>=4.4.4'
vue: ^2.6.14 || ^3.2.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
typescript:
optional: true
dependencies:
'@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0
vue: registry.npmmirror.com/vue/3.3.2
vue-demi: registry.npmmirror.com/vue-demi/0.14.5_vue@3.3.2
dev: false
registry.npmmirror.com/pinia/2.1.3_vue@3.3.2:
resolution: {integrity: sha512-XNA/z/ye4P5rU1pieVmh0g/hSuDO98/a5UC8oSP0DNdvt6YtetJNHTrXwpwsQuflkGT34qKxAEcp7lSxXNjf/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.1.3.tgz}
id: registry.npmmirror.com/pinia/2.1.3
name: pinia
version: 2.1.3
peerDependencies:
'@vue/composition-api': ^1.4.0
typescript: '>=4.4.4'
vue: ^2.6.14 || ^3.3.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
typescript:
optional: true
dependencies:
'@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.5.0
vue: registry.npmmirror.com/vue/3.3.2
vue-demi: registry.npmmirror.com/vue-demi/0.14.5_vue@3.3.2
dev: false
registry.npmmirror.com/pixelmatch/4.0.2:
resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pixelmatch/-/pixelmatch-4.0.2.tgz}
name: pixelmatch
@ -4776,6 +4963,13 @@ packages:
ipaddr.js: registry.npmmirror.com/ipaddr.js/1.9.1
dev: true
registry.npmmirror.com/punycode/2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz}
name: punycode
version: 2.3.0
engines: {node: '>=6'}
dev: true
registry.npmmirror.com/qrcode-reader/1.0.4:
resolution: {integrity: sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz}
name: qrcode-reader
@ -4936,6 +5130,33 @@ packages:
version: 2.1.2
dev: true
registry.npmmirror.com/sass-loader/10.4.1_sass@1.59.3:
resolution: {integrity: sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass-loader/-/sass-loader-10.4.1.tgz}
id: registry.npmmirror.com/sass-loader/10.4.1
name: sass-loader
version: 10.4.1
engines: {node: '>= 10.13.0'}
peerDependencies:
fibers: '>= 3.1.0'
node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
sass: ^1.3.0
webpack: ^4.36.0 || ^5.0.0
peerDependenciesMeta:
fibers:
optional: true
node-sass:
optional: true
sass:
optional: true
dependencies:
klona: registry.npmmirror.com/klona/2.0.6
loader-utils: registry.npmmirror.com/loader-utils/2.0.4
neo-async: registry.npmmirror.com/neo-async/2.6.2
sass: registry.npmmirror.com/sass/1.59.3
schema-utils: registry.npmmirror.com/schema-utils/3.1.2
semver: registry.npmmirror.com/semver/7.5.1
dev: true
registry.npmmirror.com/sass/1.59.3:
resolution: {integrity: sha512-QCq98N3hX1jfTCoUAsF3eyGuXLsY7BCnCEg9qAact94Yc21npG2/mVOqoDvE0fCbWDqiM4WlcJQla0gWG2YlxQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.59.3.tgz}
name: sass
@ -4953,12 +5174,39 @@ packages:
version: 1.2.4
dev: false
registry.npmmirror.com/schema-utils/3.1.2:
resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.2.tgz}
name: schema-utils
version: 3.1.2
engines: {node: '>= 10.13.0'}
dependencies:
'@types/json-schema': registry.npmmirror.com/@types/json-schema/7.0.11
ajv: registry.npmmirror.com/ajv/6.12.6
ajv-keywords: registry.npmmirror.com/ajv-keywords/3.5.2_ajv@6.12.6
dev: true
registry.npmmirror.com/select/1.1.2:
resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/select/-/select-1.1.2.tgz}
name: select
version: 1.1.2
dev: false
registry.npmmirror.com/semver/6.3.0:
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz}
name: semver
version: 6.3.0
hasBin: true
registry.npmmirror.com/semver/7.5.1:
resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz}
name: semver
version: 7.5.1
engines: {node: '>=10'}
hasBin: true
dependencies:
lru-cache: registry.npmmirror.com/lru-cache/6.0.0
dev: true
registry.npmmirror.com/send/0.18.0:
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/send/-/send-0.18.0.tgz}
name: send
@ -5131,6 +5379,12 @@ packages:
version: 1.7.1
dev: false
registry.npmmirror.com/tiny-emitter/2.1.0:
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz}
name: tiny-emitter
version: 2.1.0
dev: false
registry.npmmirror.com/tinycolor2/1.6.0:
resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz}
name: tinycolor2
@ -5231,6 +5485,14 @@ packages:
escalade: registry.npmmirror.com/escalade/3.1.1
picocolors: registry.npmmirror.com/picocolors/1.0.0
registry.npmmirror.com/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz}
name: uri-js
version: 4.4.1
dependencies:
punycode: registry.npmmirror.com/punycode/2.3.0
dev: true
registry.npmmirror.com/utif/2.0.1:
resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/utif/-/utif-2.0.1.tgz}
name: utif
@ -5251,6 +5513,16 @@ packages:
engines: {node: '>= 0.4.0'}
dev: true
registry.npmmirror.com/uview-plus/3.1.30:
resolution: {integrity: sha512-Q/00hopGZH/l6AFMzRdIrrQJtYK56F0PLWSMYUZhdm2nM9ZWRGMLeKQo3dhQ9Qo69YQagEsRFrD4OmMqfCe54Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uview-plus/-/uview-plus-3.1.30.tgz}
name: uview-plus
version: 3.1.30
engines: {HBuilderX: ^3.1.0}
dependencies:
clipboard: registry.npmmirror.com/clipboard/2.0.11
dayjs: registry.npmmirror.com/dayjs/1.11.7
dev: false
registry.npmmirror.com/vary/1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz}
name: vary
@ -5294,6 +5566,24 @@ packages:
optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2
registry.npmmirror.com/vue-demi/0.14.5_vue@3.3.2:
resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz}
id: registry.npmmirror.com/vue-demi/0.14.5
name: vue-demi
version: 0.14.5
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
vue: registry.npmmirror.com/vue/3.3.2
dev: false
registry.npmmirror.com/vue-i18n/9.2.2_vue@3.3.2:
resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz}
id: registry.npmmirror.com/vue-i18n/9.2.2
@ -5415,6 +5705,12 @@ packages:
name: yallist
version: 3.1.1
registry.npmmirror.com/yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}
name: yallist
version: 4.0.0
dev: true
registry.npmmirror.com/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz}
name: yaml

@ -1,17 +1,21 @@
<script>
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
}
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
}
</script>
<style>
/*每个页面公共css */
</style>
<style lang="scss">
/* 注意要写在第一行同时给style标签加入lang="scss"属性 */
@import "uview-plus/index.scss";
@import "@/w-components/index.scss";
</style>

@ -3,14 +3,20 @@ import {
} from "vue";
import App from "./App.vue";
import {useEnv} from "./env.js"
import uviewPlus from 'uview-plus'
import {wPlugin} from './w-components'
import {store} from './store'
export function createApp() {
const app = createSSRApp(App);
app.use(useEnv)
app
.use(store)
.use(useEnv)
.use(uviewPlus)
.use(wPlugin)
return {
app,
app
};
}

@ -1,20 +1,25 @@
{
"easycom": {
"custom": {
"^w-(.*)": "@/w-components/w-$1/w-$1.vue"
"^w-(.*)": "@/w-components/components/w-$1/w-$1.vue",
"^u-(.*)": "uview-plus/components/u-$1/u-$1.vue"
}
},
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index"
}
],
"pages": [{
"path": "pages/index/index"
}],
"subPackages": [{
"root": "pages/demo",
"pages": [{
"path": "index"
}, {
"path": "demo0"
}, {
"path": "demo1"
}, {
"path": "demo2"
}]
}],
"preloadRule": {
@ -25,9 +30,6 @@
},
"globalStyle": {
"navigationStyle": "custom",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"condition": {
@ -37,6 +39,8 @@
"name": "", //
"path": "pages/demo/demo1", //
"query": "" //onLoad
},{
"path": "pages/demo/index"
}]
}

@ -0,0 +1,97 @@
<template>
<view class="w-body">
<w-navbar fixed left-home left-back title="自定义全局变量" class="navbar"></w-navbar>
<view style="padding:1rem;">
<view>自定义全局变量<text style="font-size:1.5rem;font-weight: bold;">$w</text>,在模板和js中可以直接使用</view>
<view class="title">安全区域:</view>
<view class="border">
$w.left:{{$w.left}} |
$w.top:{{$w.top}} |
$w.right:{{$w.right}} |
$w.bottom:{{$w.bottom}}
</view>
<view class="title">路由:</view>
<view class="border">
<view hover-class="hover" @tap="$w.back()">$w.back()</view>
<view hover-class="hover" @tap="$w.back(2)">$w.back(2)</view>
<view hover-class="hover" @tap="$w.to('/pages/demo/demo1')">$w.to('/pages/demo/demo1')</view>
</view>
<view class="title">uni:</view>
<view class="border">
<view>$w.uni:方便在魔板中直接调用uni相关方法</view>
</view>
<view class="title">prototype(原生方法):</view>
<view class="border">
<view class="b">Date.prototype.format</view>
<view>d=new Date()</view>
<view>d.format() : {{d.format()}}</view>
<view>d.format('yyyy年MM月dd日HH时mm分ss秒S毫秒') : {{d.format('yyyy年MM月dd日HH时mm分ss秒S毫秒')}}</view>
<view class="b">String.prototype.toDate</view>
<view>'2011-11-12'.toDate() : {{'2011-11-12'.toDate()}}</view>
<view>'2011-11-12 17:59'.toDate('yyyy-MM-dd HH:mm') : {{'2011-11-12 17:59'.toDate('yyyy-MM-dd HH:mm')}}</view>
<view class="b">Number.prototype.toDate</view>
<view>结果.format("yyyy-MM-dd HH:mm")</view>
<view>Number(0).toDate() : {{Number(0).toDate().format("yyyy-MM-dd HH:mm")}}</view>
<view>d.getTime().toDate() : {{d.getTime().toDate().format("yyyy-MM-dd HH:mm")}}</view>
<view class="b">Number.prototype.toChina</view>
<view>Number(0).toChina() : {{Number(0).toChina()}}</view>
<view>Number(10).toChina() : {{Number(10).toChina()}}</view>
<view>Number(12).toChina() : {{Number(12).toChina()}}</view>
<view>Number(123).toChina() : {{Number(123).toChina()}}</view>
<view>Number(120).toChina() : {{Number(120).toChina()}}</view>
<view>Number(1234567890123).toChina() : {{Number(1234567890123).toChina()}}</view>
<view class="b">Number.prototype.toTime</view>
<view>Number(0).toTime() : {{Number(0).toTime()}}</view>
<view>Number(10).toTime() : {{Number(10).toTime()}}</view>
<view>Number(100).toTime() : {{Number(100).toTime()}}</view>
<view>Number(1000).toTime() : {{Number(1000).toTime()}}</view>
<view>Number(10000).toTime() : {{Number(10000).toTime()}}</view>
<view class="b">String.prototype.toTime</view>
<view>'00:00:00'.toTime() : {{'00:00:00'.toTime()}}</view>
<view>'01:02:03'.toTime() : {{'01:02:03'.toTime()}}</view>
</view>
</view>
</view>
</template>
<script setup>
const d=new Date();
</script>
<style lang="scss" scoped>
.w-body {
.title {
font-size:1rem;
color:var(--w-main-dark-1);
font-weight: bold;
}
.border {
font-size:0.8rem; border:solid 1px var(--w-main); padding: 1rem; margin: 1rem 0;
& > .b:first-child{
padding-top: 0;
}
view {
padding: .5rem;
line-height: 1.6;
}
.b {
font-weight: bold;
padding: 1rem 0 .1rem;
}
}
}
.hover {
background-color: var(--w-bg-dark);
}
</style>

@ -1,20 +1,25 @@
<template>
<view class="w-body">
<view>
<text class="title">js中获取环境变量:{{ title }}</text>
</view>
<view>
<text class="title">模板中直接使用环境变量:{{ $env.title }}</text>
</view>
<view>
<text class="env">{{ $env }}</text>
<w-navbar fixed left-home left-back title="环境变量" class="navbar"></w-navbar>
<view style="padding:1rem;">
<view>
<text class="title">js中获取环境变量:{{ title }}</text>
</view>
<view>
<text class="title">模板中直接使用环境变量:{{ $env.title }}</text>
</view>
<view>
<text class="env">{{ $env }}</text>
</view>
</view>
</view>
</template>
<script setup>
import {ref,getCurrentInstance} from 'vue'
const {proxy} = getCurrentInstance();
console.debug(proxy);
const title = ref(proxy.$env.title);
</script>

@ -0,0 +1,84 @@
<template>
<view class="w-body">
<w-navbar fixed left-home left-back title="数据仓库示例" class="navbar"></w-navbar>
<view style="padding:1rem;">
<view>demo1Store非持久化仓库示例数据:</view>
<view style="font-size:0.8rem; border:solid 1px var(--w-main-light-1); padding: .5rem; margin: 1rem 0;">
<view>demo1Store.name : {{demo1Store.name}}</view>
<view>demo1Store.getName : {{demo1Store.getName}}</view>
<view>demo1Store.sex : {{demo1Store.sex}}</view>
<view>demo1Store.getSex : {{demo1Store.getSex}}</view>
<view>demo1Store.age : {{demo1Store.age}}</view>
</view>
<view class="btns">
<view>
<u-button type="primary" plain @tap="$u.toast(demo1Store.name)">name</u-button>
</view>
<view>
<u-button type="primary" plain @tap="$u.toast(demo1Store.getName)">getName</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo1Store.name='张三'">name='张三'</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo1Store.setName('李四')">setName('')</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo1Store.$reset()">$reset()</u-button>
</view>
</view>
<u-divider></u-divider>
<view>demo2Store持久化仓库示例数据:</view>
<view style="font-size:0.8rem; border:solid 1px var(--w-main); padding: 1rem; margin: 1rem 0;">
<view>demo2Store.name : {{demo2Store.name}}</view>
<view>demo2Store.getName : {{demo2Store.getName}}</view>
<view>demo2Store.sex : {{demo2Store.sex}}</view>
<view>demo2Store.getSex : {{demo2Store.getSex}}</view>
<view>demo2Store.age : {{demo2Store.age}}</view>
</view>
<view class="btns">
<view>
<u-button type="primary" plain @tap="$u.toast(demo2Store.name)">name</u-button>
</view>
<view>
<u-button type="primary" plain @tap="$u.toast(demo2Store.getName)">getName</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo2Store.name='张三'">name='张三'</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo2Store.setName('李四')">setName('')</u-button>
</view>
<view>
<u-button type="primary" plain @tap="demo2Store.$reset()">$reset()</u-button>
</view>
<view>
<u-button type="primary" plain @tap="$w.uni.clearStorage()">()</u-button>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
useDemo1Store,
useDemo2Store
} from '@/store'
const demo1Store = useDemo1Store();
const demo2Store = useDemo2Store();
</script>
<style lang="scss" scoped>
.w-body {
.btns {
view {
margin: .2rem;
}
}
}
</style>

@ -0,0 +1,29 @@
<template>
<view class="demo-index">
<w-navbar fixed left-home title="实例页面" class="navbar"></w-navbar>
<w-safe-area style="--top:44px;--bottom:1.35rem;">
<u-list height="100%" paging-enabled>
<u-list-item>
<u-cell isLink url="/pages/demo/demo0" title="自定义全局变量"></u-cell>
</u-list-item>
<u-list-item>
<u-cell isLink url="/pages/demo/demo1" title="自定义环境变量"></u-cell>
</u-list-item>
<u-list-item>
<u-cell isLink url="/pages/demo/demo2" title="数据仓库示例"></u-cell>
</u-list-item>
</u-list>
</w-safe-area>
<w-footer></w-footer>
</view>
</template>
<script setup>
</script>
<style lang="scss">
.demo-index {
.navbar {}
}
</style>

@ -2,15 +2,16 @@
<view class="w-body">
<view class="content">
<view class="title">{{$env.title}}</view>
<navigator url="/pages/demo/demo1" class="demo">demo</navigator>
<navigator url="/pages/demo/index" class="demo">demo</navigator>
</view>
<w-loader title="" opacity="1" height="70vh"></w-loader>
<w-loader opacity="1" height="70vh"></w-loader>
<image mode="aspectFit" lazy-load class="wave" src="/static/wave.svg" />
<w-footer custom-style=""></w-footer>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
@ -25,13 +26,13 @@
left: 0;
top: 50vh;
z-index: 1;
color: $uni-text-color-inverse;
color: var(--w-bg-dark);
font-weight: bold;
.title {
font-size: 1.5rem;
letter-spacing: .5rem;
text-shadow: .2rem .2rem 0 $uni-text-color;
text-shadow: .2rem .2rem 0 #0006;
}
.demo {
@ -52,7 +53,7 @@
}
.wave {
background-color: $w-color-1;
background-color: var(--w-main);
width: 100%;
height: auto;
padding: 0;

@ -0,0 +1,10 @@
import { createPinia } from 'pinia';
import { createUnistorage } from 'pinia-plugin-unistorage'
const store = createPinia()
store.use(createUnistorage())
export { store }
export { useAuthStore } from './modules/auth'
export { useDemo1Store } from './modules/demo1'
export { useDemo2Store } from './modules/demo2'

@ -0,0 +1,36 @@
import {defineStore, storeToRefs} from 'pinia'
/**
* 授权仓库
*/
export const useAuthStore = defineStore('useAuthStore', {
state: () => {
return {
/**
* 登录用户信息
*/
user:undefined,
/**
* 授权令牌
*/
token:undefined,
/**
* 用户角色列表
*/
roles:[],
/**
* 用户权限列表
*/
permission:[]
}
},
//计算字段
getters: {
},
//方法
actions: {
},
unistorage: true // 开启后对 state 的数据读写都将持久化
})

@ -0,0 +1,30 @@
import {defineStore} from 'pinia'
/**
* 测试非持久化数据仓库
*/
export const useDemo1Store = defineStore('useDemo1Store', {
state: () => {
return {
name:undefined,
age:18,
sex:true
}
},
//计算字段
getters: {
getName(){
return this.name || '匿名'
},
getSex(){
return this.sex?'男':'女';
}
},
//方法
actions: {
setName(name){
this.name = name;
}
},
unistorage: false // 开启后对 state 的数据读写都将持久化
})

@ -0,0 +1,32 @@
import {
defineStore
} from 'pinia'
/**
* 测试持久化数据仓库
*/
export const useDemo2Store = defineStore('useDemo2Store', {
state: () => {
return {
name: undefined,
age: 18,
sex: true
}
},
//计算字段
getters: {
getName() {
return this.name || '匿名'
},
getSex() {
return this.sex ? '男' : '女';
}
},
//方法
actions: {
setName(name) {
this.name = name;
}
},
unistorage: true // 开启后对 state 的数据读写都将持久化
})

@ -1,3 +1,5 @@
@import 'uview-plus/theme.scss';
@import '@/w-components/theme.scss';
/**
* uni-app
*

@ -0,0 +1,26 @@
<template>
<view class="w-footer" :style="{'--w-bottom':$w.bottom+'px'}">
{{$env.copy}}
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.w-footer {
position: fixed;
bottom:var(--w-bottom);
left:0;
font-size: .75rem;
color:var(--w-main);
text-shadow: .1rem .1rem 0 #0002;
text-align: center;
width: 100%;
line-height: 1;
padding: .3rem 0;
}
</style>

@ -13,7 +13,7 @@
</view>
</template>
<script>
import wx from '../mixins/mp-weixin.js'
import wx from '../../mixins/mp-weixin.js'
export default {
mixins:[wx]
}
@ -60,7 +60,7 @@ const props = defineProps({
.loader .face:nth-child(1) {
width: 100%;
height: 100%;
color: #0d9be0;
color: var(--w-error-light);
border-color: currentColor transparent transparent currentColor;
border-width: 0.2em 0.2em 0em 0em;
--deg: -45deg;
@ -70,8 +70,8 @@ const props = defineProps({
.loader .face:nth-child(2) {
width: 90%;
height: 90%;
color: #7bc528;
border-color: currentColor currentColor transparent transparent;
color: var(--w-success-light);
border-color: currentColor currentColor #0000 #0000;
border-width: 0.2em 0em 0em 0.2em;
--deg: -135deg;
animation-direction: reverse;
@ -117,7 +117,7 @@ const props = defineProps({
transition: opacity 5s,display 5s / 5s;
&::before {
background-image: radial-gradient(closest-side,$w-color-2,$w-color-1);
background-image: radial-gradient(closest-side,var(--w-main-light-1),var(--w-main));
content: '';
position: absolute;
width: 100%;
@ -130,9 +130,9 @@ const props = defineProps({
}
.loader-title {
margin: 4vmin 0 10vmin;
font-size: 3vmin;
color:#ccc;
text-shadow: .2vmin .2vmin 0 $w-color-1;
font-size: 3vmin ;
color: var(--w-bg-dark);
text-shadow: .2vmin .2vmin 0 var(--w-main);
letter-spacing: .3vmin;
position: relative;
}

@ -0,0 +1,130 @@
<template>
<view class="w-navbar" :style="{'--w-top':$w.top+'px'}" >
<view class="w-navbar-body" :class="{'w-navbar-body-fixed':props.fixed}">
<view v-if="!props.leftHide && (props.leftBack || props.leftHome)" class="w-navbar-body-left"><slot name="left">
<view class="w-navbar-left" :class="{'w-navbar-left-bg':props.leftBg,'w-navbar-left-icon-margin':props.leftBack && props.leftHome}">
<view v-if="props.leftBack" @tap.stop.prevent="$w.back()" class="icon"><u-icon name="arrow-left" color="currentColor" size="18"></u-icon></view>
<view v-if="props.leftHome" @tap.stop.prevent="$w.uni.reLaunch({url:props.leftHomePage})" class="icon"><u-icon name="home" color="currentColor" size="18"></u-icon></view>
</view>
</slot></view>
<view v-if="!props.rightHide" class="w-navbar-body-right"><slot name="right"></slot></view>
<view class="w-navbar-body-title"><slot>{{props.title}}</slot></view>
</view>
</view>
</template>
<script setup>
const props = defineProps({
fixed:{
type:Boolean,
default:false
},
title:{
type:String,
default:"页面标题",
},
leftHide:{
type:Boolean,
default:false
},
rightHide:{
type:Boolean,
default:false
},
leftBg:{
type:Boolean,
default:false
},
leftBack:{
type:Boolean,
default:false
},
leftHome:{
type:Boolean,
default:false
},
leftHomePage:{
type:String,
default:"/pages/index/index",
},
});
</script>
<style lang="scss" scoped>
.w-navbar {
position: relative;
--h:var(--height,44px);
height: calc(var(--h) + var(--w-top));
font-size: var(--font-size,calc(var(--h) * .4));
color: var(--color,var(--w-bg));
z-index: var(--z-index,var(--w-z-index));
&-body {
position: relative;
height: var(--h);
box-sizing: content-box;
padding-top: var(--w-top);
background-image: linear-gradient(to right,var(--color-1,var(--w-main)),var(--color-2,var(--w-main-light)),var(--color1,var(--w-main)));
display: flex;
&-fixed {
position: fixed;
top:0;
left:0;
right:0;
}
&-title {
height: var(--h);
width: 100%;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
pointer-events: none;
text-shadow: 1px 1px 0 #0006;
font-weight: bold;
letter-spacing: .2em;
}
&-left,&-right {
width: 50%;
height: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
}
&-right {
justify-content: flex-end;
}
}
&-left {
box-sizing: content-box;
height: 20px;
min-width: 20px;
padding: 5px;
background-color: #0000;
margin-left: 5px;
border-radius: 100px;
border: solid 1px #FFF0;
display: flex;
justify-content: center;
align-items: center;
&-icon-margin .icon {
margin: 0 5px;
}
&-bg {
border: solid 1px #FFF8;
background-color: #0007;
}
}
}
</style>

@ -0,0 +1,10 @@
# w-safe-var 安全区域
> 提供--w-top,--w-right,--w-bottom,--w-left四个CSS变量,方便子孙元素使用
可以传入的css变量:
- `--position`:定位方式,默认:flex;
- `--top`: 安全区域内的top偏移值,默认:0;
- `--right`: 安全区域内的right偏移值,默认:0;
- `--bottom`: 安全区域内的bottom偏移值,默认:0;
- `--left`: 安全区域内的left偏移值,默认:0;
- `--z-index`: z轴坐标,默认: --w-z-index - 1;

@ -0,0 +1,18 @@
<template>
<view class="w-safe-area" :style="{'--w-top':$w.top+'px','--w-right':$w.right+'px','--w-bottom':$w.bottom+'px','--w-left':$w.left+'px'}">
<slot></slot>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.w-safe-area {
position: var(--position,fixed);
left: calc(var(--left,0px) + var(--w-left));
top: calc(var(--top,0px) + var(--w-top));
right: calc(var(--right,0px) + var(--w-right));
bottom: calc(var(--bottom,0px) + var(--w-bottom));
z-index: calc(var(--z-index,var(--w-z-index)) - 1);
}
</style>

@ -0,0 +1,2 @@
# w-safe-var 安全区域变量
> 提供--w-top,--w-right,--w-bottom,--w-left四个CSS变量,方便子孙元素使用

@ -0,0 +1,11 @@
<template>
<view :style="{'--w-top':$w.top+'px','--w-right':$w.right+'px','--w-bottom':$w.bottom+'px','--w-left':$w.left+'px'}">
<slot></slot>
</view>
</template>
<script>
import wx from '../../mixins/mp-weixin.js'
export default {
mixins:[wx]
}
</script>

@ -0,0 +1,32 @@
import {
util
} from './modules/util.js'
import prototypes from './modules/prototypes.js'
import {
PageAnimationTypeIn,
PageAnimationTypeOut
} from './modules/PageAnimationType.js'
const $w = {
uni,
...uni.getSystemInfoSync().safeAreaInsets,
...util,
};
const wPlugin = {
install(Vue){
prototypes();
Vue.config.globalProperties.$w = $w;
}
}
export {
util,
$w,
wPlugin,
PageAnimationTypeIn,
PageAnimationTypeOut
}

@ -0,0 +1,47 @@
.w-lines {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.w-flex {
@include flex;
&-column {
@include flex(column);
}
}
@mixin flex($d: row) {
display: flex;
justify-content: center;
align-items: center;
flex-direction: $d;
}
page,view {
box-sizing: border-box;
padding: 0;
margin: 0;
border: none;
outline: none;
}
page,.w-var {
--w-step: #{$w-step};
--w-z-index: #{$w-z-index};
--w-z-index-top: #{$w-z-index-top};
@include varColor($colors,$w-step);
}
:root {
--w-step: #{$w-step};
--w-z-index: #{$w-z-index};
--w-z-index-top: #{$w-z-index-top};
@include varColor($colors,$w-step);
}

@ -0,0 +1,2 @@
export const PageAnimationTypeIn = ["slide-in-right","slide-in-left","slide-in-top","slide-in-bottom","pop-in","fade-in","zoom-out","zoom-fade-out","none"]
export const PageAnimationTypeOut = ["slide-out-right","slide-out-left","slide-out-top","slide-out-bottom","pop-out","fade-out","zoom-in","zoom-fade-in","none"]

@ -0,0 +1,136 @@
/**
* 原型扩展库
*/
export default function() {
/**
* 将日期对象格式化成字符串
* @param {String} format 格式支持yyyy-MM-dd HH:mm:ss.S 默认yyyy-MM-dd
*/
Date.prototype.format = function(format) {
format = format == null ? "yyyy-MM-dd" : format;
let o = {
"M+": this.getMonth() + 1, //month
"d+": this.getDate(), //day
"H+": this.getHours(), //hour
"m+": this.getMinutes(), //minute
"s+": this.getSeconds(), //second
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds() //millisecond
}
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k])
.length));
return format;
}
Number.prototype.toDate = function() {
return new Date(this);
}
Number.prototype.toChina = function() {
let number = this.toString();
if (number.match(/\D/) || number.length >= 14) {
throw new Error("只能是正整数,且不能超过14位");
}
let zhArray = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']; // 数字对应中文
let baseArray = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万']; //进位填充字符,第一位是 个位,可省略
let string = String(number).split('').reverse().map((item, index) => { // 把数字切割成数组并倒序排列,然后进行遍历转成中文
// 如果当前位为0直接输出数字 否则输出 数字 + 进位填充字符
item = Number(item) == 0 ? zhArray[Number(item)] : zhArray[Number(item)] + baseArray[index];
return item;
}).reverse().join(''); // 倒叙回来数组,拼接成字符串
string = string.replace(/^一十/, '十'); // 如果以 一十 开头,可省略一
string = string.replace(/零+/, '零'); // 如果有多位相邻的零,只写一个即可
return string;
}
/**
* 将字符串格式化成日期对象
* @param {String} format 格式支持yyyy-MM-dd HH:mm:ss.S 默认yyyy-MM-dd
*/
String.prototype.toDate = function(format) {
if (/^\d+$/.test(this)) {
return new Date(Number(this));
}
format = format == null ? "yyyy-MM-dd" : format;
var d = new Date();
var o = {
"y+": "d.setYear(val)", //year
"M+": "d.setMonth(val-1)", //month
"d+": "d.setDate(val)", //day
"H+": "d.setHours(val)", //hour
"m+": "d.setMinutes(val)", //minute
"s+": "d.setSeconds(val)", //second
"S+": "d.setMilliSeconds(val)" //millisecond
}
var regx = format
for (var k in o) {
if (new RegExp("(" + k + ")").test(format))
regx = regx.replace(new RegExp(k), "[0-9]+");
}
if (!new RegExp("^" + regx + "$").test(this)) {
throw new Error("日期格式不正确:" + format);
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
var regx = format;
for (var temp in o) {
if (temp == k) {
regx = regx.replace(new RegExp(temp), "([0-9]+)");
} else {
regx = regx.replace(new RegExp(temp), "[0-9]+");
}
}
var val = Number(this.replace(new RegExp("^" + regx + "$"), "$1"));
try {
if (k == "S+") {
d.setMilliseconds(val);
} else {
eval(o[k].replace("val", val));
}
} catch (e) {
console.debug(e);
}
} else {
try {
var val = k == "M+" ? 1 : 0;
if (k == "S+") {
d.setMilliseconds(val);
} else {
eval(o[k].replace("val", val));
}
} catch (e) {
console.debug(e);
}
}
}
return d;
}
String.prototype.toTime = function() {
if(!/^(\d{2,}):(\d{2}):(\d{2})$/.test(this)){
throw new Error("含时分秒的字符串需符合格式:(\\d{2,}):(\\d{2}):(\\d{2})");
}
let ts = this.split(":");
return parseInt(ts[0])*3600+parseInt(ts[1])*60+parseInt(ts[2]);
// return eval(this.replace(/^(\d{2}):(\d{2}):(\d{2})$/, "$1*3600+$2*60+$3"));
}
Number.prototype.toTime = function() {
let ss = this % 60;
let temp = (this - ss) / 60;
let mm = temp % 60;
let hh = (temp - mm) / 60;
return `${hh.toString().padStart(2,"0")}:${mm.toString().padStart(2,"0")}:${ss.toString().padStart(2,"0")}`
}
};

@ -0,0 +1,41 @@
import {
PageAnimationTypeIn,
PageAnimationTypeOut
} from "./PageAnimationType"
export const util = {
back(delta = 1, animationType = 'random', animationDuration = 300) {
if (!PageAnimationTypeOut.includes(animationType)) {
animationType = PageAnimationTypeOut[util.random(0, PageAnimationTypeOut.length)];
}
return new Promise((success, fail) => {
uni.navigateBack({
delta,
animationType,
animationDuration,
success,
fail
});
});
},
to(url = "", events = {}, animationType = 'random', animationDuration = 300) {
if (!PageAnimationTypeIn.includes(animationType)) {
animationType = PageAnimationTypeIn[util.random(0, PageAnimationTypeIn.length)];
}
return new Promise((success, fail) => {
uni.navigateTo({
url,
events,
animationType,
animationDuration,
success,
fail
});
});
},
random(min = 0, max = 10) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
px(num=0) {
return num+"px";
}
};

@ -0,0 +1,13 @@
export const customStyle = {
customStyle: {
type: Object,
default: {}
}
}
export const customClass = {
customClass: {
type: Object,
default: {}
}
}

@ -0,0 +1,59 @@
/**
:
1. 使css,2:
1.1. /,()css
1.2. css,virtualHost
2. $css:$w-z-index -> --w-z-index
3. ,$colorsmain,
3.1. --w-main:
3.2. --w-main-light: + $w-step
3.3. --w-main-light-1: + $w-step * 2
3.4. --w-main-light-2: + $w-step * 3
3.5. --w-main-dark: - $w-step
3.6. --w-main-dark-1: - $w-step * 2
3.7. --w-main-dark-2: - $w-step * 3
3.8. --w-main-h:
3.9. --w-main-s:
3.10. --w-main-l:
3.11. $w-step--w-step,
4.:
4.1. 使csshsl: hsl(var(--w-main-h),var(--w-main-s),calc(var(--w-main-l) + 50%))
4.2. 使csshsla: hsl(var(--w-main-h),var(--w-main-s),var(--w-main-l),.5)
4.3. 使css,scss,使
4.4. ,\\\,
*/
//
$w-step: 10;
// z
$w-z-index:100;
// z
$w-z-index-top:99999;
$colors:
(
"main": #2564a1,
"text": #333,
"bg": #F8F8F8,
"primary": #3c9cff,
"warn": #eaa339,
"success": #5ac725,
"info": #999,
"error": #f56c6c
);
@mixin varColor($map,$step) {
@each $name , $value in $map {
--w-#{$name}:#{$value};
--w-#{$name}-h:#{hue($value)};
--w-#{$name}-s:#{saturation($value)};
--w-#{$name}-l:#{lightness($value)};
--w-#{$name}-light:#{hsl(hue($value),saturation($value),lightness($value) + $step)};
--w-#{$name}-light-1:#{hsl(hue($value),saturation($value),lightness($value) + ($step * 2))};
--w-#{$name}-light-2:#{hsl(hue($value),saturation($value),lightness($value) + ($step * 3))};
--w-#{$name}-dark:#{hsl(hue($value),saturation($value),lightness($value) - $step)};
--w-#{$name}-dark-1:#{hsl(hue($value),saturation($value),lightness($value) - ($step * 2))};
--w-#{$name}-dark-2:#{hsl(hue($value),saturation($value),lightness($value) - ($step * 3))};
}
}

@ -1,38 +0,0 @@
<template>
<view class="w-footer-root" :style="customStyle">
{{$env.copy}}
</view>
</template>
<script>
import wx from '../mixins/mp-weixin.js'
export default {
mixins:[wx]
}
</script>
<script setup>
// useMixin(myMixin);
const props = defineProps({
customStyle:{
type:[String,Object],
default:""
}
})
</script>
<style lang="scss" scoped>
.w-footer-root {
position: fixed;
bottom:var(--window-bottom);
left:0;
font-size: .75rem;
color:$uni-text-color;
text-shadow: .1rem .1rem 0 $uni-text-color-inverse;
text-align: center;
width: 100%;
line-height: 1;
padding: .3rem 0;
}
</style>
Loading…
Cancel
Save