HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

关于 uni-push 小米厂商推送“个人订阅”迁移至“公信消息”的适配通知

unipush 小米

关于push,近期小米推送将上线订阅消息功能,原私信通道下的个人订阅类目将统一调整至公信消息。仅接入小米个人订阅消息的 App 开发者需关注,未使用无需处理。

1、订阅类消息仅支持使用 8 个专属订阅类目,规则详见小米推送2026年消息分类新规:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2321

2、2026年8月1日起原有私信渠道下的【个人订阅】通道将关闭申请入口,于2026年12月31日正式关停使用。

3、2026年8月1日之前已申请接入过【个人订阅】分类的应用,需要在2026年12月31日前完成订阅消息功能接入和订阅授权弹窗适配。具体接入流程请参考:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2320

4、2026年8月1日之后新申请订阅分类的需要按照新规接入发送

对接个推侧需要进行以下适配:
1、服务端:接入订阅类消息后推送提醒方式与私信消息相同,新订阅消息的channel_id与原有【个人订阅】分类的channel_id不同,在调用个推服务推送API下发订阅类消息时,必须同时设置小米消息分类和私信模板相关参数,接口设置参照文档【小米】私信模板id:https://docs.getui.com/getui/server/rest_v2/third_party/#doc-title-15
2、客户端:

  • Android小米厂商SDK 需要升级到 com.getui.opt:xmp:3.3.7 版本
  • 客户端需完成订阅消息功能接入,同步适配订阅授权弹窗,统一采用系统原生 API 调用实现,完整接入规范可参考小米推送订阅消息官方文档:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2320

以上请尽快完成适配,根据应用业务场景,发送不同类别的消息。如有疑问,可以添加微信客服群进行咨询,加群方式参考文档:https://uniapp.dcloud.net.cn/unipush-v2.html#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

继续阅读 »

关于push,近期小米推送将上线订阅消息功能,原私信通道下的个人订阅类目将统一调整至公信消息。仅接入小米个人订阅消息的 App 开发者需关注,未使用无需处理。

1、订阅类消息仅支持使用 8 个专属订阅类目,规则详见小米推送2026年消息分类新规:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2321

2、2026年8月1日起原有私信渠道下的【个人订阅】通道将关闭申请入口,于2026年12月31日正式关停使用。

3、2026年8月1日之前已申请接入过【个人订阅】分类的应用,需要在2026年12月31日前完成订阅消息功能接入和订阅授权弹窗适配。具体接入流程请参考:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2320

4、2026年8月1日之后新申请订阅分类的需要按照新规接入发送

对接个推侧需要进行以下适配:
1、服务端:接入订阅类消息后推送提醒方式与私信消息相同,新订阅消息的channel_id与原有【个人订阅】分类的channel_id不同,在调用个推服务推送API下发订阅类消息时,必须同时设置小米消息分类和私信模板相关参数,接口设置参照文档【小米】私信模板id:https://docs.getui.com/getui/server/rest_v2/third_party/#doc-title-15
2、客户端:

  • Android小米厂商SDK 需要升级到 com.getui.opt:xmp:3.3.7 版本
  • 客户端需完成订阅消息功能接入,同步适配订阅授权弹窗,统一采用系统原生 API 调用实现,完整接入规范可参考小米推送订阅消息官方文档:https://dev.mi.com/xiaomihyperos/documentation/detail?pId=2320

以上请尽快完成适配,根据应用业务场景,发送不同类别的消息。如有疑问,可以添加微信客服群进行咨询,加群方式参考文档:https://uniapp.dcloud.net.cn/unipush-v2.html#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

收起阅读 »

Tab组件内Navigation跳转,TabBar导航栏隐藏失败如何解决

tabbar

问题现象
在“我的”页面点击“跳转设置页”按钮跳转到设置页面,底部的TabBar导航栏仍然存在。

点击放大点击放大

主页面有“首页”、“我的”两个Tab页面,部分代码如下:

@Entry
@Component
struct TabsNavPage {
build() {
Tabs() {
TabContent() {
MinePage()
}
.tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '我的'))

  TabContent() {  
    Text('首页')  
  }  
  .tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '首页'))  
}  
.barPosition(BarPosition.End)  

}
}

@Component
struct MinePage {
@Provide('pathStack') pathStack: NavPathStack = new NavPathStack();

@Builder
PagesMap(name: string) {
if (name === 'Settings') {
Settings();
}
}

build() {
Navigation(this.pathStack) {
Row(){
Column() {
Button('跳转设置页')
.onClick(() => {
this.pathStack.pushPathByName('Settings', null);
})
}
}
}
.hideTitleBar(true)
.navDestination(this.PagesMap)
}
}

@Component
struct Settings {
@Consume('pathStack') pathStack: NavPathStack = new NavPathStack();

build() {
NavDestination() {
Button('返回')
.onClick(() => {
this.pathStack.pop();
});
}.title('设置')
}
}
效果预览
点击放大

背景知识
Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@Provide装饰器和@Consume装饰器:应用于与后代组件的双向数据同步、状态数据在多个层级之间传递的场景。
解决方案
问题现象中是用Tab组件包裹Navigation组件,跳转Navigation子组件并不会影响到外层的Tab组件。

将Navigation组件作为根容器包括Tab组件,为保证子组件都共享一个NavPathStack实例,可以使用@Provide和@Consume装饰器将导航控制器对象NavPathStack传递给Tabs内的子组件使用。

@Entry
@Component
struct TabsNavPage {
// 使用@Provide将路由栈对象传递给TabContent内的组件
@Provide('pathStack') pathStack: NavPathStack = new NavPathStack();

@Builder
PagesMap(name: string) {
if (name === 'Settings') {
Settings();
}
}

build() {
// 使用Navigation包裹Tabs,Tabs子页使用同一个路由栈对象
Navigation(this.pathStack) {
Tabs() {
TabContent() {
MinePage();
}
.tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '我的'))

    TabContent() {  
      Text('首页').fontColor('40fp');  
    }  
    .tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '首页'))  
  }  
  .barPosition(BarPosition.End);  
}  
.hideTitleBar(true)  
.navDestination(this.PagesMap)  

}
}

@Component
struct MinePage {
// 获取Navigation的路由栈对象
@Consume('pathStack') pathStack: NavPathStack;

build() {
Column() {
Button('跳转设置页')
.onClick(() => {
this.pathStack.pushPathByName('Settings', null);
});
};
}
}

