环境,环境变量,自定义组件,demo

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

15
.env

@ -15,17 +15,22 @@
### ###
# 项目标题,建议全局配置 # 项目标题,建议全局配置
VITE_TITLE=示例项目 VITE_APP_TITLE=示例项目
# 版权信息
VITE_APP_COPY=Copyright 2023 jlzhou.top Inc. All rights reserved.
# 首页显示DEMO
VITE_APP_DEMO=0
# 请求后端api的基础地址 # 请求后端api的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_API=http://127.0.0.1:8080/ VITE_APP_BASE_API=http://127.0.0.1:8080/
# 外部资源的基础地址 # 外部资源的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_RESOURCES=http://127.0.0.1:8080/ VITE_APP_BASE_RESOURCES=http://127.0.0.1:8080/
# WebSocket的基础地址 # WebSocket的基础地址
VITE_BASE_WS=ws://127.0.0.1:8080/ VITE_APP_BASE_WS=ws://127.0.0.1:8080/
VITE_TEST1=全局测试变量 VITE_APP_TEST1=全局测试变量

@ -18,13 +18,16 @@
# 请求后端api的基础地址 # 请求后端api的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_API=http://127.0.0.1:8080/ VITE_APP_BASE_API=http://127.0.0.1:8080/
# 外部资源的基础地址 # 外部资源的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_RESOURCES=http://127.0.0.1:8080/ VITE_APP_BASE_RESOURCES=http://127.0.0.1:8080/
# WebSocket的基础地址 # WebSocket的基础地址
VITE_BASE_WS=ws://127.0.0.1:8080/ VITE_APP_BASE_WS=ws://127.0.0.1:8080/
VITE_TEST2=测试开发环境变量 VITE_APP_TEST2=测试开发环境变量
# 首页显示DEMO
VITE_APP_DEMO=1

@ -17,13 +17,13 @@
# 请求后端api的基础地址 # 请求后端api的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_API=http://127.0.0.1:8080/ VITE_APP_BASE_API=http://127.0.0.1:8080/
# 外部资源的基础地址 # 外部资源的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_RESOURCES=http://127.0.0.1:8080/ VITE_APP_BASE_RESOURCES=http://127.0.0.1:8080/
# WebSocket的基础地址 # WebSocket的基础地址
VITE_BASE_WS=ws://127.0.0.1:8080/ VITE_APP_BASE_WS=ws://127.0.0.1:8080/
VITE_TEST22=测试本地开发环境变量 VITE_APP_TEST22=测试本地开发环境变量

@ -18,13 +18,13 @@
# 请求后端api的基础地址 # 请求后端api的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_API=http://127.0.0.1:8080/ VITE_APP_BASE_API=http://127.0.0.1:8080/
# 外部资源的基础地址 # 外部资源的基础地址
# 小程序需加入白名单,并设置跨域 # 小程序需加入白名单,并设置跨域
VITE_BASE_RESOURCES=http://127.0.0.1:8080/ VITE_APP_BASE_RESOURCES=http://127.0.0.1:8080/
# WebSocket的基础地址 # WebSocket的基础地址
VITE_BASE_WS=ws://127.0.0.1:8080/ VITE_APP_BASE_WS=ws://127.0.0.1:8080/
VITE_TEST3=测试生产环境变量 VITE_APP_TEST3=测试生产环境变量

@ -60,6 +60,7 @@
"@dcloudio/uni-cli-shared": "3.0.0-3071120230427001", "@dcloudio/uni-cli-shared": "3.0.0-3071120230427001",
"@dcloudio/uni-stacktracey": "3.0.0-3071120230427001", "@dcloudio/uni-stacktracey": "3.0.0-3071120230427001",
"@dcloudio/vite-plugin-uni": "3.0.0-3071120230427001", "@dcloudio/vite-plugin-uni": "3.0.0-3071120230427001",
"vite": "4.1.4" "vite": "4.1.4",
"sass": "^1.59.3"
} }
} }

