使用 `Vitesse Uni App` 创建微信小程序并配置 uview-plus 和 alovajs

使用 Vitesse Uni App 创建微信小程序

Vitesse Uni App:https://vitesse-docs.netlify.app/

UI:https://uview-plus.jiangruyi.com/components/intro.html

编辑器:VScode 安装 Volar(Vue Offices)插件

创建项目

pnpm create uni <project-name> -t vitesse

创建页面

参考:https://vitesse-docs.netlify.app/getting-started/views

创建方式非常简单,即看即会

引入 UI 库

这步稍微有些麻烦。

安装文档地址:https://uview-plus.jiangruyi.com/components/install.html

配置文档地址:https://uview-plus.jiangruyi.com/components/npmSetting.html

安装 Sass
// 安装sass
npm i sass -D

// 安装sass-loader,注意需要版本10,否则可能会导致vue与sass的兼容问题而报错
npm i sass-loader@10 -D
安装依赖
npm install uview-plus
npm install dayjs
npm install clipboard
引入 JS 库
// main.js
import uviewPlus from 'uview-plus'

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  app.use(uviewPlus)
  return {
    app
  }
}
// #endif
引入全局 CSS
/* uni.scss */
@import 'uview-plus/theme.scss';
引入基础样式
<style lang="scss">
	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
	@import "uview-plus/index.scss";
</style>
配置 easycom 模式

参考:https://uview-plus.jiangruyi.com/components/npmSetting.html#%E9%85%8D%E7%BD%AEeasycom%E7%BB%84%E4%BB%B6%E6%A8%A1%E5%BC%8F

// pages.json
{
	"easycom": {
		"autoscan": true,
		// 注意一定要放在custom里,否则无效,https://ask.dcloud.net.cn/question/131175
		"custom": {
			"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
			"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
	        "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
		}
	},
	
	// 此为本身已有的内容
	"pages": [
		// ......
	]
}
配置 typescript 支持
{
	"compilerOptions": {
    "sourceMap": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"]
    },
    "lib": ["esnext", "dom"],
    "types": [
        "@dcloudio/types",
        "uview-plus/types"
    ]
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

启动项目查看

npm run dev:h5

请添加图片描述

踩坑记录

在 pages.json 中配置 easycom 配置时,再次重新启动项目,会导致 pages.json 中的文件刷新,然后 ui 样式引入失效,需要在 pages.config.json 中配置

import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages'

export default defineUniPages({
  pages: [],
  globalStyle: {
    backgroundColor: '@bgColor',
    backgroundColorBottom: '@bgColorBottom',
    backgroundColorTop: '@bgColorTop',
    backgroundTextStyle: '@bgTxtStyle',
    navigationBarBackgroundColor: '#000000',
    navigationBarTextStyle: '@navTxtStyle',
    navigationBarTitleText: 'Vitesse-Uni',
    navigationStyle: 'custom',
  },
  // tabBar: {
  //   backgroundColor: "@tabBgColor",
  //   borderStyle: "@tabBorderStyle",
  //   color: "@tabFontColor",
  //   selectedColor: "@tabSelectedColor",
  // },
  "easycom": {
		"autoscan": true,
		"custom": {
			"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
			"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
	        "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
		}
	},
})
]

使用 alova.js 作为小程序的请求工具

官网:https://alova.js.org/zh-CN/

unipp 插件:https://alova.js.org/zh-CN/resource/request-adapter/uniapp

安装

npm install @alova/adapter-uniapp --save

封装

index.ts

//index.ts
import { createAlova } from 'alova'
import AdapterUniapp from '@alova/adapter-uniapp';
 
export const AlovaInstance = createAlova({
  
  baseURL: 'http://localhost:8080/api/v1/',

  // https://alova.js.org/zh-CN/resource/request-adapter/uniapp#%E5%88%9B%E5%BB%BA-alova
  ...AdapterUniapp(),
 
  // 请求拦截器
  beforeRequest() {
    
  },
  // 响应拦截器
  responded: {
     
  }

})

api.ts

import { AlovaInstance } from './index'
 
const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
const timeout = 5000
 
export const Alova = {

  createGet(url: string, params?: Record<string, any>) {
    return AlovaInstance.Get(url, {
      headers,
      params,
      timeout
    })
  },

  createPost(url: string, data: Record<string, any>, params: Record<string, any>) {
    return AlovaInstance.Post(url, data, {
      params
    })
  },

  createTodoPut(url: string, data: Record<string, any>, params: Record<string, any>) {
    return AlovaInstance.Put(url,data, {
      params
    })
  },

  createDelete(url: string, data?: Record<string, any>, params?: Record<string, any>) {
    return AlovaInstance.Put(url,data, {
      params
    })
  }

}

service.ts

import {Alova} from "./api"

// Law notice
export const getLawNotice = () => {return Alova.createGet("law")}

调用:

<script lang="ts" setup>
import {getLawNotice} from "../alova/service"
import {concatenate, ulg} from "../utils/strings/index";
![请添加图片描述](https://i-blog.csdnimg.cn/direct/f5bfc075d5254acdb28bef31d5b85b1b.png)

// data
const content = ref<string>("")
// const law 

// request api
const getLawList = async () => {
  await getLawNotice().then((result: any) => {
    // check status code
    if (result.statusCode === 200) {
      // get data
      let lawList = result.data.data;
      for (let i = 0; i < lawList.length; i++) {
        let text = lawList[i].text;
        // ulg(text)
        content.value = concatenate(content.value, " ", text)
      }
    }
  }).catch((err: any) => {
    alert(err)
  })
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值