@Component
struct Settings {
@Consume('pathStack') pathStack: NavPathStack = new NavPathStack();

build() {
NavDestination() {
Button('返回')
.onClick(() => {
this.pathStack.pop();
});
}.title('设置')
}
}
https://coub.com/view/5kamzbr4mi
https://coub.com/view/9slmznc3ol
https://coub.com/view/dnhe4x7otv
https://coub.com/view/libk78392s
https://coub.com/view/2splvx7ais
https://coub.com/view/0fqk03fwlz
https://coub.com/view/u3but76ukt
https://coub.com/view/2xrg8kdx5o
https://coub.com/view/iqeb7cwj8k
https://coub.com/view/lx86s7cfpr
https://coub.com/view/qin8evf0sk
https://coub.com/view/ul1dmz1db2
https://coub.com/view/1n6f59dch3
https://coub.com/view/mz789w4pbg
https://coub.com/view/trb9jcog9p
https://coub.com/view/j3i3lac4yx
https://coub.com/view/84l11twj2s
https://coub.com/view/ut50q4erj3
https://coub.com/view/w6uuiu7ru3
https://coub.com/view/iun2hgfzqm
https://coub.com/view/hc6d3b3sts
https://coub.com/view/7l7wd758hs
https://coub.com/view/sshi8p319r
https://coub.com/view/2y21fnu5t4
https://coub.com/view/3dpvlq1hxa
https://coub.com/view/7tefrrju9a
https://coub.com/view/kr0zw5ow09
https://coub.com/view/vze4xn6lxk
https://coub.com/view/gp0hoyjbev
https://coub.com/view/8ukozyn2pf
https://coub.com/view/gne8uf8fun
https://coub.com/view/o1ljlnaqrl
https://coub.com/view/6pe00kuw3p
https://coub.com/view/3ys8ww2kf5
https://coub.com/view/ky54919n96
https://coub.com/view/ovvfpcdgiy
https://coub.com/view/h1g7qx1ibk
https://coub.com/view/4ytxeco099
https://coub.com/view/z8grd6tisg
https://coub.com/view/ihcl3n786e
https://coub.com/view/e48vma3hes
https://coub.com/view/rgk8us00m7
https://coub.com/view/mxmu9agwxl
https://coub.com/view/jjq7sf2887
https://coub.com/view/rtlotmcb2o
https://coub.com/view/2xzrkf1j13
https://coub.com/view/datluk4gwo
https://coub.com/view/5ld5j0uc5o
https://coub.com/view/cp081k64fp
https://coub.com/view/0sgmugss1z
https://coub.com/view/ynwmj064s7
https://coub.com/view/y8atenamwg
https://coub.com/view/acqfefno2e
https://coub.com/view/hmwvsetfho
https://coub.com/view/n59qhb108b
https://coub.com/view/946i56xqgw
https://coub.com/view/fu355xmxbd
https://coub.com/view/9gfbdnyv3z
https://coub.com/view/i16nn052at
https://coub.com/view/s2o2prg0rl
https://coub.com/view/f7m17v6t3x
https://coub.com/view/6bmqboq0w9
https://coub.com/view/tvj9e2712i
https://coub.com/view/b5kbn4qpgx
https://coub.com/view/hh77rcnz58
https://coub.com/view/8w0hoxvhxu
https://coub.com/view/ogtrlf718w
https://coub.com/view/dcy0w8eeq1
https://coub.com/view/foo2zaj4nz
https://coub.com/view/ffai2oxjgj
https://coub.com/view/h7llkwvo4t
https://coub.com/view/fxf6iote20
https://coub.com/view/zr4atw33g7
https://coub.com/view/w6ksjzfgri
https://coub.com/view/6wlivajplu
https://coub.com/view/m3p9mpc87g
https://coub.com/view/1svk68qjxi
https://coub.com/view/jn78pmgtsy
https://coub.com/view/ru4kxd02ca
https://coub.com/view/u2qm3zht04
https://coub.com/view/07vrswbr9o
https://coub.com/view/z53dkteu04
https://coub.com/view/r3kczagbat
https://coub.com/view/ebkii1w2uy
https://coub.com/view/gu2ovmapto
https://coub.com/view/6s1y6nkktx
https://coub.com/view/2mzsrq6bnh
https://coub.com/view/bmh3bh21dl
https://coub.com/view/fdiekfi3y1
https://coub.com/view/ex4dtaj1ri
https://coub.com/view/tsgmmorhu1
https://coub.com/view/gh01h6433n
https://coub.com/view/3zfrusqatl
https://coub.com/view/u27l9exjjr
https://coub.com/view/wx8rybzzdd
https://coub.com/view/u13mvzb6i9
https://coub.com/view/lw5mv3n3vp
https://coub.com/view/tn7jo1khbm
https://coub.com/view/hr9h8qk489
https://coub.com/view/dfx72ezl4k
https://coub.com/view/xfnivvh59q
https://coub.com/view/6dmijjf9eu
https://coub.com/view/fi22iqa3iv
https://coub.com/view/57fq1sjhpa
https://coub.com/view/9xii5apv7o
https://coub.com/view/e5fhxwb6re
https://coub.com/view/wuc96hdc6z
https://coub.com/view/bvp1embwd5
https://coub.com/view/u1lurshbkm
https://coub.com/view/nih2qy00t8
https://coub.com/view/mrx826u951
https://coub.com/view/kes50gj32a
https://coub.com/view/fcv3394eq2
https://coub.com/view/4qc0x8z64l
https://coub.com/view/n2k5itdn4w
https://coub.com/view/t988vol3yp
https://coub.com/view/synur4gqha
https://coub.com/view/bd6fqj7ej9
https://coub.com/view/crwhjs6qgk
https://coub.com/view/vde66uoo7x
https://coub.com/view/68md6egw0p
https://coub.com/view/2fgvpgk4ir
https://coub.com/view/4ygf27wtro
https://coub.com/view/0qdbv1ptnp
https://coub.com/view/b5ii094vls
https://coub.com/view/o8fq8rif3n
https://coub.com/view/3odrc01a85
https://coub.com/view/8k08cynikg

继续阅读 »

问题现象
在“我的”页面点击“跳转设置页”按钮跳转到设置页面,底部的TabBar导航栏仍然存在。

点击放大点击放大

主页面有“首页”、“我的”两个Tab页面,部分代码如下:

@Entry
@Component
struct TabsNavPage {
build() {
Tabs() {
TabContent() {
MinePage()
}
.tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '我的'))

  TabContent() {  
    Text('首页')  
  }  
  .tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '首页'))  
}  
.barPosition(BarPosition.End)  

}
}

@Component
struct MinePage {
@Provide('pathStack') pathStack: NavPathStack = new NavPathStack();

@Builder
PagesMap(name: string) {
if (name === 'Settings') {
Settings();
}
}

build() {
Navigation(this.pathStack) {
Row(){
Column() {
Button('跳转设置页')
.onClick(() => {
this.pathStack.pushPathByName('Settings', null);
})
}
}
}
.hideTitleBar(true)
.navDestination(this.PagesMap)
}
}

@Component
struct Settings {
@Consume('pathStack') pathStack: NavPathStack = new NavPathStack();

build() {
NavDestination() {
Button('返回')
.onClick(() => {
this.pathStack.pop();
});
}.title('设置')
}
}
效果预览
点击放大

背景知识
Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。
@Provide装饰器和@Consume装饰器:应用于与后代组件的双向数据同步、状态数据在多个层级之间传递的场景。
解决方案
问题现象中是用Tab组件包裹Navigation组件,跳转Navigation子组件并不会影响到外层的Tab组件。

将Navigation组件作为根容器包括Tab组件,为保证子组件都共享一个NavPathStack实例,可以使用@Provide和@Consume装饰器将导航控制器对象NavPathStack传递给Tabs内的子组件使用。

@Entry
@Component
struct TabsNavPage {
// 使用@Provide将路由栈对象传递给TabContent内的组件
@Provide('pathStack') pathStack: NavPathStack = new NavPathStack();

@Builder
PagesMap(name: string) {
if (name === 'Settings') {
Settings();
}
}

build() {
// 使用Navigation包裹Tabs,Tabs子页使用同一个路由栈对象
Navigation(this.pathStack) {
Tabs() {
TabContent() {
MinePage();
}
.tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '我的'))

    TabContent() {  
      Text('首页').fontColor('40fp');  
    }  
    .tabBar(BottomTabBarStyle.of($r('sys.media.ohos_app_icon'), '首页'))  
  }  
  .barPosition(BarPosition.End);  
}  
.hideTitleBar(true)  
.navDestination(this.PagesMap)  

}
}

@Component
struct MinePage {
// 获取Navigation的路由栈对象
@Consume('pathStack') pathStack: NavPathStack;

build() {
Column() {
Button('跳转设置页')
.onClick(() => {
this.pathStack.pushPathByName('Settings', null);
});
};
}
}

