!163 fix: 修复原来动态导入的问题,保留 redirectComponent 配置的灵活性

Merge pull request !163 from dodu/dev-commet
This commit is contained in:
奔跑的面条 2023-05-27 07:00:44 +00:00 committed by Gitee
commit d6e309b117
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
12 changed files with 25 additions and 39 deletions

View File

@ -1,4 +1,4 @@
import { IconConfig } from '../Icon/index' import { IconConfig } from '../Default/Icon/index'
import { PackagesCategoryEnum } from '@/packages/index.d' import { PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d' import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
@ -78,7 +78,7 @@ const iconList = iconNames.map(name => ({
icon: name, icon: name,
dataset: name, dataset: name,
title: name.replace('uim:', ''), title: name.replace('uim:', ''),
redirectComponent: './components/Icons/Icon' // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${IconConfig.package}/${IconConfig.category}/${IconConfig.key}` // 跳转组件路径规则packageName/categoryName/componentKey
})) }))
export default iconList export default iconList

View File

@ -1,13 +1,13 @@
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d' import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d' import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
export const IconConfig: ConfigType = { export const IconConfig: ConfigType = {
key: 'Icon', key: 'Icon',
chartKey: 'VIcon', chartKey: 'VIcon',
conKey: 'VCIcon', conKey: 'VCIcon',
title: '图标', title: '图标',
category: ChatCategoryEnum.COMMON, category: ChatCategoryEnum.DEFAULT,
categoryName: ChatCategoryEnumName.COMMON, categoryName: ChatCategoryEnumName.DEFAULT,
package: PackagesCategoryEnum.ICONS, package: PackagesCategoryEnum.ICONS,
chartFrame: ChartFrameEnum.STATIC, chartFrame: ChartFrameEnum.STATIC,
image: 'icon.png' image: 'icon.png'

View File

@ -1,4 +1,4 @@
import { IconConfig } from '../Icon/index' import { IconConfig } from '../Default/Icon/index'
import { PackagesCategoryEnum } from '@/packages/index.d' import { PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d' import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
@ -39,7 +39,7 @@ const iconList = iconNames.map(name => ({
icon: name, icon: name,
dataset: name, dataset: name,
title: name.replace('line-md:', ''), title: name.replace('line-md:', ''),
redirectComponent: './components/Icons/Icon' // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${IconConfig.package}/${IconConfig.category}/${IconConfig.key}` // 跳转组件路径规则packageName/categoryName/componentKey
})) }))
export default iconList export default iconList

View File