@ -19,6 +19,7 @@ specifiers:
'@dcloudio/uni-quickapp-webview': 3.0.0-3071120230427001 '@dcloudio/uni-quickapp-webview': 3.0.0-3071120230427001
'@dcloudio/uni-stacktracey': 3.0.0-3071120230427001 '@dcloudio/uni-stacktracey': 3.0.0-3071120230427001
'@dcloudio/vite-plugin-uni': 3.0.0-3071120230427001 '@dcloudio/vite-plugin-uni': 3.0.0-3071120230427001
sass: 1.59.3
vite: 4.1.4 vite: 4.1.4
vue: ^3.2.45 vue: ^3.2.45
vue-i18n: ^9.1.9 vue-i18n: ^9.1.9
@ -46,7 +47,8 @@ devDependencies:
'@dcloudio/uni-cli-shared': registry.npmmirror.com/@dcloudio/uni-cli-shared/3.0.0-3071120230427001_vue@3.3.2 '@dcloudio/uni-cli-shared': registry.npmmirror.com/@dcloudio/uni-cli-shared/3.0.0-3071120230427001_vue@3.3.2
'@dcloudio/uni-stacktracey': registry.npmmirror.com/@dcloudio/uni-stacktracey/3.0.0-3071120230427001 '@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 '@dcloudio/vite-plugin-uni': registry.npmmirror.com/@dcloudio/vite-plugin-uni/3.0.0-3071120230427001_vite@4.1.4+vue@3.3.2
vite: registry.npmmirror.com/vite/4.1.4 sass: registry.npmmirror.com/sass/1.59.3
vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
packages: packages:
@ -2084,7 +2086,7 @@ packages:
magic-string: registry.npmmirror.com/magic-string/0.27.0 magic-string: registry.npmmirror.com/magic-string/0.27.0
picocolors: registry.npmmirror.com/picocolors/1.0.0 picocolors: registry.npmmirror.com/picocolors/1.0.0
terser: registry.npmmirror.com/terser/5.17.3 terser: registry.npmmirror.com/terser/5.17.3
vite: registry.npmmirror.com/vite/4.1.4 vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
transitivePeerDependencies: transitivePeerDependencies:
- postcss - postcss
- supports-color - supports-color
@ -3018,7 +3020,7 @@ packages:
regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11
systemjs: registry.npmmirror.com/systemjs/6.14.1 systemjs: registry.npmmirror.com/systemjs/6.14.1
terser: registry.npmmirror.com/terser/5.17.3 terser: registry.npmmirror.com/terser/5.17.3
vite: registry.npmmirror.com/vite/4.1.4 vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@ -3036,7 +3038,7 @@ packages:
'@babel/core': registry.npmmirror.com/@babel/core/7.21.8 '@babel/core': registry.npmmirror.com/@babel/core/7.21.8
'@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.8 '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.8
'@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.8 '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.8
vite: registry.npmmirror.com/vite/4.1.4 vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
vue: registry.npmmirror.com/vue/3.3.2 vue: registry.npmmirror.com/vue/3.3.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3052,7 +3054,7 @@ packages:
vite: ^4.0.0 vite: ^4.0.0
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: registry.npmmirror.com/vite/4.1.4 vite: registry.npmmirror.com/vite/4.1.4_sass@1.59.3
vue: registry.npmmirror.com/vue/3.3.2 vue: registry.npmmirror.com/vue/3.3.2
registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2: registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2:
@ -4106,6 +4108,11 @@ packages:
version: 1.2.1 version: 1.2.1
dev: false dev: false
registry.npmmirror.com/immutable/4.3.0:
resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/immutable/-/immutable-4.3.0.tgz}
name: immutable
version: 4.3.0
registry.npmmirror.com/inherits/2.0.4: registry.npmmirror.com/inherits/2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz} resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
name: inherits name: inherits
@ -4929,6 +4936,17 @@ packages:
version: 2.1.2 version: 2.1.2
dev: true 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
version: 1.59.3
engines: {node: '>=12.0.0'}
hasBin: true
dependencies:
chokidar: registry.npmmirror.com/chokidar/3.5.3
immutable: registry.npmmirror.com/immutable/4.3.0
source-map-js: registry.npmmirror.com/source-map-js/1.0.2
registry.npmmirror.com/sax/1.2.4: registry.npmmirror.com/sax/1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz} resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz}
name: sax name: sax
@ -5240,8 +5258,9 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dev: true dev: true
registry.npmmirror.com/vite/4.1.4: registry.npmmirror.com/vite/4.1.4_sass@1.59.3:
resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-4.1.4.tgz} resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite/-/vite-4.1.4.tgz}
id: registry.npmmirror.com/vite/4.1.4
name: vite name: vite
version: 4.1.4 version: 4.1.4
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
@ -5271,6 +5290,7 @@ packages:
postcss: registry.npmmirror.com/postcss/8.4.23 postcss: registry.npmmirror.com/postcss/8.4.23
resolve: registry.npmmirror.com/resolve/1.22.2 resolve: registry.npmmirror.com/resolve/1.22.2
rollup: registry.npmmirror.com/rollup/3.21.7 rollup: registry.npmmirror.com/rollup/3.21.7
sass: registry.npmmirror.com/sass/1.59.3
optionalDependencies: optionalDependencies:
fsevents: registry.npmmirror.com/fsevents/2.3.2 fsevents: registry.npmmirror.com/fsevents/2.3.2