@Component
struct Settings {
@Consume('pathStack') pathStack: NavPathStack = new NavPathStack();

build() {
NavDestination() {
Button('返回')
.onClick(() => {
this.pathStack.pop();
});
}.title('设置')
}
}
https://coub.com/view/5kamzbr4mi
https://coub.com/view/9slmznc3ol
https://coub.com/view/dnhe4x7otv
https://coub.com/view/libk78392s
https://coub.com/view/2splvx7ais
https://coub.com/view/0fqk03fwlz
https://coub.com/view/u3but76ukt
https://coub.com/view/2xrg8kdx5o
https://coub.com/view/iqeb7cwj8k
https://coub.com/view/lx86s7cfpr
https://coub.com/view/qin8evf0sk
https://coub.com/view/ul1dmz1db2
https://coub.com/view/1n6f59dch3
https://coub.com/view/mz789w4pbg
https://coub.com/view/trb9jcog9p
https://coub.com/view/j3i3lac4yx
https://coub.com/view/84l11twj2s
https://coub.com/view/ut50q4erj3
https://coub.com/view/w6uuiu7ru3
https://coub.com/view/iun2hgfzqm
https://coub.com/view/hc6d3b3sts
https://coub.com/view/7l7wd758hs
https://coub.com/view/sshi8p319r
https://coub.com/view/2y21fnu5t4
https://coub.com/view/3dpvlq1hxa
https://coub.com/view/7tefrrju9a
https://coub.com/view/kr0zw5ow09
https://coub.com/view/vze4xn6lxk
https://coub.com/view/gp0hoyjbev
https://coub.com/view/8ukozyn2pf
https://coub.com/view/gne8uf8fun
https://coub.com/view/o1ljlnaqrl
https://coub.com/view/6pe00kuw3p
https://coub.com/view/3ys8ww2kf5
https://coub.com/view/ky54919n96
https://coub.com/view/ovvfpcdgiy
https://coub.com/view/h1g7qx1ibk
https://coub.com/view/4ytxeco099
https://coub.com/view/z8grd6tisg
https://coub.com/view/ihcl3n786e
https://coub.com/view/e48vma3hes
https://coub.com/view/rgk8us00m7
https://coub.com/view/mxmu9agwxl
https://coub.com/view/jjq7sf2887
https://coub.com/view/rtlotmcb2o
https://coub.com/view/2xzrkf1j13
https://coub.com/view/datluk4gwo
https://coub.com/view/5ld5j0uc5o
https://coub.com/view/cp081k64fp
https://coub.com/view/0sgmugss1z
https://coub.com/view/ynwmj064s7
https://coub.com/view/y8atenamwg
https://coub.com/view/acqfefno2e
https://coub.com/view/hmwvsetfho
https://coub.com/view/n59qhb108b
https://coub.com/view/946i56xqgw
https://coub.com/view/fu355xmxbd
https://coub.com/view/9gfbdnyv3z
https://coub.com/view/i16nn052at
https://coub.com/view/s2o2prg0rl
https://coub.com/view/f7m17v6t3x
https://coub.com/view/6bmqboq0w9
https://coub.com/view/tvj9e2712i
https://coub.com/view/b5kbn4qpgx
https://coub.com/view/hh77rcnz58
https://coub.com/view/8w0hoxvhxu
https://coub.com/view/ogtrlf718w
https://coub.com/view/dcy0w8eeq1
https://coub.com/view/foo2zaj4nz
https://coub.com/view/ffai2oxjgj
https://coub.com/view/h7llkwvo4t
https://coub.com/view/fxf6iote20
https://coub.com/view/zr4atw33g7
https://coub.com/view/w6ksjzfgri
https://coub.com/view/6wlivajplu
https://coub.com/view/m3p9mpc87g
https://coub.com/view/1svk68qjxi
https://coub.com/view/jn78pmgtsy
https://coub.com/view/ru4kxd02ca
https://coub.com/view/u2qm3zht04
https://coub.com/view/07vrswbr9o
https://coub.com/view/z53dkteu04
https://coub.com/view/r3kczagbat
https://coub.com/view/ebkii1w2uy
https://coub.com/view/gu2ovmapto
https://coub.com/view/6s1y6nkktx
https://coub.com/view/2mzsrq6bnh
https://coub.com/view/bmh3bh21dl
https://coub.com/view/fdiekfi3y1
https://coub.com/view/ex4dtaj1ri
https://coub.com/view/tsgmmorhu1
https://coub.com/view/gh01h6433n
https://coub.com/view/3zfrusqatl
https://coub.com/view/u27l9exjjr
https://coub.com/view/wx8rybzzdd
https://coub.com/view/u13mvzb6i9
https://coub.com/view/lw5mv3n3vp
https://coub.com/view/tn7jo1khbm
https://coub.com/view/hr9h8qk489
https://coub.com/view/dfx72ezl4k
https://coub.com/view/xfnivvh59q
https://coub.com/view/6dmijjf9eu
https://coub.com/view/fi22iqa3iv
https://coub.com/view/57fq1sjhpa
https://coub.com/view/9xii5apv7o
https://coub.com/view/e5fhxwb6re
https://coub.com/view/wuc96hdc6z
https://coub.com/view/bvp1embwd5
https://coub.com/view/u1lurshbkm
https://coub.com/view/nih2qy00t8
https://coub.com/view/mrx826u951
https://coub.com/view/kes50gj32a
https://coub.com/view/fcv3394eq2
https://coub.com/view/4qc0x8z64l
https://coub.com/view/n2k5itdn4w
https://coub.com/view/t988vol3yp
https://coub.com/view/synur4gqha
https://coub.com/view/bd6fqj7ej9
https://coub.com/view/crwhjs6qgk
https://coub.com/view/vde66uoo7x
https://coub.com/view/68md6egw0p
https://coub.com/view/2fgvpgk4ir
https://coub.com/view/4ygf27wtro
https://coub.com/view/0qdbv1ptnp
https://coub.com/view/b5ii094vls
https://coub.com/view/o8fq8rif3n
https://coub.com/view/3odrc01a85
https://coub.com/view/8k08cynikg

收起阅读 »

Android离线打包,plus.runtime.install导致应用闪退

logcat日志如下:

Unresolved exception class when finding catch block: net.lingala.zip4j.exception.ZipException
2026-08-28 15:40:18.591 29792-30261 AndroidRuntime com.gdxinyue.newusmp
E FATAL EXCEPTION: Thread-10
Process: com.gdxinyue.newusmp, PID: 29792
java.lang.NullPointerException: Attempt to read from null array
at io.dcloud.feature.pdr.RuntimeFeatureImpl$a.run

参考博客:https://blog.csdn.net/qq_32058147/article/details/155034674

在Android Stadio主项目的 build.gradle > dependencies中增加以下依赖:

dependencies {
implementation 'net.lingala.zip4j:zip4j:2.11.5'
}

继续阅读 »

logcat日志如下:

Unresolved exception class when finding catch block: net.lingala.zip4j.exception.ZipException
2026-08-28 15:40:18.591 29792-30261 AndroidRuntime com.gdxinyue.newusmp
E FATAL EXCEPTION: Thread-10
Process: com.gdxinyue.newusmp, PID: 29792
java.lang.NullPointerException: Attempt to read from null array
at io.dcloud.feature.pdr.RuntimeFeatureImpl$a.run

参考博客:https://blog.csdn.net/qq_32058147/article/details/155034674

在Android Stadio主项目的 build.gradle > dependencies中增加以下依赖:

dependencies {
implementation 'net.lingala.zip4j:zip4j:2.11.5'
}

收起阅读 »

uni-starter模板代码更正

创建uni-app项目时选择uni-starter模板,我发现其中pages/list/search/search.vue中的“搜索联想”部分代码<uni-list-item>的:title="item.name"可能写错了,应该改为:title="item.title",具体代码如下:
<!-- 搜索联想 -->
<view class="search-associative" v-if="associativeShow">
<uni-list>
<!-- :title="item.name"可能写错了,文章表没有name字段,associativeList只是获取_id、title字段! -->
<!-- <uni-list-item v-for="(item,index) in associativeList" :key="item._id" :ellipsis="1" :title="item.name" @click="associativeClick(item)" show-extra-icon
clickable :extra-icon="{size:18,color:iconColor,type:'search'}" >
</uni-list-item> -->

            <!-- 正确改为:title="item.title",在搜索框输入文章记录的标题子串时,会显示篇文章的标题 -->  
            <uni-list-item  v-for="(item,index) in associativeList" :key="item._id" :ellipsis="1" :title="item.title" @click="associativeClick(item)" show-extra-icon  
             clickable :extra-icon="{size:18,color:iconColor,type:'search'}" >  
            </uni-list-item>  
        </uni-list>  
    </view>  