@ -1,4 +1,4 @@
import { IconConfig } from '../Icon/index' import { IconConfig } from '../Default/Icon/index'
import { PackagesCategoryEnum } from '@/packages/index.d' import { PackagesCategoryEnum } from '@/packages/index.d'
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d' import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
@ -36,7 +36,7 @@ const iconNames = [
'wi:night-alt-cloudy-high', 'wi:night-alt-cloudy-high',
'wi:night-alt-hail', 'wi:night-alt-hail',
'wi:night-alt-lightning', 'wi:night-alt-lightning',
'wi:umbrella', 'wi:umbrella'
] ]
const iconList = iconNames.map(name => ({ const iconList = iconNames.map(name => ({
...IconConfig, ...IconConfig,
@ -47,7 +47,7 @@ const iconList = iconNames.map(name => ({
icon: name, icon: name,
dataset: name, dataset: name,
title: name.replace('wi:', ''), title: name.replace('wi:', ''),
redirectComponent: './components/Icons/Icon' // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${IconConfig.package}/${IconConfig.category}/${IconConfig.key}` // 跳转组件路径规则packageName/categoryName/componentKey
})) }))
export default iconList export default iconList

View File

@ -1,12 +1,13 @@
export enum ChatCategoryEnum { export enum ChatCategoryEnum {
ML = 'MaterialLine', ML = 'MaterialLine',
COMMON = 'Common', COMMON = 'Common',
WEATHER = "WEATHER" WEATHER = 'Weather',
DEFAULT = 'Default' // 这个仅用来表示组件分类目录,不要在 index.ts 中导入
} }
export enum ChatCategoryEnumName { export enum ChatCategoryEnumName {
ML = '动画', ML = '动画',
COMMON = '通用', COMMON = '通用',
WEATHER = "天气" WEATHER = '天气',
DEFAULT = '默认'
} }

View File

@ -2,4 +2,4 @@ import MaterialLine from './MaterialLine'
import Common from './Common' import Common from './Common'
import Weather from './Weather' import Weather from './Weather'
export const IconList = [...MaterialLine, ...Common, ...Weather] export const IconList = [...MaterialLine, ...Weather, ...Common]

View File

@ -22,7 +22,7 @@ const userPhotosList: ConfigType[] = getLocalStorage(StoreKey) || []
const uploadFile = (callback: Function | null = null) => { const uploadFile = (callback: Function | null = null) => {
const input = document.createElement('input') const input = document.createElement('input')
input.type = 'file' input.type = 'file'
input.accept = 'image/*' // 这里只允许图片类型 input.accept = '.png,.jpg,.jpeg,.gif' // 这里只允许部分图片类型
input.onchange = async () => { input.onchange = async () => {
if (!input.files || !input.files.length) return if (!input.files || !input.files.length) return
const file = input.files[0] const file = input.files[0]
@ -53,7 +53,7 @@ const addConfig = {
chartFrame: ChartFrameEnum.STATIC, chartFrame: ChartFrameEnum.STATIC,
title: '点击上传图片', title: '点击上传图片',
image: 'upload.png', image: 'upload.png',
redirectComponent: './components/Informations/Mores/Image', // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${ImageConfig.package}/${ImageConfig.category}/${ImageConfig.key}`, // 跳转组件路径规则packageName/categoryName/componentKey
disabled: true, disabled: true,
configEvents: { configEvents: {
// 点击上传事件 // 点击上传事件
@ -74,7 +74,7 @@ const addConfig = {
title: e.fileName, title: e.fileName,
image: e.url, image: e.url,
dataset: e.url, dataset: e.url,
redirectComponent: './components/Informations/Mores/Image' // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${ImageConfig.package}/${ImageConfig.category}/${ImageConfig.key}` // 跳转组件路径规则packageName/categoryName/componentKey
} }
userPhotosList.unshift(newPhoto) userPhotosList.unshift(newPhoto)
// 存储在本地数据中 // 存储在本地数据中

View File

@ -17,7 +17,7 @@ const photoConfigList = imageList.map(i => ({
image: i.imageUrl, image: i.imageUrl,
dataset: i.imageUrl, dataset: i.imageUrl,
title: i.imageName, title: i.imageName,
redirectComponent: './components/Informations/Mores/Image' // 虚拟组件路径,尾部不跟 /’,相对于 /packages/index.ts 文件的位置 redirectComponent: `${ImageConfig.package}/${ImageConfig.category}/${ImageConfig.key}` // 跳转组件路径规则packageName/categoryName/componentKey
})) }))
export default photoConfigList export default photoConfigList

View File

@ -31,28 +31,13 @@ export let packagesList: PackagesType = {
* @param targetData * @param targetData
*/ */
export const createComponent = async (targetData: ConfigType) => { export const createComponent = async (targetData: ConfigType) => {
const { package: packageName } = targetData const { redirectComponent, category, key } = targetData
if (packageName === PackagesCategoryEnum.ICONS) { // redirectComponent 是给图片组件库和图标组件库使用的
return createIconComponent() if (redirectComponent) {
} else if (packageName === PackagesCategoryEnum.PHOTOS) { const [packageName, categoryName, keyName] = redirectComponent.split('/')
return createPhotoComponent() const redirectChart = await import(`./components/${packageName}/${categoryName}/${keyName}/config.ts`)
} else { return new redirectChart.default()
return createDefaultComponent(targetData)
} }
}
export const createIconComponent = async () => {
const chart = await import(`./components/Icons/Icon/config`)
return new chart.default()
}
export const createPhotoComponent = async () => {
const chart = await import(`./components/Informations/Mores/Image/config`)
return new chart.default()
}
export const createDefaultComponent = async (targetData: ConfigType) => {
const { category, key } = targetData
const chart = await import(`./components/${targetData.package}/${category}/${key}/config.ts`) const chart = await import(`./components/${targetData.package}/${category}/${key}/config.ts`)
return new chart.default() return new chart.default()
} }