UNPKG

uni-wot-ui-plus

Version:

🦄基于uni-ui的二次封装的uniapp组件库

271 lines (219 loc) 6.27 kB
<p align="center"> <img src="https://nest-js.oss-accelerate.aliyuncs.com/nestTest/1/1745638907584.png" width="100" height="100" style="max-width: 100%;" alt="logo" /> </p> <h1 align="center">uni-ui-plus</h1> <p align="center">uni-ui 二次封装</p> <p align="center"> <a href="https://github.com/iceywu/uni-ui-plus"> <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/iceywu/uni-ui-plus?logo=github&color=%234d80f0&link=https%3A%2F%2Fgithub.com%2iceywu%2Funi-ui-plus"> </a> <a href="https://www.npmjs.com/package/uni-ui-plus"> <img alt="npm" src="https://img.shields.io/npm/v/uni-ui-plus?logo=npm&color=%234d80f0&link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Funi-ui-plus"> </a> <a href="https://www.npmjs.com/package/uni-ui-plus"> <img alt="npm" src="https://img.shields.io/npm/dw/uni-ui-plus?logo=npm&link=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Funi-ui-plus"> </a> <a href="https://www.npmjs.com/package/uni-ui-plus"> <img src="https://img.shields.io/npm/dt/uni-ui-plus?style=flat-square" alt="downloads"> </a> ## 介绍 uni-ui-plus 是对@dcloudio/uni-ui的二次封装,提供了更好的使用体验和更多的功能。 # 快速上手 ## NPM方式 ### 安装 ```bash [pnpm] pnpm add uni-ui-plus ``` ```bash [yarn] yarn add uni-ui-plus ``` ```bash [npm] npm install uni-ui-plus ``` ### 配置 --- #### 组件导入 ::: warning 注意 自动按需导入组件有 `unplugin` 和 `easycom` 两种方式,请勿混用~ ::: ##### <Badge type="tip">推荐</Badge> unplugin方式 - 安装插件 > [@uni-helper/vite-plugin-uni-components](https://github.com/uni-helper/vite-plugin-uni-components) ::: code-group ```bash [pnpm] pnpm add -D @uni-helper/vite-plugin-uni-components ``` ```bash [yarn] yarn add --dev @uni-helper/vite-plugin-uni-components ``` ```bash [npm] npm install -D @uni-helper/vite-plugin-uni-components ``` ::: - 配置插件 > vite.config.ts ```ts import { defineConfig } from "vite"; import UniApp from "@dcloudio/vite-plugin-uni"; import UniComponents from "@uni-helper/vite-plugin-uni-components"; import { UpResolver } from "uni-ui-plus"; export default defineConfig({ // ... plugins: [ // ... // 确保放在 `UniApp()` 之前 UniComponents({ resolvers: [UpResolver()], }), UniApp(), ], }); ``` > 如果使用 `pnpm` 管理依赖,请在项目根目录下的 > `.npmrc` 文件中添加如下内容 ```bash shamefully-hoist=true # or public-hoist-pattern[]=@vue* ``` - 类型提示 > tsconfig.json(需要[IDE 支持](https://cn.vuejs.org/guide/typescript/overview.html#ide-support)) ```json5 { compilerOptions: { // ... types: ["uni-ui-plus/global.d.ts"], }, } ``` ##### easycom方式 - 配置easycom > pages.json(若原本已存在easycom字段,则添加easycom.custom字段中的内容) ```json5 { easycom: { autoscan: true, custom: { "^up-(.*)?-(.*)": "uni-ui-plus/components/$1$2/$1$2.vue", "^up-(.*)": "uni-ui-plus/components/$1/$1.vue", }, }, // ... } ``` ### 完成 --- > 配置完成,现在所有的组件都可以直接使用,它将自动完成按需导入 ```html <template> <up-button type="primary">主要按钮</up-button> <!-- 或者(仅限unplugin方式) --> <UpButton type="primary">主要按钮</UpButton> </template> ``` ## 组件列表 --- ### Image ```html <template> <up-image src="http://nest-js.oss-accelerate.aliyuncs.com/nestTest/1/1746282136181.JPG" placeholder-src="http://nest-js.oss-accelerate.aliyuncs.com/nestTest/1/1746282136181.JPG?x-oss-process=image/resize,l_100" width="120" height="120" radius="8" :lazy-load="true" /> </template> ``` --- ### Skeleton ```html <template> <up-skeleton :loading="true" type="title" /> <up-skeleton :loading="true" type="avatar" avatar-shape="circle" /> </template> ``` --- ### List ```html <script setup> import { getObjVal, list, sleep } from "@iceywu/utils"; import { useRequest } from "vue-hooks-pure"; const scrollListRef = ref(); // 模拟api async function getTestApi(params) { await sleep(500); const { page = 0, size = 10, maxPage = 3 } = params; const baseSize = page * size; const data = list(0, size - 1, (index) => { const element = baseSize + index; return { id: element, cover: `https://picsum.photos/id/${element}/200/300`, title: `title ${element}`, desc: `desc ${element}`, }; }); return { code: 200, msg: "查询成功", result: { content: data, last: page + 1 === maxPage, total: 100, }, }; } const { onRefresh, onLoad: onLoadMore, result, } = useRequest(getTestApi, { target: "list", loadingDelay: 300, getVal: (res) => { const list = getObjVal(res, "result.content", []); return list; }, listOptions: { defaultPageKey: "page", defaultSizeKey: "size", defaultDataKey: "list", defaultPage: -1, getTotal: (data) => { const total = getObjVal(data, "result.total", 0); return total; }, }, onRequestEnd: (res) => { if (scrollListRef.value) { scrollListRef.value.stopRefresh(); } }, }); onMounted(() => { onRefresh(); }); </script> <template> <view class="h-50vh"> <up-list ref="scrollListRef" v-model:list-obj="result" style="height: 100%;" :is-need-h-full="true" :scroll-y="true" @on-load="onLoadMore" @on-refresh="onRefresh" > <template #default="{ data: { list } }"> <view v-for="(item, index) in list" :key="index" class="mb-4 flex"> <image :src="item.cover" class="h-20 w-20" mode="widthFix" /> <view>{{ item.title }}</view> </view> </template> </up-list> </view> </template> ```