npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@utoolkits/ui

v0.0.72

Published

## 安装

Downloads

14

Readme

UNI-UI

安装

npm install @utoolkits/im-sdk
npm install @utoolkits/ui
// 或
npm install @utoolkits/im-sdk
yarn add @utoolkits/ui

完整引入

import UNUI from "@utoolkits/ui";
import "@utoolkits/ui/dist/style.css";

按需引入

import { ChatList, MessageReviewList } from "@utoolkits/ui";
import "@utoolkits/ui/dist/style.css";

组件列表

IM 组件

import { ref } from "vue";
import { ChatList, MessageReviewList } from "@utoolkits/ui";
import "@utoolkits/ui/dist/style.css";
// 接收 im 实例
let env = "test";
let token =
  "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNjgzNjc5MDkyMjA0LCJleHAiOjg2NDAxNjgzNTkyNjkyLCJ1c2VySWQiOjZ9.jcL-OX5M85m8gOCBDjQzz4UsIz5lHRGPSiRGr4YNAPE";
let liveRoomId = "1";
let imInstance = ref(null);
const onIMInstanceInitialized = (im) => {
  imInstance.value = im;
};
const members = ref([]);
const onJoin = (res) => {
  members.value.push(res);
};
const onExit = (res) => {
  const index = members.value.findIndex((item) => item.userId === res.userId);
  if (index > -1) {
    members.value.splice(index, 1);
  }
};
<div class="container">
  <div class="item">
    <ChatList
      :token="token"
      :env="env"
      :liveRoomId="liveRoomId"
      @im-instance-initialized="onIMInstanceInitialized"
      @exit="onExit"
      @join="onJoin"
    ></ChatList>
  </div>
  <div class="item">
    <MessageReviewList
      :imInstance="imInstance"
      :liveRoomId="liveRoomId"
    ></MessageReviewList>
  </div>
</div>

属性

| 属性 | 描述 | 默认值 | | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | | env | 环境变量(必填) | - | | token | 凭证(必填) | - | | liveRoomId | 房间 ID(必填) | - | | chatroomNick | 聊天室昵称 | - | | chatroomAvatar | 聊天室头像 | - | | ext | 接收一个对象,扩展消息。 目前角色:(1, "用户"),(2, "助教老师"),(3, "讲师"); 比如现在是助教 { speechRole: 2 } | {} | | isRealUser | 只展示真实用户传 true, 默认为 false,显示全部消息 | false | | channleIds | 只展示指定的渠道,渠道 ID 数组 | [] | | filterFn | 如果上面 isRealUser,channleIds 不能满足时,可以通过过滤器函数。注意的是每次过滤条件变化,filterFn 必须是一个新的函数值,否则不会触发过滤 | filterFn = () => true; | | theme | light、dark | light | | size | small、medium | medium |

事件

| 名称 | 描述 | | ----------------------- | ------------- | | im-instance-initialized | im 实例化完成 | | join | 进入聊天室 | | exit | 退出聊天室 | | liveStart | 直播开始 | | liveEnd | 直播结束 |

审核列表组件

let messageReviewListRef = ref(null);
// 删除top10
const onDeleteTop = () => {
  messageReviewListRef.value.deleteTopMessages(10);
};
<el-button @click="onDeleteTop">删除前10条</el-button>
<MessageReviewList
  ref="messageReviewListRef"
  :imInstance="imInstance"
  :liveRoomId="liveRoomId"
></MessageReviewList>

属性

| 属性 | 描述 | 默认值 | | ---------- | ---------------- | ------ | | imInstance | im 实例(必填) | - | | liveRoomId | 房间 ID(必填) | - | | isActivate | 当前展示审核列表 | false |

方法

| 方法 | 描述 | 默认值 | | ----------------------------- | ---------------- | ------ | | deleteTopMessages(pos:number) | 删除前多少条消息 | - |

在线用户列表

import { OnlineAudienceList } from "@utoolkits/ui";
<OnlineAudienceList
  ref="onlineAudienceListRef"
  :imInstance="imInstance"
  :liveRoomId="liveRoomId"
  show-detail-btn
></OnlineAudienceList>

属性

| 属性 | 描述 | 默认值 | | ------------- | ------------------------------------------------ | --------- | | imInstance | im 实例(必填) | - | | liveRoomId | 房间 ID(必填) | - | | showDetailBtn | 展示详情按钮 | false | | input | 搜索过滤条件 | "" | | channleIds | 渠道数组 | [] | | filterFn | 自定义过滤函数,当希望支持更细过滤时可以考虑使用 | ()=> true | | theme | light、dark | light | | size | small、medium | medium |