这个搜索联想的功能应该是在搜索框输入文章记录标题的子串时,提示有没有这篇文章,若存在,则显示所有标题带有此子串的文章标题列表,这样就可以直接点击找到此文章,因为模板的代码写错了"item.name",导致完全没有提示,希望可以改正过来。

继续阅读 »

创建uni-app项目时选择uni-starter模板,我发现其中pages/list/search/search.vue中的“搜索联想”部分代码<uni-list-item>的:title="item.name"可能写错了,应该改为:title="item.title",具体代码如下:
<!-- 搜索联想 -->
<view class="search-associative" v-if="associativeShow">
<uni-list>
<!-- :title="item.name"可能写错了,文章表没有name字段,associativeList只是获取_id、title字段! -->
<!-- <uni-list-item v-for="(item,index) in associativeList" :key="item._id" :ellipsis="1" :title="item.name" @click="associativeClick(item)" show-extra-icon
clickable :extra-icon="{size:18,color:iconColor,type:'search'}" >
</uni-list-item> -->

            <!-- 正确改为:title="item.title",在搜索框输入文章记录的标题子串时,会显示篇文章的标题 -->  
            <uni-list-item  v-for="(item,index) in associativeList" :key="item._id" :ellipsis="1" :title="item.title" @click="associativeClick(item)" show-extra-icon  
             clickable :extra-icon="{size:18,color:iconColor,type:'search'}" >  
            </uni-list-item>  
        </uni-list>  
    </view>  

这个搜索联想的功能应该是在搜索框输入文章记录标题的子串时,提示有没有这篇文章,若存在,则显示所有标题带有此子串的文章标题列表,这样就可以直接点击找到此文章,因为模板的代码写错了"item.name",导致完全没有提示,希望可以改正过来。

收起阅读 »

无Mac获取P12证书、描述文件、上传IPA

Appstore上传 ipa


1、首先进入我开发的网站:登录 - iOS 开发者工具,http://jqzm.w1.luyouxia.net/iOSTools,该工具集成了Bundle Id、证书、描述文件、添加设备、上传IPA
​​​​
2、然后使用邮箱注册并登陆

3、然后进入账号设置,将参数填写上并保存配置,保存后点一下同步数据

4、进入上传IPA功能,选择IPA文件上传即可

继续阅读 »


1、首先进入我开发的网站:登录 - iOS 开发者工具,http://jqzm.w1.luyouxia.net/iOSTools,该工具集成了Bundle Id、证书、描述文件、添加设备、上传IPA
​​​​
2、然后使用邮箱注册并登陆

3、然后进入账号设置,将参数填写上并保存配置,保存后点一下同步数据

4、进入上传IPA功能,选择IPA文件上传即可

收起阅读 »

等保测评wgt打包有高危漏洞!

应用打wgt升级包,使用压缩工具打开wgt文件后,在app-service.js中可以看到云服务空间的accessKey和secretKey等信息,被检测为高危漏洞

应用打wgt升级包,使用压缩工具打开wgt文件后,在app-service.js中可以看到云服务空间的accessKey和secretKey等信息,被检测为高危漏洞

uniapp 实现 的小红书 1v1 还原

小红书小程序

演示地址

  • 笔记创建 / 编辑 / 发布、点赞评论回复、付费笔记
    私域直播(视频 / 语音、货架带货、公屏、体验倒计时、结束复盘)
    音视频聊天室(麦位、心跳、体验时长)
    IM:私信 / 群聊、直播与聊天室 邀请卡片
    音视频通话(TRTC)
    地图选点(笔记标记地点 / 腾讯地图)
    市集电商(商品 / 订单 / 优惠券 / 秒杀拼团等)
    后台:笔记 / 频道 / 话题、会员、商城、站点品牌、系统消息
    系统消息、点点助手
继续阅读 »

演示地址

  • 笔记创建 / 编辑 / 发布、点赞评论回复、付费笔记
    私域直播(视频 / 语音、货架带货、公屏、体验倒计时、结束复盘)
    音视频聊天室(麦位、心跳、体验时长)
    IM:私信 / 群聊、直播与聊天室 邀请卡片
    音视频通话(TRTC)
    地图选点(笔记标记地点 / 腾讯地图)
    市集电商(商品 / 订单 / 优惠券 / 秒杀拼团等)
    后台:笔记 / 频道 / 话题、会员、商城、站点品牌、系统消息
    系统消息、点点助手
收起阅读 »

stripe 支付不支持 ACH银行卡支付

Stripe

uniapp 提供的stripe 支付无法实现,ACH 美国银行支付 , https://uniapp.dcloud.net.cn/tutorial/app-payment-stripe.html#%E5%BC%80%E9%80%9A

uniapp 提供的stripe 支付无法实现,ACH 美国银行支付 , https://uniapp.dcloud.net.cn/tutorial/app-payment-stripe.html#%E5%BC%80%E9%80%9A

知识付费直播系统-Uniapp源码

直播 付费

仓库地址 https://gitee.com/tuzhi-open/tuzhi-mobile-open

凸知(Tuzhi) 是一套完整的知识付费解决方案,支持私有化部署,覆盖课程售卖、直播授课、圈子社区、考试测评、分销营销、实物商品等完整业务场景,提供管理后台、移动端(H5 / 微信小程序)、PC 学员端等多端入口,帮助个人 IP、教培机构与品牌商家搭建自有卖课平台。

凸知移动端 是一款基于 uni-app(Vue 2)+ TDesign 开发的知识付费移动端前端,支持 H5 / 微信小程序 多端编译(不支持 App 打包)。覆盖课程点播、直播、专栏、圈子社区、订单支付(前端交互)、优惠券、余额红包、考试答题等完整学习场景。

系统演示

演示地址 账号 密码
后台 https://tuzhi.mutouweb.com/admin.php admin 123456
移动端(用户) https://tuzhi.mutouweb.com 13222222222 123456
PC 端(用户) https://tuzhi.mutouweb.com/pc/#/ 13222222222 123456

一、功能特性

  • 终端覆盖:电脑端 / 微信公众号(H5)/ 微信小程序多端学习
  • 课程内容:图文 / 视频 / 音频 / 专栏售卖,支持试看试听、课件资料与内容保护
  • 互动教学:练习 / 考试测评 / 题库 / 试卷库 / 证书 / 表单 / 圈子社区
  • 直播能力:直播授课 / 伪直播 / 回放 / 直播带货 / 送礼物 / 发红包
  • 营销增长:分销推广 / 优惠券 / 每日签到 / 积分商城 / 付费会员卡 / 组合商品 / 卡密兑换
  • 实物商品:商品管理 / 多规格 SKU / 限购设置 / 售后退换
  • 交易支付:购物车 / 订单管理 / 余额支付 / 微信支付 / 支付宝支付
  • 用户数据:用户管理 / 订阅记录 / 学习分析 / 交易分析 / 订单管理
  • 系统安全:页面 DIY 装修 / 云存储 / 短信与消息推送 / 管理员权限 / 版权保护(跑马灯 / 防录屏)

界面预览

二、系统架构

凸知是一套完整的知识付费系统,由四个部分组成:

部分 技术栈 说明 源码开放
后端服务 ThinkPHP 5.0 + FastAdmin + MySQL 接口服务,承载支付、直播、分销等全部业务逻辑 购买授权
移动端(本仓库) uni-app(Vue 2)+ TDesign H5 / 微信小程序学员端(不支持 App 打包) 开源
管理后台 Vue 3 + Arco Design 管理员 / 讲师运营后台 购买授权
PC 学员端 Vue 3 + Arco Design 电脑端学员学习页面 购买授权

凸知终端技术结构:

整体调用链路:移动端 / PC 学员端 / 管理后台 → 后端接口服务({code, msg, data} 协议)→ MySQL 数据库。

本仓库仅开源移动端前端源码;如需后端服务或管理后台等其余端的源码,需购买商业授权获取,详见「十一、使用许可」与授权价格

三、技术栈

