Browse Source

添加未勾选用户协议弹窗

wangyi/feature-20251022162725-启动页登录注册
Ethereal 4 weeks ago
parent
commit
dc7cc6f5c3
  1. 5
      pages/start/Registration/Registration.vue
  2. 94
      pages/start/login/login.vue
  3. 16
      pages/start/select/select.vue
  4. 4
      pages/start/startup/startup.vue
  5. 18
      uni_modules/uni-popup/changelog.md
  6. 28
      uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  7. 9
      uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
  8. 27
      uni_modules/uni-popup/components/uni-popup/uni-popup.vue
  9. 85
      uni_modules/uni-popup/package.json
  10. 7
      uni_modules/uni-transition/changelog.md
  11. 96
      uni_modules/uni-transition/components/uni-transition/uni-transition.vue
  12. 105
      uni_modules/uni-transition/package.json

5
pages/start/Registration/Registration.vue

@ -283,7 +283,7 @@ function sendCode() {
let time = 6; let time = 6;
const timer = setInterval(() => { const timer = setInterval(() => {
time--; time--;
codeBtnText.value = "重新发送 " + time + "s";
codeBtnText.value = "重新发送 " + time + "S";
if (time <= 0) { if (time <= 0) {
clearInterval(timer); clearInterval(timer);
codeBtnText.value = "重新发送"; codeBtnText.value = "重新发送";
@ -604,7 +604,8 @@ function changeCheckbox() {
flex-direction: column; flex-direction: column;
font-size: 24rpx; font-size: 24rpx;
color: #999999; color: #999999;
margin-bottom: 100rpx;
margin-top: 330rpx;
margin-bottom: -22rpx;
} }
.third-party-login { .third-party-login {

94
pages/start/login/login.vue

@ -218,6 +218,17 @@
<text class="third-party-text">通过 Google 登录</text> <text class="third-party-text">通过 Google 登录</text>
</view> </view>
</view> </view>
<!-- 同意弹窗 -->
<uniPopup ref="agreementPopup" type="dialog">
<view class="popup-content">
<text class="popup-title">同意并继续</text>
<text class="popup-message">请阅读并同意服务协议和隐私权限</text>
<button class="agree-button" @click="handleAgree">
<text class="agree-text">同意</text>
</button>
</view>
</uniPopup>
<footerBar class="static-footer" :type="type"></footerBar> <footerBar class="static-footer" :type="type"></footerBar>
</view> </view>
</template> </template>
@ -226,9 +237,11 @@
import { ref } from "vue"; import { ref } from "vue";
// //
import countryList from "./list.js"; import countryList from "./list.js";
import footerBar from '../../../components/footerBar-cn'
import footerBar from "../../../components/footerBar-cn";
import uniPopupDialogVue from "../../../uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue";
import uniPopup from "../../../uni_modules/uni-popup/components/uni-popup/uni-popup.vue";
const type = ref('member')
const type = ref("member");
const email = ref(""); const email = ref("");
const password = ref(""); const password = ref("");
const phone = ref(""); const phone = ref("");
@ -291,6 +304,8 @@ function switchPhone() {
} }
function register() { function register() {
if (switchType.value === "User") {
}
if (switchType.value === "Email") { if (switchType.value === "Email") {
// //
if (!email.value) { if (!email.value) {
@ -318,6 +333,31 @@ function register() {
// //
console.log("登录:", phone.value); console.log("登录:", phone.value);
} }
if (!agreed.value) {
//
agreementPopup.value.open();
return;
}
//
uni.showToast({
title: "登录成功",
icon: "success",
});
}
//
const agreementPopup = ref(null);
//
function handleAgree() {
//
agreementPopup.value.close();
//
agreed.value = true;
checkboxUrl.value = "../../../static/icons/Check-one-true.png";
//
} }
function loginWithApple() { function loginWithApple() {
@ -774,4 +814,54 @@ function changeCheckbox() {
position: fixed; position: fixed;
bottom: 0; bottom: 0;
} }
/* 弹窗样式 */
.popup-content {
background-color: #ffffff;
padding: 40rpx;
text-align: center;
border-radius: 10rpx;
width: 550rpx;
}
.popup-title {
font-size: 36rpx;
font-weight: bold;
color: #333;
margin-bottom: 80rpx;
text-align: center; /* 水平居中 */
display: flex; /* 使用flex布局 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
}
.popup-message {
font-size: 28rpx;
color: #000000;
margin-bottom: 80rpx;
text-align: center; /* 水平居中 */
display: flex; /* 使用flex布局 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
}
.agree-button {
width: 300rpx;
height: 80rpx;
background-color: #000000;
border-radius: 40rpx;
display: flex; /* 添加flex布局 */
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
}
.agree-text {
color: #ffffff;
font-size: 34rpx;
/* 添加垂直居中相关样式 */
display: flex;
align-items: center;
justify-content: center;
line-height: 1; /* 确保文字垂直居中 */
}
</style> </style>

16
pages/start/select/select.vue

@ -17,11 +17,22 @@
<button class="register-button" @click="toRegistration">注册</button> <button class="register-button" @click="toRegistration">注册</button>
</view> </view>
<footerBar class="static-footer" :type="type"></footerBar>
</view> </view>
</template> </template>
<script setup> <script setup>
import footerBar from '../../../components/footerBar-cn'
import { ref, reactive, toRefs, watch } from 'vue'
const type = ref('member')
function toRegistration() { function toRegistration() {
uni.navigateTo({ uni.navigateTo({
url: "/pages/start/Registration/Registration", url: "/pages/start/Registration/Registration",
@ -149,4 +160,9 @@ function toLogin() {
.nav-item.active .nav-text { .nav-item.active .nav-text {
color: #000000; color: #000000;
} }
.static-footer {
position: fixed;
bottom: 0;
}
</style> </style>

4
pages/start/startup/startup.vue

@ -16,11 +16,13 @@ onShow(() => {
}); });
}, 3000); }, 3000);
}); });
</script> </script>
<style> <style>
.background { .background {
background: linear-gradient(180deg, #2a0c4d, #1d0836, #0d0218);
background: linear-gradient(180deg, #FB6967, #FB6967);
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
} }

18
uni_modules/uni-popup/changelog.md

@ -1,3 +1,21 @@
## 1.9.11(2025-08-20)
- 修复 uni-popup-dialog组件设置 borderRadius 不生效的 Bug
## 1.9.10(2025-07-18)
- 修复 nvue 下弹窗样式错乱的问题 ,更新依赖 uni-transition 组件
- 更新 示例取消 borderRadius 属性 ,如需内容圆角,用户应该直接在内容插槽中实现
## 1.9.9(2025-06-11)
- 修复 uni-popup-dialog 中 setVal 方法报错的问题
- 修复 uni-popup-dialog 数据双向绑定问题。
## 1.9.8(2025-04-16)
- 修复 更新组件示例 ,解决更新数据或保存项目导致弹窗消失的问题
## 1.9.7(2025-04-14)
- 修复 uni-popup-dialog 弹出框在vue3中双向绑定问题
## 1.9.6(2025-01-08)
- 修复 示例中过期图片地址
## 1.9.5(2024-10-15)
- 修复 微信小程序中的getSystemInfo警告
## 1.9.2(2024-09-21)
- 修复 uni-popup在android上的重复点击弹出位置不正确的bug
## 1.9.1(2024-04-02) ## 1.9.1(2024-04-02)
- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法) - 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
## 1.9.0(2024-03-28) ## 1.9.0(2024-03-28)

28
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@ -1,5 +1,5 @@
<template> <template>
<view class="uni-popup-dialog">
<view class="uni-popup-dialog" :style="{ borderRadius }">
<view class="uni-dialog-title"> <view class="uni-dialog-title">
<text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text> <text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{titleText}}</text>
</view> </view>
@ -124,6 +124,10 @@
focus: { focus: {
type: Boolean, type: Boolean,
default: true, default: true,
},
borderRadius: {
type: String,
default: '11px',
} }
}, },
data() { data() {
@ -156,12 +160,13 @@
} }
}, },
value(val) { value(val) {
if (this.maxlength != -1 && this.mode === 'input') {
this.val = val.slice(0, this.maxlength);
} else {
this.val = val
}
this.setVal(val)
},
// #ifdef VUE3
modelValue(val) {
this.setVal(val)
}, },
// #endif
val(val) { val(val) {
// #ifdef VUE2 // #ifdef VUE2
// TODO vue2 // TODO vue2
@ -189,6 +194,16 @@
}, },
methods: { methods: {
/** /**
* 给val属性赋值
*/
setVal(val) {
if (this.maxlength != -1 && this.mode === 'input') {
this.val = val.slice(0, this.maxlength);
} else {
this.val = val
}
},
/**
* 点击确认按钮 * 点击确认按钮
*/ */
onOk() { onOk() {
@ -218,7 +233,6 @@
<style lang="scss"> <style lang="scss">
.uni-popup-dialog { .uni-popup-dialog {
width: 300px; width: 300px;
border-radius: 11px;
background-color: #fff; background-color: #fff;
} }

9
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue

@ -39,24 +39,25 @@
}, },
data() { data() {
return { return {
// TODO
bottomData: [{ bottomData: [{
text: '微信', text: '微信',
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/c2b17470-50be-11eb-b680-7980c8a877b8.png',
icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
name: 'wx' name: 'wx'
}, },
{ {
text: '支付宝', text: '支付宝',
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png',
icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
name: 'ali' name: 'ali'
}, },
{ {
text: 'QQ', text: 'QQ',
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/e7a79520-50be-11eb-b997-9918a5dda011.png',
icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
name: 'qq' name: 'qq'
}, },
{ {
text: '新浪', text: '新浪',
icon: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/0dacdbe0-50bf-11eb-8ff1-d5dcf8779628.png',
icon: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
name: 'sina' name: 'sina'
}, },
// { // {

27
uni_modules/uni-popup/components/uni-popup/uni-popup.vue

@ -192,6 +192,17 @@
}, },
mounted() { mounted() {
const fixSize = () => { const fixSize = () => {
// #ifdef MP-WEIXIN
const {
windowWidth,
windowHeight,
windowTop,
safeArea,
screenHeight,
safeAreaInsets
} = uni.getWindowInfo()
// #endif
// #ifndef MP-WEIXIN
const { const {
windowWidth, windowWidth,
windowHeight, windowHeight,
@ -200,6 +211,7 @@
screenHeight, screenHeight,
safeAreaInsets safeAreaInsets
} = uni.getSystemInfoSync() } = uni.getSystemInfoSync()
// #endif
this.popupWidth = windowWidth this.popupWidth = windowWidth
this.popupHeight = windowHeight + (windowTop || 0) this.popupHeight = windowHeight + (windowTop || 0)
// TODO fix by mehaotian ,ios app ios // TODO fix by mehaotian ,ios app ios
@ -350,6 +362,7 @@
this.showPopup = true this.showPopup = true
this.showTrans = true this.showTrans = true
this.$nextTick(() => { this.$nextTick(() => {
this.showPoptrans()
if (this.messageChild && this.type === 'message') { if (this.messageChild && this.type === 'message') {
this.messageChild.timerClose() this.messageChild.timerClose()
} }
@ -372,8 +385,7 @@
} }
// TODO type // TODO type
if (type) return if (type) return
this.showPopup = true
this.showTrans = true
this.showPoptrans()
}, },
/** /**
* 中间弹出样式处理 * 中间弹出样式处理
@ -403,8 +415,7 @@
} }
// TODO type // TODO type
if (type) return if (type) return
this.showPopup = true
this.showTrans = true
this.showPoptrans()
}, },
left(type) { left(type) {
this.popupstyle = 'left' this.popupstyle = 'left'
@ -423,8 +434,7 @@
} }
// TODO type // TODO type
if (type) return if (type) return
this.showPopup = true
this.showTrans = true
this.showPoptrans()
}, },
right(type) { right(type) {
this.popupstyle = 'right' this.popupstyle = 'right'
@ -443,8 +453,13 @@
} }
// TODO type // TODO type
if (type) return if (type) return
this.showPoptrans()
},
showPoptrans(){
this.$nextTick(()=>{
this.showPopup = true this.showPopup = true
this.showTrans = true this.showTrans = true
})
} }
} }
} }

85
uni_modules/uni-popup/package.json

@ -1,7 +1,7 @@
{ {
"id": "uni-popup", "id": "uni-popup",
"displayName": "uni-popup 弹出层", "displayName": "uni-popup 弹出层",
"version": "1.9.1",
"version": "1.9.11",
"description": " Popup 组件,提供常用的弹层", "description": " Popup 组件,提供常用的弹层",
"keywords": [ "keywords": [
"uni-ui", "uni-ui",
@ -9,10 +9,12 @@
"弹窗", "弹窗",
"popup", "popup",
"弹框" "弹框"
],
],
"repository": "https://github.com/dcloudio/uni-ui", "repository": "https://github.com/dcloudio/uni-ui",
"engines": { "engines": {
"HBuilderX": ""
"HBuilderX": "",
"uni-app": "^4.07",
"uni-app-x": ""
}, },
"directories": { "directories": {
"example": "../../temps/example_temps" "example": "../../temps/example_temps"
@ -35,7 +37,10 @@
"permissions": "无" "permissions": "无"
}, },
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
"type": "component-vue",
"darkmode": "x",
"i18n": "x",
"widescreen": "x"
}, },
"uni_modules": { "uni_modules": {
"dependencies": [ "dependencies": [
@ -45,42 +50,56 @@
"encrypt": [], "encrypt": [],
"platforms": { "platforms": {
"cloud": { "cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
"tcb": "x",
"aliyun": "x",
"alipay": "x"
}, },
"client": { "client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
"uni-app": {
"vue": {
"vue2": "√",
"vue3": "√"
},
"web": {
"safari": "√",
"chrome": "√"
}, },
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
"app": {
"vue": "√",
"nvue": "√",
"android": "√",
"ios": "√",
"harmony": "√"
}, },
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
"mp": {
"weixin": "√",
"alipay": "√",
"toutiao": "√",
"baidu": "√",
"kuaishou": "-",
"jd": "-",
"harmony": "-",
"qq": "√",
"lark": "-"
}, },
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
"quickapp": {
"huawei": "-",
"union": "-"
}
}, },
"快应用": {
"华为": "u",
"联盟": "u"
"uni-app-x": {
"web": {
"safari": "√",
"chrome": "√"
}, },
"Vue": {
"vue2": "y",
"vue3": "y"
"app": {
"android": "√",
"ios": "√",
"harmony": "√"
},
"mp": {
"weixin": "√"
}
} }
} }
} }

7
uni_modules/uni-transition/changelog.md

@ -1,3 +1,10 @@
## 1.3.6(2025-07-18)
- 修复 nvue 页面,样式错误问题
## 1.3.5(2025-06-11)
- 修复 第一次执行不显示动画的问题
## 1.3.4(2025-04-16)
- 修复 页面数据更新到底动画复原的问题
- 修复 示例页面打开报错的问题
## 1.3.3(2024-04-23) ## 1.3.3(2024-04-23)
- 修复 当元素会受变量影响自动隐藏的bug - 修复 当元素会受变量影响自动隐藏的bug
## 1.3.2(2023-05-04) ## 1.3.2(2023-05-04)

96
uni_modules/uni-transition/components/uni-transition/uni-transition.vue

@ -1,16 +1,20 @@
<template> <template>
<!-- #ifndef APP-NVUE --> <!-- #ifndef APP-NVUE -->
<view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
<view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick">
<slot></slot>
</view>
<!-- #endif --> <!-- #endif -->
<!-- #ifdef APP-NVUE --> <!-- #ifdef APP-NVUE -->
<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick">
<slot></slot>
</view>
<!-- #endif --> <!-- #endif -->
</template> </template>
<script> <script>
import { createAnimation } from './createAnimation'
import { createAnimation } from './createAnimation'
/**
/**
* Transition 过渡动画 * Transition 过渡动画
* @description 简单过渡动画组件 * @description 简单过渡动画组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=985 * @tutorial https://ext.dcloud.net.cn/plugin?id=985
@ -26,9 +30,9 @@ import { createAnimation } from './createAnimation'
* @property {Number} duration 过渡动画持续时间 * @property {Number} duration 过渡动画持续时间
* @property {Object} styles 组件样式 css 样式注意带-连接符的属性需要使用小驼峰写法如`backgroundColor:red` * @property {Object} styles 组件样式 css 样式注意带-连接符的属性需要使用小驼峰写法如`backgroundColor:red`
*/ */
export default {
export default {
name: 'uniTransition', name: 'uniTransition',
emits:['click','change'],
emits: ['click', 'change'],
props: { props: {
show: { show: {
type: Boolean, type: Boolean,
@ -36,7 +40,7 @@ export default {
}, },
modeClass: { modeClass: {
type: [Array, String], type: [Array, String],
default() {
default () {
return 'fade' return 'fade'
} }
}, },
@ -46,24 +50,24 @@ export default {
}, },
styles: { styles: {
type: Object, type: Object,
default() {
default () {
return {} return {}
} }
}, },
customClass:{
customClass: {
type: String, type: String,
default: '' default: ''
}, },
onceRender:{
type:Boolean,
default:false
onceRender: {
type: Boolean,
default: false
}, },
}, },
data() { data() {
return { return {
isShow: false, isShow: false,
transform: '', transform: '',
opacity: 1,
opacity: 0,
animationData: {}, animationData: {},
durationTime: 300, durationTime: 300,
config: {} config: {}
@ -121,7 +125,7 @@ export default {
if (obj.duration) { if (obj.duration) {
this.durationTime = obj.duration this.durationTime = obj.duration
} }
this.animation = createAnimation(Object.assign(this.config, obj),this)
this.animation = createAnimation(Object.assign(this.config, obj), this)
}, },
/** /**
* 点击组件触发回调 * 点击组件触发回调
@ -136,18 +140,15 @@ export default {
* @param {Object} obj * @param {Object} obj
*/ */
step(obj, config = {}) { step(obj, config = {}) {
if (!this.animation) return
for (let i in obj) {
try {
if(typeof obj[i] === 'object'){
this.animation[i](...obj[i])
}else{
this.animation[i](obj[i])
}
} catch (e) {
console.error(`方法 ${i} 不存在`)
}
if (!this.animation) return this
Object.keys(obj).forEach(key => {
const value = obj[key]
if (typeof this.animation[key] === 'function') {
Array.isArray(value) ?
this.animation[key](...value) :
this.animation[key](value)
} }
})
this.animation.step(config) this.animation.step(config)
return this return this
}, },
@ -161,24 +162,31 @@ export default {
// //
open() { open() {
clearTimeout(this.timer) clearTimeout(this.timer)
this.transform = ''
this.isShow = true this.isShow = true
let { opacity, transform } = this.styleInit(false)
if (typeof opacity !== 'undefined') {
this.opacity = opacity
}
this.transform = transform
//
this.transform = this.styleInit(false).transform || ''
this.opacity = this.styleInit(false).opacity || 0
// nextTick wx // nextTick wx
this.$nextTick(() => { this.$nextTick(() => {
// TODO // TODO
this.timer = setTimeout(() => { this.timer = setTimeout(() => {
this.animation = createAnimation(this.config, this) this.animation = createAnimation(this.config, this)
this.tranfromInit(false).step() this.tranfromInit(false).step()
this.animation.run()
this.animation.run(() => {
// #ifdef APP-NVUE
this.transform = this.styleInit(false).transform || ''
this.opacity = this.styleInit(false).opacity || 1
// #endif
// #ifndef APP-NVUE
this.transform = ''
this.opacity = this.styleInit(false).opacity || 1
// #endif
this.$emit('change', { this.$emit('change', {
detail: this.isShow detail: this.isShow
}) })
}, 20)
})
}, 80)
}) })
}, },
// //
@ -200,22 +208,20 @@ export default {
}, },
// //
styleInit(type) { styleInit(type) {
let styles = {
transform: ''
}
let buildStyle = (type, mode) => {
if (mode === 'fade') {
styles.opacity = this.animationType(type)[mode]
let styles = { transform: '', opacity: 1 }
const buildStyle = (type, mode) => {
const value = this.animationType(type)[mode] // 使 type
if (mode.startsWith('fade')) {
styles.opacity = value
} else { } else {
styles.transform += this.animationType(type)[mode] + ' '
styles.transform += value + ' '
} }
} }
if (typeof this.modeClass === 'string') { if (typeof this.modeClass === 'string') {
buildStyle(type, this.modeClass) buildStyle(type, this.modeClass)
} else { } else {
this.modeClass.forEach(mode => {
buildStyle(type, mode)
})
this.modeClass.forEach(mode => buildStyle(type, mode))
} }
return styles return styles
}, },
@ -254,7 +260,7 @@ export default {
}, },
animationType(type) { animationType(type) {
return { return {
fade: type ? 0 : 1,
fade: type ? 1 : 0,
'slide-top': `translateY(${type ? '0' : '-100%'})`, 'slide-top': `translateY(${type ? '0' : '-100%'})`,
'slide-right': `translateX(${type ? '0' : '100%'})`, 'slide-right': `translateX(${type ? '0' : '100%'})`,
'slide-bottom': `translateY(${type ? '0' : '100%'})`, 'slide-bottom': `translateY(${type ? '0' : '100%'})`,
@ -280,7 +286,7 @@ export default {
return name.replace(/([A-Z])/g, '-$1').toLowerCase() return name.replace(/([A-Z])/g, '-$1').toLowerCase()
} }
} }
}
}
</script> </script>
<style></style> <style></style>

105
uni_modules/uni-transition/package.json

@ -1,7 +1,7 @@
{ {
"id": "uni-transition", "id": "uni-transition",
"displayName": "uni-transition 过渡动画", "displayName": "uni-transition 过渡动画",
"version": "1.3.3",
"version": "1.3.6",
"description": "元素的简单过渡动画", "description": "元素的简单过渡动画",
"keywords": [ "keywords": [
"uni-ui", "uni-ui",
@ -12,12 +12,14 @@
], ],
"repository": "https://github.com/dcloudio/uni-ui", "repository": "https://github.com/dcloudio/uni-ui",
"engines": { "engines": {
"HBuilderX": ""
"HBuilderX": "",
"uni-app": "^4.12",
"uni-app-x": ""
}, },
"directories": { "directories": {
"example": "../../temps/example_temps" "example": "../../temps/example_temps"
}, },
"dcloudext": {
"dcloudext": {
"sale": { "sale": {
"regular": { "regular": {
"price": "0.00" "price": "0.00"
@ -35,49 +37,74 @@
"permissions": "无" "permissions": "无"
}, },
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
"type": "component-vue",
"darkmode": "x",
"i18n": "x",
"widescreen": "x"
}, },
"uni_modules": { "uni_modules": {
"dependencies": ["uni-scss"],
"dependencies": [
"uni-scss"
],
"encrypt": [], "encrypt": [],
"platforms": { "platforms": {
"cloud": { "cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "n"
"tcb": "x",
"aliyun": "x",
"alipay": "x"
}, },
"client": { "client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
"uni-app": {
"vue": {
"vue2": "√",
"vue3": "√"
},
"web": {
"safari": "√",
"chrome": "√"
},
"app": {
"vue": "√",
"nvue": "√",
"android": "√",
"ios": "√",
"harmony": "√"
},
"mp": {
"weixin": {
},
"alipay": {
},
"toutiao": {
},
"baidu": {
},
"kuaishou": {
},
"jd": {
},
"harmony": "-",
"qq": "√",
"lark": "-"
},
"quickapp": {
"huawei": "√",
"union": "√"
}
},
"uni-app-x": {
"web": {
"safari": "-",
"chrome": "-"
},
"app": {
"android": "-",
"ios": "-",
"harmony": "-"
},
"mp": {
"weixin": "-"
}
} }
} }
} }

Loading…
Cancel
Save