方法

| 名称 | 描述 | 默认值 | | ----- | ---- | ------ | | query | 查询 | - |

事件

| 名称 | 描述 | 默认值 | | ------------- | ------ | ------ | | total(number) | 在线数 | - |

在线助教列表

import { OnlineAssistantList } from "@utoolkits/ui";
<OnlineAssistantList
  ref="onlineAssistantListRef"
  :env="env"
  :token="token"
  :imInstance="imInstance"
  :liveRoomId="liveRoomId"
  show-detail-btn
></OnlineAssistantList>

属性

| 属性 | 描述 | 默认值 | | ------------- | ------------------------------------------------ | --------- | | env | 环境变量(必填) | - | | token | 凭证(必填) | - | | imInstance | im 实例(必填) | - | | liveRoomId | 房间 ID(必填) | - | | showDetailBtn | 展示详情按钮 | false | | input | 搜索过滤条件 | "" | | channleIds | 渠道数组过滤 | [] | | filterFn | 自定义过滤函数,当希望支持更细过滤时可以考虑使用 | ()=> true | | theme | light、dark | light | | size | small、medium | medium |

方法

| 名称 | 描述 | 默认值 | | ----- | ---- | ------ | | query | 查询 | - |

事件

| 名称 | 描述 | 默认值 | | ------------- | ------ | ------ | | total(number) | 在线数 | - |

表格组件

属性

| 属性 | 描述 | 默认值 | | --------- | -------------- | --------------------- | | loadData | 请求数据方法 | 需要传入 Promise 对象 | | colums | 表格列 | - | | selection | 显示多选框 | false | | showIndex | 显示列表索引 | false | | size | 每页展示多少条 | 10 |

方法

| 方法 | 描述 | 默认值 | | ---------------- | ---------------- | ------ | | getSelectionRows | 返回当前选中的行 | - | | clearSelection | 清空用户的选择 | - |

事件

| 事件 | 描述 | 默认值 | | ---------------- | ------------------------------ | ------ | | selection-change | 当选择项发生变化时会触发该事件 | - |

案例

<div class="container">
  <el-form :inline="true">
    <el-form-item label="姓名">
      <el-input v-model="input"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button @click="onSerach" :loading="isLoading">查询</el-button>
    </el-form-item>
    <el-form-item>
      <el-button @click="onSelectionRow">获取选中行</el-button>
      <el-button @click="onClean">清空选中行</el-button>
    </el-form-item>
  </el-form>
</div>
<table
  ref="tableRef"
  :loadData="loadData"
  :colums="colums"
  selection
  showIndex
  @selection-change="onSelectionChange"
></table>
import { computed } from "vue";
import { VTable } from "@utoolkits/ui";

const input = ref("");
function getData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        current: 1,
        records: [
          {
            id: 1,
            name: "抖音直播运营变现",
            time: "2020-12-12 12:12:12",
            status: false,
          },
          {
            id: 2,
            name: "3抖音直播运营变现",
            time: "2020-12-12 12:12:12",
            status: false,
          },
          {
            id: 3,
            name: "2抖音直播运营变现",
            time: "2020-12-12 12:12:12",
            status: true,
          },
          {
            id: 4,
            name: "1抖音直播运营变现",
            time: "2020-12-12 12:12:12",
            status: true,
          },
          {
            id: 2,
            name: "课程名称",
            time: "2020-12-12 12:12:12",
            status: false,
          },
          {
            id: 3,
            name: "课程名称",
            time: "2020-12-12 12:12:12",
            status: true,
          },
          {
            id: 4,
            name: "课程名称",
            time: "2020-12-12 12:12:12",
            status: false,
          },
        ],
        total: 100,
      });
    }, 3000);
  });
}
const colums = [
  {
    label: "ID",
    prop: "id",
  },
  {
    label: "姓名",
    prop: "name",
  },
  {
    label: "时间",
    prop: "time",
  },
  {
    label: "状态",
    prop: "status",
  },
];
const loadData = async (parameter) => {
  return getData({
    ...parameter,
    name: input.value,
  });
};
const tableRef = ref(null);
const isLoading = computed(() => tableRef.value?.isLoading);
const onSerach = () => {
  tableRef.value.query();
};
const onSelectionRow = () => {
  console.log(tableRef.value.getSelectionRows());
};
const onClean = () => {
  tableRef.value.clearSelection();
};
const onSelectionChange = (selection) => {
  console.log(selection);
};