@ -0,0 +1,41 @@
/**
* 将环境变量去掉VITE_APP_后,转换成小驼峰命名规则的属性的对象
* export: env,useEnv
* env: 转换后的环境变量
* useEnv: vue插件,本质将转换后环境变量绑定:app.config.globalProperties.$env
* @Author : J.L.Zhou
* @EMail : 12020042@qq.com
* @Tel : 151 1104 7708
* @CreateTime : 2023-05-16 10:44:48
* @LastEditos : J.L.Zhou
* @LastEditTime : 2023-05-16 10:44:48
* @Version : 1.0
* Copyright 2023 jlzhou.top Inc. All rights reserved.
* Warning: this content is only for internal circulation of the company.
* It is forbidden to divulge it or use it for other commercial purposes.
*/
console.debug("原始的环境变量",import.meta.env);
const env = {};
let name,value;
for(name in import.meta.env){
if(!name.startsWith("VITE_APP_")){
continue;
}
value = import.meta.env[name];
name = name.substr(9).toLowerCase().split(/_+/);
for (var i = 1; i < name.length; i++) {
name[i]=name[i].substr(0,1).toUpperCase()+name[i].substr(1);
}
name = name.join("");
env[name] = value;
}
console.debug('转换后的环境变量',env);
const useEnv = {
install(app){
app.config.globalProperties.$env=env;
}
}
export {env,useEnv};

@ -2,11 +2,13 @@ import {
createSSRApp createSSRApp
} from "vue"; } from "vue";
import App from "./App.vue"; import App from "./App.vue";
import {useEnv} from "./env.js"
console.debug(import.meta.env);
export function createApp() { export function createApp() {
const app = createSSRApp(App); const app = createSSRApp(App);
app.use(useEnv)
return { return {
app, app,
}; };

@ -1,6 +1,6 @@
{ {
"name" : "", "name" : "示例项目",
"appid" : "", "appid" : "__UNI__59B9EAC",
"description" : "", "description" : "",
"versionName" : "1.0.0", "versionName" : "1.0.0",
"versionCode" : "100", "versionCode" : "100",
@ -50,7 +50,7 @@
"quickapp" : {}, "quickapp" : {},
/* */ /* */
"mp-weixin" : { "mp-weixin" : {
"appid" : "", "appid" : "wxa02013cebc06dde4",
"setting" : { "setting" : {
"urlCheck" : false "urlCheck" : false
}, },
@ -65,8 +65,8 @@
"mp-toutiao" : { "mp-toutiao" : {
"usingComponents" : true "usingComponents" : true
}, },
"uniStatistics": { "uniStatistics" : {
"enable": false "enable" : false
}, },
"vueVersion" : "3" "vueVersion" : "3"
} }

@ -1,16 +1,43 @@
{ {
"easycom": {
"custom": {
"^w-(.*)": "@/w-components/w-$1/w-$1.vue"
}
},
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages "pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{ {
"path": "pages/index/index", "path": "pages/index/index"
"style": {
"navigationBarTitleText": "uni-app"
}
} }
], ],
"subPackages": [{
"root": "pages/demo",
"pages": [{
"path": "demo1"
}]
}],
"preloadRule": {
"pages/index/index": {
"network": "all",
"packages": ["pages/demo"]
}
},
"globalStyle": { "globalStyle": {
"navigationStyle": "custom",
"navigationBarTextStyle": "black", "navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app", "navigationBarTitleText": "",
"navigationBarBackgroundColor": "#F8F8F8", "navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8" "backgroundColor": "#F8F8F8"
},
"condition": {
//
"current": 0, //(list )
"list": [{
"name": "", //
"path": "pages/demo/demo1", //
"query": "" //onLoad
}]
} }
} }