分类 技术 说明
跨端框架 uni-app(Vue 2.x) vue-cli 工程,一套代码编译 H5 / 微信小程序等多端(不支持 App 打包)
开发语言 JavaScript(Vue 2 语法)+ Sass 页面按 xxx.vue + js.vue + css.css 三文件拆分,样式用 CSS 规则
UI 组件库 TDesign(@tdesign/uniapp 全局主题样式,小程序端内置构建适配补丁(scripts/
uView(本地 components/uview-ui 列表 / 弹窗 / 表单等通用组件
自研 components/tz/ 音频 / 视频 / 媒体编辑 / 上传 / 文件预览等 45+ 业务组件
qiun-data-charts 图表可视化
状态管理 Vuex 3 全局登录态 / 用户信息等
国际化 vue-i18n 8 内置 zh-CN / US 多语言
网络请求 flyio + 自封装 $api $api('module.action') 点分路由,统一鉴权 / 错误处理 / 401 跳转
音视频播放 阿里云播放器 Aliplayer(H5,本地化资源)、hls.js / flv.js 直播与点播,支持倍速 / 弹幕 / 水印等组件
微信能力 jweixin-module 微信登录 / 分享 JS-SDK 封装
构建工具 @vue/cli 5 + webpack @dcloudio/vue-cli-plugin-uni 驱动多端编译
测试 Jest 多端单元测试(npm run test:*

四、快速开始

环境要求:Node.js >= 14(建议 16/18)、npm

# ① 安装依赖  
npm install  

# ② H5 开发(默认不启用 Mock,对接真实后端;如需 Mock 见「Mock 数据」)  
npm run dev:h5

浏览器访问 http://localhost:8080 即可看到完整页面效果。

微信小程序编译

# ③ 小程序开发模式(监听编译,产物在 dist/dev/mp-weixin)  
npm run dev:mp-weixin  

# ④ 小程序生产构建(内置 TDesign 适配补丁,产物在 dist/build/mp-weixin)  
npm run build:mp-weixin

用微信开发者工具「导入项目」选择对应产物目录(开发选 dist/dev/mp-weixin,生产选 dist/build/mp-weixin),并在 src/manifest.json 中替换为自己的 appid。

对接真实后端

  1. 修改 src/siteinfo.js 中的 siteroot 为你的后端地址;
  2. src/common/request/api_list.js 中核对接口地址与 {code, msg, data} 协议;
  3. 微信小程序构建需在 src/manifest.json 中替换为自己的 appid。

五、构建

目标 命令
H5 npm run build:h5
微信小程序 npm run build:mp-weixin

小程序构建内置 TDesign 适配补丁(scripts/),构建成功后产物在 dist/build/ 下。

⚠️ 注意:当前版本不支持 App 打包,仅支持 H5 与微信小程序两个平台。

六、Mock 数据

  • H5 开发模式(NODE_ENV=development默认关闭,全部走真实后端接口;
  • 开启方式:将 src/static/config.jsenableMock 改为 true(显式设置优先级最高),或通过 uni.setStorageSync('enableMock', true) / 环境变量 MOCK_ENABLE 切换;
  • 覆盖 200+ 接口,fixture 位于 src/mock/data/,按 module/action 路由镜像;
  • 未覆盖的接口自动透传真实网络并输出提示;
  • Mock 数据由仓库内 mock-crawler 工具采集真实后端响应生成,发布前已做敏感字段脱敏(token/openid/手机号等)。

七、目录结构

src/  
├── pages/        页面(index 主包 + public/app/user/order/course 五个分包,约 100+ 页面)  
│   ├── index/        首页(主包唯一页面,tabBar 入口)  
│   ├── launch/       启动页(加载与参数透传跳转,未在 pages.json 注册)  
│   ├── public/       公共分包:登录 / 注册 / 找回密码 / 协议 / 搜索 / 消息 / 结果页等  
│   ├── app/          业务功能分包:活动 / 圈子 / 考试 / 优惠券 / 积分 / 签到 / 证书 / 分销 / 直播带货等  
│   ├── user/         用户分包:个人中心 / 资产 / 余额 / 地址 / 收藏 / 学习记录 / 订阅 / 红包等  
│   ├── order/        订单分包:订单列表 / 详情 / 提交 / 评价 / 售后 / 物流等  
│   ├── course/       课程分包:课程详情 / 分类 / 专栏 / 小组 / 直播等  
│   └── template/     页面模板(新建页面的三文件拆分参考,未在 pages.json 注册)  
├── components/   组件(tz/ 自研组件库、uview-ui、qiun-data-charts、视频播放器等)  
├── common/       公共层  
│   ├── request/  接口封装($api 点分路由、统一鉴权/错误处理)  
│   ├── utils/    工具(路由映射、支付、直播、OSS 签名等)  
│   ├── order/    订单状态处理  
│   └── wechat/   微信登录/分享 SDK 封装  
├── mock/         Mock 数据(H5 开发模式默认关闭,开启方式见「六、Mock 数据」)  
├── static/       静态资源  
├── pages.json    页面路由与分包配置  
└── manifest.json 应用配置(appid 等)

八、开发约定

  • 页面采用 xxx.vue + js.vue + css.css 三文件拆分(<script src="./js.vue"> + @import "./css.css"),逻辑与样式分离;
  • 接口调用统一走 this.$api('module.action', data),登录态、401 跳转、错误提示由拦截器统一处理;
  • 业务组件优先复用 components/tz/ 自研组件库;
  • 提交信息遵循 Conventional Commits(feat: / fix: / chore:)。

九、相关链接

名称 链接
使用文档 https://wood-soft.feishu.cn/wiki/KKLkwOPBHiButJkTluTcoXKenjh
功能列表 https://wood-soft.feishu.cn/wiki/YGFYw0k8PiJDWxketgHcBNKNnxe
授权价格 https://www.tuzhi.ltd/index/pricing/version.html
功能演示 https://www.tuzhi.ltd/index/demo/index.html

十、软件安全

安全问题请通过 Issue(需注明"安全")或邮件私下报告给项目维护团队,请勿在公开渠道描述可利用的漏洞细节。我们将在确认后尽快修复并同步发布。

十一、使用许可

  • 本软件遵循 凸知开源协议 V1.0(非商业用途免费,商业用途需购买商业授权),详见 LICENSE
  • 第三方组件许可声明见 THIRD-PARTY-NOTICES.md(发布前请核对);
继续阅读 »

仓库地址 https://gitee.com/tuzhi-open/tuzhi-mobile-open

凸知(Tuzhi) 是一套完整的知识付费解决方案,支持私有化部署,覆盖课程售卖、直播授课、圈子社区、考试测评、分销营销、实物商品等完整业务场景,提供管理后台、移动端(H5 / 微信小程序)、PC 学员端等多端入口,帮助个人 IP、教培机构与品牌商家搭建自有卖课平台。

凸知移动端 是一款基于 uni-app(Vue 2)+ TDesign 开发的知识付费移动端前端,支持 H5 / 微信小程序 多端编译(不支持 App 打包)。覆盖课程点播、直播、专栏、圈子社区、订单支付(前端交互)、优惠券、余额红包、考试答题等完整学习场景。

系统演示

演示地址 账号 密码
后台 https://tuzhi.mutouweb.com/admin.php admin 123456
移动端(用户) https://tuzhi.mutouweb.com 13222222222 123456
PC 端(用户) https://tuzhi.mutouweb.com/pc/#/ 13222222222 123456

一、功能特性

  • 终端覆盖:电脑端 / 微信公众号(H5)/ 微信小程序多端学习
  • 课程内容:图文 / 视频 / 音频 / 专栏售卖,支持试看试听、课件资料与内容保护
  • 互动教学:练习 / 考试测评 / 题库 / 试卷库 / 证书 / 表单 / 圈子社区
  • 直播能力:直播授课 / 伪直播 / 回放 / 直播带货 / 送礼物 / 发红包
  • 营销增长:分销推广 / 优惠券 / 每日签到 / 积分商城 / 付费会员卡 / 组合商品 / 卡密兑换
  • 实物商品:商品管理 / 多规格 SKU / 限购设置 / 售后退换
  • 交易支付:购物车 / 订单管理 / 余额支付 / 微信支付 / 支付宝支付
  • 用户数据:用户管理 / 订阅记录 / 学习分析 / 交易分析 / 订单管理
  • 系统安全:页面 DIY 装修 / 云存储 / 短信与消息推送 / 管理员权限 / 版权保护(跑马灯 / 防录屏)

界面预览

二、系统架构

凸知是一套完整的知识付费系统,由四个部分组成:

部分 技术栈 说明 源码开放
后端服务 ThinkPHP 5.0 + FastAdmin + MySQL 接口服务,承载支付、直播、分销等全部业务逻辑 购买授权
移动端(本仓库) uni-app(Vue 2)+ TDesign H5 / 微信小程序学员端(不支持 App 打包) 开源
管理后台 Vue 3 + Arco Design 管理员 / 讲师运营后台 购买授权
PC 学员端 Vue 3 + Arco Design 电脑端学员学习页面 购买授权

凸知终端技术结构:

整体调用链路:移动端 / PC 学员端 / 管理后台 → 后端接口服务({code, msg, data} 协议)→ MySQL 数据库。

本仓库仅开源移动端前端源码;如需后端服务或管理后台等其余端的源码,需购买商业授权获取,详见「十一、使用许可」与授权价格

三、技术栈

分类 技术 说明
跨端框架 uni-app(Vue 2.x) vue-cli 工程,一套代码编译 H5 / 微信小程序等多端(不支持 App 打包)
开发语言 JavaScript(Vue 2 语法)+ Sass 页面按 xxx.vue + js.vue + css.css 三文件拆分,样式用 CSS 规则
UI 组件库 TDesign(@tdesign/uniapp 全局主题样式,小程序端内置构建适配补丁(scripts/
uView(本地 components/uview-ui 列表 / 弹窗 / 表单等通用组件
自研 components/tz/ 音频 / 视频 / 媒体编辑 / 上传 / 文件预览等 45+ 业务组件
qiun-data-charts 图表可视化
状态管理 Vuex 3 全局登录态 / 用户信息等
国际化 vue-i18n 8 内置 zh-CN / US 多语言
网络请求 flyio + 自封装 $api $api('module.action') 点分路由,统一鉴权 / 错误处理 / 401 跳转
音视频播放 阿里云播放器 Aliplayer(H5,本地化资源)、hls.js / flv.js 直播与点播,支持倍速 / 弹幕 / 水印等组件
微信能力 jweixin-module 微信登录 / 分享 JS-SDK 封装
构建工具 @vue/cli 5 + webpack @dcloudio/vue-cli-plugin-uni 驱动多端编译
测试 Jest 多端单元测试(npm run test:*

四、快速开始

环境要求:Node.js >= 14(建议 16/18)、npm

# ① 安装依赖  
npm install  

# ② H5 开发(默认不启用 Mock,对接真实后端;如需 Mock 见「Mock 数据」)  
npm run dev:h5

浏览器访问 http://localhost:8080 即可看到完整页面效果。

微信小程序编译

# ③ 小程序开发模式(监听编译,产物在 dist/dev/mp-weixin)  
npm run dev:mp-weixin  

# ④ 小程序生产构建(内置 TDesign 适配补丁,产物在 dist/build/mp-weixin)  
npm run build:mp-weixin

用微信开发者工具「导入项目」选择对应产物目录(开发选 dist/dev/mp-weixin,生产选 dist/build/mp-weixin),并在 src/manifest.json 中替换为自己的 appid。

对接真实后端

  1. 修改 src/siteinfo.js 中的 siteroot 为你的后端地址;
  2. src/common/request/api_list.js 中核对接口地址与 {code, msg, data} 协议;
  3. 微信小程序构建需在 src/manifest.json 中替换为自己的 appid。

五、构建

目标 命令
H5 npm run build:h5
微信小程序 npm run build:mp-weixin

小程序构建内置 TDesign 适配补丁(scripts/),构建成功后产物在 dist/build/ 下。

⚠️ 注意:当前版本不支持 App 打包,仅支持 H5 与微信小程序两个平台。

六、Mock 数据

  • H5 开发模式(NODE_ENV=development默认关闭,全部走真实后端接口;
  • 开启方式:将 src/static/config.jsenableMock 改为 true(显式设置优先级最高),或通过 uni.setStorageSync('enableMock', true) / 环境变量 MOCK_ENABLE 切换;
  • 覆盖 200+ 接口,fixture 位于 src/mock/data/,按 module/action 路由镜像;
  • 未覆盖的接口自动透传真实网络并输出提示;
  • Mock 数据由仓库内 mock-crawler 工具采集真实后端响应生成,发布前已做敏感字段脱敏(token/openid/手机号等)。

七、目录结构

src/  
├── pages/        页面(index 主包 + public/app/user/order/course 五个分包,约 100+ 页面)  
│   ├── index/        首页(主包唯一页面,tabBar 入口)  
│   ├── launch/       启动页(加载与参数透传跳转,未在 pages.json 注册)  
│   ├── public/       公共分包:登录 / 注册 / 找回密码 / 协议 / 搜索 / 消息 / 结果页等  
│   ├── app/          业务功能分包:活动 / 圈子 / 考试 / 优惠券 / 积分 / 签到 / 证书 / 分销 / 直播带货等  
│   ├── user/         用户分包:个人中心 / 资产 / 余额 / 地址 / 收藏 / 学习记录 / 订阅 / 红包等  
│   ├── order/        订单分包:订单列表 / 详情 / 提交 / 评价 / 售后 / 物流等  
│   ├── course/       课程分包:课程详情 / 分类 / 专栏 / 小组 / 直播等  
│   └── template/     页面模板(新建页面的三文件拆分参考,未在 pages.json 注册)  
├── components/   组件(tz/ 自研组件库、uview-ui、qiun-data-charts、视频播放器等)  
├── common/       公共层  
│   ├── request/  接口封装($api 点分路由、统一鉴权/错误处理)  
│   ├── utils/    工具(路由映射、支付、直播、OSS 签名等)  
│   ├── order/    订单状态处理  
│   └── wechat/   微信登录/分享 SDK 封装  
├── mock/         Mock 数据(H5 开发模式默认关闭,开启方式见「六、Mock 数据」)  
├── static/       静态资源  
├── pages.json    页面路由与分包配置  
└── manifest.json 应用配置(appid 等)

八、开发约定

  • 页面采用 xxx.vue + js.vue + css.css 三文件拆分(<script src="./js.vue"> + @import "./css.css"),逻辑与样式分离;
  • 接口调用统一走 this.$api('module.action', data),登录态、401 跳转、错误提示由拦截器统一处理;
  • 业务组件优先复用 components/tz/ 自研组件库;
  • 提交信息遵循 Conventional Commits(feat: / fix: / chore:)。

九、相关链接

名称 链接
使用文档 https://wood-soft.feishu.cn/wiki/KKLkwOPBHiButJkTluTcoXKenjh
功能列表 https://wood-soft.feishu.cn/wiki/YGFYw0k8PiJDWxketgHcBNKNnxe
授权价格 https://www.tuzhi.ltd/index/pricing/version.html
功能演示 https://www.tuzhi.ltd/index/demo/index.html

十、软件安全

安全问题请通过 Issue(需注明"安全")或邮件私下报告给项目维护团队,请勿在公开渠道描述可利用的漏洞细节。我们将在确认后尽快修复并同步发布。

十一、使用许可

  • 本软件遵循 凸知开源协议 V1.0(非商业用途免费,商业用途需购买商业授权),详见 LICENSE
  • 第三方组件许可声明见 THIRD-PARTY-NOTICES.md(发布前请核对);
收起阅读 »

#需求# uniapp亟待优化

新需求
  • 2020年chromium 83之后不再兼容4.4,app端js engine一直停在基于83的版本。uniapp应该提供“现代”的js引擎,让开发者能按需选择

  • 更灵活的针对vue3 patch的方式,让开发者能按需使用,或者定期跟进vue 3 大版本

  • vite vue3分包下打包到app,依然还是将js合到一个大的app-service.js中,分包的css也不支持手动配置优化。应该能按照vite的打包配置,拆分(js/css)到各个chunk,应用启动时只加载首页资源,同时可以利用类似link prefetch/module preload的特性,让开发者能按需预载其它页面需要的(静态)资源。以达到最高的加载效率

  • uniapp目前还在用着老旧的vite/sass版本,但在cli项目中手动更新至vite 7/sass 1.100 其实是能正常运行的,只是组件库基本都因为过时方式导致过多sass警告信息

。。。

继续阅读 »
  • 2020年chromium 83之后不再兼容4.4,app端js engine一直停在基于83的版本。uniapp应该提供“现代”的js引擎,让开发者能按需选择

  • 更灵活的针对vue3 patch的方式,让开发者能按需使用,或者定期跟进vue 3 大版本

  • vite vue3分包下打包到app,依然还是将js合到一个大的app-service.js中,分包的css也不支持手动配置优化。应该能按照vite的打包配置,拆分(js/css)到各个chunk,应用启动时只加载首页资源,同时可以利用类似link prefetch/module preload的特性,让开发者能按需预载其它页面需要的(静态)资源。以达到最高的加载效率

  • uniapp目前还在用着老旧的vite/sass版本,但在cli项目中手动更新至vite 7/sass 1.100 其实是能正常运行的,只是组件库基本都因为过时方式导致过多sass警告信息

。。。

收起阅读 »

如何实现上下切换的页面间跳转动画

使用pageTransition函数实现页面转场效果。通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果。将slide属性设置为SlideEffect.Bottom,页面入场时从下方滑入,出场时滑出到下方,从而实现上下切换效果。参考代码如下:

// Index.ets
@Entry
@Component
struct PageTransition1 {
pageInfos: NavPathStack = new NavPathStack();

build() {
Stack({ alignContent: Alignment.Bottom }) {
Navigation(this.pageInfos) {
Image($r('app.media.ic_banner01')).width('100%').height(200) // The image is stored in the media folder
}
}.height('100%').width('100%')
}

pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
// Page1.ets
@Entry
@Component
struct PageTransition2 {
pageInfos: NavPathStack = new NavPathStack();

build() {
Stack({ alignContent: Alignment.Bottom }) {
Navigation(this.pageInfos) {
Image($r('app.media.ic_banner02')).width('100%').height(200) // The image is stored in the media folder
}
}.height('100%').width('100%')
}

pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
https://coub.com/stories/5089937-coventry
https://coub.com/stories/5089936-city
https://coub.com/stories/5089935-derby
https://coub.com/stories/5089934-chester
https://coub.com/stories/5089932-uclan
https://coub.com/stories/5089930-cardiff
https://coub.com/stories/5089928-uwic
https://coub.com/stories/5089925-certificate-uc
https://coub.com/stories/5089923-degree-cantab
https://coub.com/stories/5089921-graduation-ucb
https://coub.com/stories/5089918-brunel
https://coub.com/stories/5089916-bristol
https://coub.com/stories/5089914-brighton
https://coub.com/stories/5089911-bradford
https://coub.com/stories/5089909-bpp
https://coub.com/stories/5089906-bu
https://coub.com/stories/5089904-bolton
https://coub.com/stories/5089903-ucb
https://coub.com/stories/5089902-bcu
https://coub.com/stories/5089901-uob
https://coub.com/stories/5089900-bbk
https://coub.com/stories/5089899-bedfordhire
https://coub.com/stories/5089898-1-1bath
https://coub.com/stories/5089897-bangor
https://coub.com/stories/5089896-aston
https://coub.com/stories/5089895-copyual
https://coub.com/stories/5089894-aub
https://coub.com/stories/5089893-aber
https://coub.com/stories/5089892-abertay
https://coub.com/stories/5089890-au
https://coub.com/stories/5089888-langara
https://coub.com/stories/5089885-uofs
https://coub.com/stories/5089883-uofr
https://coub.com/stories/5089881-mcgill
https://coub.com/stories/5089878-concordia
https://coub.com/stories/5089876-mcmaste
https://coub.com/stories/5089874-yu
https://coub.com/stories/5089871-wlu
https://coub.com/stories/5089868-windsor
https://coub.com/stories/5089866-certificate-uwo
https://coub.com/stories/5089864-degree-waterloo
https://coub.com/stories/5089861-graduation-uoft
https://coub.com/stories/5089859-cbu
https://coub.com/stories/5089857-uoit
https://coub.com/stories/5089855-uottawa
https://coub.com/stories/5089852-uofg
https://coub.com/stories/5089850-carleton
https://coub.com/stories/5089847-brock
https://coub.com/stories/5089846-msvu
https://coub.com/stories/5089845-dalhousie
https://coub.com/stories/5089835
https://coub.com/stories/5089838-degree-mun
https://coub.com/stories/5089837-graduation-tru
https://coub.com/stories/5089836-ubc
https://coub.com/stories/5089835
https://coub.com/stories/5089834-bu
https://coub.com/stories/5089833-vancouver
https://coub.com/stories/5089832-ufv
https://coub.com/stories/5089831-unbc
https://coub.com/stories/5089829-ubc
https://coub.com/stories/5089828-sfu
https://coub.com/stories/5089827-kpu
https://coub.com/stories/5089826-macewan
https://coub.com/stories/5089825-uofl
https://coub.com/stories/5089824-certificate-uc
https://coub.com/stories/5089823-degree-ua
https://coub.com/stories/5089822-graduation-ua
https://coub.com/stories/5089821-asu
https://coub.com/stories/5089820-uh
https://coub.com/stories/5089819-ucsd
https://coub.com/stories/5089818-stanford
https://coub.com/stories/5089817-fsu
https://coub.com/stories/5089816-ohio
https://coub.com/stories/5089815-ku
https://coub.com/stories/5089814-missouri
https://coub.com/stories/5089813-iowa
https://coub.com/stories/5089812-twincities
https://coub.com/stories/5089811-mississippi
https://coub.com/stories/5089810-um
https://coub.com/stories/5089808-temple
https://coub.com/stories/5089809-gwu
https://coub.com/stories/5089807-ucsb
https://coub.com/stories/5089806-uci
https://coub.com/stories/5089805-brandeis
https://coub.com/stories/5089804-wfu
https://coub.com/stories/5089803-tufts
https://coub.com/stories/5089802-uva
https://coub.com/stories/5089801-ucb
https://coub.com/stories/5089800-vandy
https://coub.com/stories/5089799-emory
https://coub.com/stories/5089798-rice
https://coub.com/stories/5089797-duke
https://coub.com/stories/5089796-princeton
https://coub.com/stories/5089795-pace
https://coub.com/stories/5089794-utk
https://coub.com/stories/5089793-mit
https://coub.com/stories/5089792-msu
https://coub.com/stories/5089791-psu
https://coub.com/stories/5089790-usc
https://coub.com/stories/5089789-seattle
https://coub.com/stories/5089788-nyu
https://coub.com/stories/5089787-wsu
https://coub.com/stories/5089786-ucla
https://coub.com/stories/5089785-osu
https://coub.com/stories/5089784-uts
https://coub.com/stories/5089783-unsw
https://coub.com/stories/5089782-uow
https://coub.com/stories/5089781-usyd
https://coub.com/stories/5089780-uon
https://coub.com/stories/5089779-une
https://coub.com/stories/5089778-uws
https://coub.com/stories/5089777-scu
https://coub.com/stories/5089776-monash
https://coub.com/stories/5089775-sut
https://coub.com/stories/5089774-latrobe
https://coub.com/stories/5089773-unimelb
https://coub.com/stories/5089772-rmit
https://coub.com/stories/5089771-deakin
https://coub.com/stories/5089770-swinburne
https://coub.com/stories/5089769-utas
https://coub.com/stories/5089768-victoria
https://coub.com/stories/5089767-adelaide
https://coub.com/stories/5089766-unisa
https://coub.com/stories/5089765-uc
https://coub.com/stories/5089764-acu
https://coub.com/stories/5089763-anu
https://coub.com/stories/5089762-uc
https://coub.com/stories/5089761-cdu
https://coub.com/stories/5089760-ecu
https://coub.com/stories/5089759-murdoch
https://coub.com/stories/5089758-uwa
https://coub.com/stories/5089757-curtin
https://coub.com/stories/5089756-utas
https://coub.com/stories/5089755-usq
https://coub.com/stories/5089754-bond
https://coub.com/stories/5089753-jcu
https://coub.com/stories/5089752-qut
https://coub.com/stories/5089751-cqu
https://coub.com/stories/5089750-jcu
https://coub.com/stories/5089749-griffith
https://coub.com/stories/5089748-uq

继续阅读 »

使用pageTransition函数实现页面转场效果。通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果。将slide属性设置为SlideEffect.Bottom,页面入场时从下方滑入,出场时滑出到下方,从而实现上下切换效果。参考代码如下:

// Index.ets
@Entry
@Component
struct PageTransition1 {
pageInfos: NavPathStack = new NavPathStack();

build() {
Stack({ alignContent: Alignment.Bottom }) {
Navigation(this.pageInfos) {
Image($r('app.media.ic_banner01')).width('100%').height(200) // The image is stored in the media folder
}
}.height('100%').width('100%')
}

pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
// Page1.ets
@Entry
@Component
struct PageTransition2 {
pageInfos: NavPathStack = new NavPathStack();

build() {
Stack({ alignContent: Alignment.Bottom }) {
Navigation(this.pageInfos) {
Image($r('app.media.ic_banner02')).width('100%').height(200) // The image is stored in the media folder
}
}.height('100%').width('100%')
}

pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
https://coub.com/stories/5089937-coventry
https://coub.com/stories/5089936-city
https://coub.com/stories/5089935-derby
https://coub.com/stories/5089934-chester
https://coub.com/stories/5089932-uclan
https://coub.com/stories/5089930-cardiff
https://coub.com/stories/5089928-uwic
https://coub.com/stories/5089925-certificate-uc
https://coub.com/stories/5089923-degree-cantab
https://coub.com/stories/5089921-graduation-ucb
https://coub.com/stories/5089918-brunel
https://coub.com/stories/5089916-bristol
https://coub.com/stories/5089914-brighton
https://coub.com/stories/5089911-bradford
https://coub.com/stories/5089909-bpp
https://coub.com/stories/5089906-bu
https://coub.com/stories/5089904-bolton
https://coub.com/stories/5089903-ucb
https://coub.com/stories/5089902-bcu
https://coub.com/stories/5089901-uob
https://coub.com/stories/5089900-bbk
https://coub.com/stories/5089899-bedfordhire
https://coub.com/stories/5089898-1-1bath
https://coub.com/stories/5089897-bangor
https://coub.com/stories/5089896-aston
https://coub.com/stories/5089895-copyual
https://coub.com/stories/5089894-aub
https://coub.com/stories/5089893-aber
https://coub.com/stories/5089892-abertay
https://coub.com/stories/5089890-au
https://coub.com/stories/5089888-langara
https://coub.com/stories/5089885-uofs
https://coub.com/stories/5089883-uofr
https://coub.com/stories/5089881-mcgill
https://coub.com/stories/5089878-concordia
https://coub.com/stories/5089876-mcmaste
https://coub.com/stories/5089874-yu
https://coub.com/stories/5089871-wlu
https://coub.com/stories/5089868-windsor
https://coub.com/stories/5089866-certificate-uwo
https://coub.com/stories/5089864-degree-waterloo
https://coub.com/stories/5089861-graduation-uoft
https://coub.com/stories/5089859-cbu
https://coub.com/stories/5089857-uoit
https://coub.com/stories/5089855-uottawa
https://coub.com/stories/5089852-uofg
https://coub.com/stories/5089850-carleton
https://coub.com/stories/5089847-brock
https://coub.com/stories/5089846-msvu
https://coub.com/stories/5089845-dalhousie
https://coub.com/stories/5089835
https://coub.com/stories/5089838-degree-mun
https://coub.com/stories/5089837-graduation-tru
https://coub.com/stories/5089836-ubc
https://coub.com/stories/5089835
https://coub.com/stories/5089834-bu
https://coub.com/stories/5089833-vancouver
https://coub.com/stories/5089832-ufv
https://coub.com/stories/5089831-unbc
https://coub.com/stories/5089829-ubc
https://coub.com/stories/5089828-sfu
https://coub.com/stories/5089827-kpu
https://coub.com/stories/5089826-macewan
https://coub.com/stories/5089825-uofl
https://coub.com/stories/5089824-certificate-uc
https://coub.com/stories/5089823-degree-ua
https://coub.com/stories/5089822-graduation-ua
https://coub.com/stories/5089821-asu
https://coub.com/stories/5089820-uh
https://coub.com/stories/5089819-ucsd
https://coub.com/stories/5089818-stanford
https://coub.com/stories/5089817-fsu
https://coub.com/stories/5089816-ohio
https://coub.com/stories/5089815-ku
https://coub.com/stories/5089814-missouri
https://coub.com/stories/5089813-iowa
https://coub.com/stories/5089812-twincities
https://coub.com/stories/5089811-mississippi
https://coub.com/stories/5089810-um
https://coub.com/stories/5089808-temple
https://coub.com/stories/5089809-gwu
https://coub.com/stories/5089807-ucsb
https://coub.com/stories/5089806-uci
https://coub.com/stories/5089805-brandeis
https://coub.com/stories/5089804-wfu
https://coub.com/stories/5089803-tufts
https://coub.com/stories/5089802-uva
https://coub.com/stories/5089801-ucb
https://coub.com/stories/5089800-vandy
https://coub.com/stories/5089799-emory
https://coub.com/stories/5089798-rice
https://coub.com/stories/5089797-duke
https://coub.com/stories/5089796-princeton
https://coub.com/stories/5089795-pace
https://coub.com/stories/5089794-utk
https://coub.com/stories/5089793-mit
https://coub.com/stories/5089792-msu
https://coub.com/stories/5089791-psu
https://coub.com/stories/5089790-usc
https://coub.com/stories/5089789-seattle
https://coub.com/stories/5089788-nyu
https://coub.com/stories/5089787-wsu
https://coub.com/stories/5089786-ucla
https://coub.com/stories/5089785-osu
https://coub.com/stories/5089784-uts
https://coub.com/stories/5089783-unsw
https://coub.com/stories/5089782-uow
https://coub.com/stories/5089781-usyd
https://coub.com/stories/5089780-uon
https://coub.com/stories/5089779-une
https://coub.com/stories/5089778-uws
https://coub.com/stories/5089777-scu
https://coub.com/stories/5089776-monash
https://coub.com/stories/5089775-sut
https://coub.com/stories/5089774-latrobe
https://coub.com/stories/5089773-unimelb
https://coub.com/stories/5089772-rmit
https://coub.com/stories/5089771-deakin
https://coub.com/stories/5089770-swinburne
https://coub.com/stories/5089769-utas
https://coub.com/stories/5089768-victoria
https://coub.com/stories/5089767-adelaide
https://coub.com/stories/5089766-unisa
https://coub.com/stories/5089765-uc
https://coub.com/stories/5089764-acu
https://coub.com/stories/5089763-anu
https://coub.com/stories/5089762-uc
https://coub.com/stories/5089761-cdu
https://coub.com/stories/5089760-ecu
https://coub.com/stories/5089759-murdoch
https://coub.com/stories/5089758-uwa
https://coub.com/stories/5089757-curtin
https://coub.com/stories/5089756-utas
https://coub.com/stories/5089755-usq
https://coub.com/stories/5089754-bond
https://coub.com/stories/5089753-jcu
https://coub.com/stories/5089752-qut
https://coub.com/stories/5089751-cqu
https://coub.com/stories/5089750-jcu
https://coub.com/stories/5089749-griffith
https://coub.com/stories/5089748-uq

收起阅读 »