合同小程序前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

111 lines
2.3 KiB

// @ts-nocheck
import {IconCollection} from './components/l-icon/types'
// #ifndef UNI-APP-X
// #ifdef VUE3
import { reactive } from 'vue';
function definePlugin(options: any) {
return options
}
// #endif
// #ifdef VUE2
import Vue from 'vue'
let reactive = Vue.observable
type VueApp = any
// #endif
type UTSJSONObject = any//Record<string, any>
// #endif
let topApp : VueApp | null = null;
const _iconCollection = reactive<IconCollection>({
has: true,
// #ifdef UNI-APP-X
icons: new Map<string, any|null>()
// #endif
// #ifndef UNI-APP-X
icons: {}
// #endif
})
export function useIconHost(iconHost : string) {
// #ifdef UNI-APP-X
uni.setStorageSync('$limeIconsHost', iconHost)
// #endif
// #ifndef UNI-APP-X
uni.$limeIconsHost = iconHost
// #endif
}
let isInstall = false
export function useIconCollection(iconCollection: UTSJSONObject|null = {}) {
if(!isInstall) {
console.warn('[lime-icon]: useIconCollection 请先注册,app.use(limeIcons, null, iconjson)')
return
}
// #ifdef UNI-APP-X
const map = (iconCollection as UTSJSONObject).toMap()
if(map.size != 0) {
uni.setStorageSync('$limeIconCollection', iconCollection)
_iconCollection.icons = map
}
// #endif
// #ifndef UNI-APP-X
if(Object.keys(iconCollection).length != 0) {
uni.setStorageSync('$limeIconCollection', iconCollection)
_iconCollection.icons = iconCollection
}
// #endif
}
function useProvide() {
if(topApp == null) return
isInstall = true
// #ifdef VUE3
topApp!.provide('$iconCollection', _iconCollection)
// #endif
// #ifndef VUE3
topApp.mixin({
provide: {
$iconCollection: _iconCollection
}
})
// #endif
}
// #ifdef VUE3
export const limeIcons = definePlugin({
install: (app: VueApp, iconHost: string | null, iconCollection: UTSJSONObject | null):void => {
topApp = app;
if(iconHost != null || iconHost != '') {
useIconHost(iconHost!)
}
if(iconCollection != null) {
useProvide()
useIconCollection(iconCollection)
}
}
})
// #endif
// #ifdef VUE2
export const limeIcons = {
install: (app: any, options: any[]) => {
topApp = app;
let [iconHost, iconCollection] = options
if(iconHost != null && typeof iconHost == 'object') {
iconCollection = iconHost
}
if(iconHost && iconHost != '') {
useIconHost(iconHost!)
}
if(iconCollection != null) {
useProvide()
useIconCollection(iconCollection)
}
}
}
// #endif