@ -0,0 +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>
</view>
</view>
</template>
<script setup>
import {ref,getCurrentInstance} from 'vue'
const {proxy} = getCurrentInstance();
const title = ref(proxy.$env.title);
</script>
<style lang="scss" scoped>
.w-body {
padding: var(--window-top) var(--window-right) var(--window-bottom) var(--window-right);
}
</style>

@ -1,48 +1,63 @@
<template> <template>
<view class="w-body">
<view class="content"> <view class="content">
<image class="logo" src="/static/logo.png"></image> <view class="title">{{$env.title}}</view>
<view class="text-area"> <navigator url="/pages/demo/demo1" class="demo">demo</navigator>
<text class="title">{{ title }}</text>
</view> </view>
<w-loader title="" opacity="1" height="70vh"></w-loader>
<image mode="aspectFit" lazy-load class="wave" src="/static/wave.svg" />
<w-footer custom-style=""></w-footer>
</view> </view>
</template> </template>
<script> <script setup>
export default {
data() {
return {
title: 'Hello',
}
},
onLoad() {},
methods: {},
}
</script> </script>
<style> <style lang="scss" scoped>
.content { .w-body {
display: flex; position: relative;
flex-direction: column;
align-items: center; .content {
justify-content: center; position: absolute;
} text-align: center;
line-height: 2;
.logo { width: 100%;
height: 200rpx; left: 0;
width: 200rpx; top: 50vh;
margin-top: 200rpx; z-index: 1;
margin-left: auto; color: $uni-text-color-inverse;
margin-right: auto; font-weight: bold;
margin-bottom: 50rpx;
} .title {
font-size: 1.5rem;
.text-area { letter-spacing: .5rem;
display: flex; text-shadow: .2rem .2rem 0 $uni-text-color;
justify-content: center; }
}
.demo {
.title { background-color: #0002;
font-size: 36rpx; width: 6rem;
color: #8f8f94; margin: 1rem auto 0;
} font-size: 1rem;
border-radius: 5rem;
cursor: pointer;
transition: all .5s;
&:hover,
&:active {
opacity: .7;
}
}
}
.wave {
background-color: $w-color-1;
width: 100%;
height: auto;
padding: 0;
margin: 0;
aspect-ratio: 4/1;
}
}
</style> </style>

