im-ui-mobile
Version:
A Vue3.0 + Typescript instant messaging component library for Uniapp
97 lines (82 loc) • 2.61 kB
JavaScript
import { nextTick } from 'vue';
import { UViewPlusPlugin } from './plugins/uview-plus.js'
import eventBus from "./utils/eventBus.js";
import datetime from "./utils/datetime.js";
import Emoji from "./utils/emoji.js";
import dom from "./utils/dom.js";
import messageType from "./utils/messageType.js";
import RecorderApp from "./utils/recorderApp.js";
import RecorderH5 from "./utils/recorderH5.js";
import Requester from "./utils/requester.js";
import url from "./utils/url.js";
import { useDynamicRefs } from "./utils/useDynamicRefs.js";
import WebSocket from "./utils/websocket.js";
import { MESSAGE_TYPE, RTC_STATE, TERMINAL_TYPE, MESSAGE_STATUS } from "./utils/enums.js";
import { configManager } from './utils/config.js'
const importComponents = import.meta.glob('./components/im-*/im-*.vue', { eager: true })
const components = [];
for (const key in importComponents) {
const component = importComponents[key].default;
// 1. 从文件路径中提取组件名(更可靠的方法)
const fileName = key.split('/').pop(); // 获取文件名,如 im-button.vue
const componentName = fileName
.replace('.vue', '') // 去掉 .vue 后缀
.replace(/\b\w/g, l => l.toUpperCase()) // 首字母大写,如 ImButton
// 2. 添加到组件列表
if (component) {
// 如果组件本身没有 name,给它设置一个
if (!component.name) {
component.name = componentName;
}
components.push(component);
}
}
// 全局配置对象
let config = {}
let emoji = null
const install = (app, upuiParams = '') => {
// 初始化自定义配置
if (upuiParams) {
uni.upuiParams = upuiParams
const params = upuiParams()
if (params.options) {
config = params.options
configManager.setConfig(params.options)
}
}
// 安装插件
app.use(UViewPlusPlugin)
// 注册组件
components.forEach(component => {
app.component(component.name || '', component)
})
}
// 使用自定义配置的对象实例化
nextTick(() => {
emoji = new Emoji();
})
const getConfig = () => ({ ...config });
const webSocket = new WebSocket();
export {
getConfig,
emoji,
eventBus,
datetime,
dom,
messageType,
RecorderApp,
RecorderH5,
Requester,
url,
useDynamicRefs,
WebSocket,
webSocket,
// Enums
MESSAGE_TYPE,
RTC_STATE,
TERMINAL_TYPE,
MESSAGE_STATUS
}
export default {
install
}