uniapp+vue3+ts+wot-design-ui项目开发基础配置

1,930 阅读3分钟

基于脚手架生成的uniapp项目

一、项目介绍

项目通过vue3+ts的语法进行开发,并且集成了tailwindcss、pinia、wot-desing-ui等第三方库,对开发效率有很大的提升

二、项目模板

由于tailwindcss在uniapp中的适配问题,这里推荐一个已经配置好的基础模板

https://github.com/sonofmagic/uni-app-vite-vue3-tailwind-vscode-template

三、vscode插件(让你拥有部分hbulider中的开发能力)

1、uniapp-snippet(uniapp中api片段提示)

image.png

2、uni-create-view(创建视图页面时将自动添加 pages.json 中)

image.png

四、ui库:wot-design-ui

由于uniapp插件市场大部分第三方针对vue3的ui库不适配ts,这里提供一个好用的、在更新维护的uniapp第三方ui库:wot-design-uni

image.png

五、自定义navbar

由于原生的navbar具有一定的局限性,这里,我推荐封装一个自定义的navbar组件,让页面navbar的自由度更高,能够适配更多的业务,wot-design-ui中提供了这一组件(wd-navbar),可以进行二次封装满足自己的业务需求

六、自定义tabbar

与navbar类似,这里也推荐封装一个自定义的tabbar组件,但是,建议与原生的tabbar配合使用,可以解决tab页面跳转屏幕闪烁的体验问题(第一次切换依然存在屏幕闪烁,注意:如果配合原生使用,切换tabbar要使用uni.switchTab进行切换,并在app.vue的onLaunch生命周期中使用uni.hideTabBar()隐藏原生tabbar

七、主题切换

结合wot-design-ui中的wd-config-provider进行使用,该组件提供了对应的api,可以来实现主题切换,当然,我建议在项目中维护一套变量/静态数据来对主题进行管理,这样在页面设计上可以更加灵活,我将这一套维护在一个pinia实例中,该pinia实例提供了主题相关的响应式状态(theme、themeColor...)和方法(changeTheme、changeThemeColor...),能够方便我随拿随用

八、多端适配(主要是手机以及平板)

结合tailwindcss以及js来对页面进行移动端适配 当然,你完全可以将尺寸配置抽离到配置文件中,方便管理

  1. tailwindcss配置及使用
// 配置
// tailwind.config.js
// 默认样式为小尺寸的,所以不用配置手机端的像素值
 theme: {
    screens: {
      // 由于该属性是向上兼容的,所以我定义ipad的宽度为740px
      ipad: '740px'
    }
  },
<!--使用-->
<!--默认情况下(手机端)宽度为100px,当设备为ipad或者尺寸更大时为300px-->
<view class="w-[100px] ipad:w-[300px]"></view>
  1. js配置及使用
  // pinia中
  /**
   * 设备类型
   */
  let deviceType = ref<'mobile' | 'ipad'>('mobile')

  /**
   * 设备类型枚举,最好是与 tailwind.config.js配置保持一致,当然你可以抽离出去用一个常量维护
   */
  const deviceTypeConfig = {
    mobile: 0,
    ipad: 740
  }

  /**
   * 更改设备类型
   */
  const getDeviceType = () => {
    //获取系统信息
    uni.getSystemInfo({
      success: (res) => {
          // console.log('系统信息===>',res.windowWidth);
          deviceType.value = res.windowWidth <= deviceTypeConfig.ipad ? 'mobile' : 'ipad'
      },
      fail(err) {
          console.log(err);
      },
  });
  }
<!-- 使用 (先导入该的pinia实例中的变量)-->
<view v-if="deviceType=='ipad'"></view>