@ -0,0 +1,18 @@
<template>
<view class="w-body">
</view>
</template>
<script setup>
import { onLoad,onShow } from '@dcloudio/uni-app'
import { ref } from 'vue'
</script>
<style lang="scss" scoped>
.w-body{
--navbar-height:44px
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 18 KiB

@ -0,0 +1,17 @@
<svg class="editorial" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 24 150 28" preserveAspectRatio="none">
<defs>
<path id="gentle-wave" d="M-160
44c30 0
58-18 88-18s
58 18 88 18
58-18 88-18
58 18 88 18
v44h-352z"></path>
</defs>
<g class="parallax">
<use xlink:href="#gentle-wave" x="50" y="6" fill="#ffffff"></use>
<use xlink:href="#gentle-wave" x="20" y="3" fill="#ffffff33"></use>
<use xlink:href="#gentle-wave" x="80" y="0" fill="#ffffff66"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 639 B

@ -12,6 +12,9 @@
* 使scss scss 使 import * 使scss scss 使 import
*/ */
/* 自定义主体颜色 */
$w-color-1:#2564a1;
$w-color-2:#2c77bf;
/* 颜色变量 */ /* 颜色变量 */
/* 行为相关颜色 */ /* 行为相关颜色 */

@ -0,0 +1 @@
# 自定义组件库

@ -0,0 +1,24 @@
/**
*
* @Author : J.L.Zhou
* @EMail : 12020042@qq.com
* @Tel : 151 1104 7708
* @CreateTime : 2023-05-16 17:04:05
* @LastEditos : J.L.Zhou
* @LastEditTime : 2023-05-16 17:04:05
* @Version : 1.0
* Copyright 2023 jlzhou.top Inc. All rights reserved.
* Warning: this content is only for internal circulation of the company.
* It is forbidden to divulge it or use it for other commercial purposes.
*/
export default {
// 将自定义节点设置成虚拟的更加接近Vue组件的表现可以去掉微信小程序自定义组件多出的最外层标签
options: {
// #ifdef MP-WEIXIN
multipleSlots: true, //是否启动多slots支持
styleIsolation: 'shared', //页面式样和组件内式样共享
addGlobalClass: true, //页面式样是否影响到自定义组件
virtualHost: true, //将自定义节点设置为虚拟的
// #endif
}
}

@ -0,0 +1,38 @@
<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>

@ -0,0 +1,149 @@
<template>
<view class="loader-root" :style="{'--opacity':props.opacity,'--height':props.height}">
<view class="loader">
<view class="face">
<view class="circle"></view>
</view>
<view class="face">
<view class="circle"></view>
</view>
<view class="logo"><img class="img" src="/static/logo.png" loading="lazy"></view>
</view>
<view v-if="props.title" class="loader-title">{{props.title}}</view>
</view>
</template>
<script>
import wx from '../mixins/mp-weixin.js'
export default {
mixins:[wx]
}
</script>
<script setup>
import {ref} from 'vue'
const props = defineProps({
title:{
type:String,
default:"加载中..."
},
opacity: {
type:Number,
default:1
},
height: {
type:String,
default:"100vh"
}
})
</script>
<style lang="scss" scoped>
.loader {
width: 20em;
height: 20em;
font-size: 1.5vmin;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.loader .face {
position: absolute;
border-radius: 50%;
border-style: solid;
animation: animate 3s linear infinite;
}
.loader .face:nth-child(1) {
width: 100%;
height: 100%;
color: #0d9be0;
border-color: currentColor transparent transparent currentColor;
border-width: 0.2em 0.2em 0em 0em;
--deg: -45deg;
animation-direction: normal;
}
.loader .face:nth-child(2) {
width: 90%;
height: 90%;
color: #7bc528;
border-color: currentColor currentColor transparent transparent;
border-width: 0.2em 0em 0em 0.2em;
--deg: -135deg;
animation-direction: reverse;
}
.loader .face .circle {
position: absolute;
width: 50%;
height: 0.1em;
top: 50%;
left: 50%;
background-color: #0000;
transform: rotate(var(--deg));
transform-origin: left;
}
.loader .face .circle::before {
position: absolute;
top: -.5em;
right: -0.45em;
content: '';
width: .6em;
height: .6em;
background-color: currentColor;
border-radius: 50%;
box-shadow: 0 0 .5em .15em currentColor;
}
@keyframes animate {
to {
transform: rotate(1turn);
}
}
.loader-root {
width: 100%;
height: var(--height,100vh);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
position: relative;
opacity:1;
transition: opacity 5s,display 5s / 5s;
&::before {
background-image: radial-gradient(closest-side,$w-color-2,$w-color-1);
content: '';
position: absolute;
width: 100%;
height: 100%;
opacity: var(--opacity,1);
}
}
.loader-title {
margin: 4vmin 0 10vmin;
font-size: 3vmin;
color:#ccc;
text-shadow: .2vmin .2vmin 0 $w-color-1;
letter-spacing: .3vmin;
position: relative;
}
.loader .logo .img {
width: 17vmin;
height: 17vmin;
}
.loader .logo {
background-image: linear-gradient(to bottom,#FFF,#aaa);
padding: 3vmin ;
border-radius: 50%;
box-shadow: 0 0 .5vmin #fff inset, 0 0 2vmin #0006;
}
</style>
Loading…
Cancel
Save