mirror of
https://gitee.com/dromara/go-view.git
synced 2026-04-23 00:00:12 +08:00
Merge branch 'dev-photos' into dev-commet
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import { PublicConfigClass } from '@/packages/public'
|
||||
import { CreateComponentType } from '@/packages/index.d'
|
||||
import { chartInitConfig } from '@/settings/designSetting'
|
||||
import { IconConfig } from './index'
|
||||
import cloneDeep from 'lodash/cloneDeep'
|
||||
|
||||
export const option = {
|
||||
// 图标名称
|
||||
dataset: 'uim:apple',
|
||||
color: '#03A9F4',
|
||||
size: 64,
|
||||
rotate: 0 // 旋转角度
|
||||
}
|
||||
|
||||
export default class Config extends PublicConfigClass implements CreateComponentType {
|
||||
public key = IconConfig.key
|
||||
public attr = { ...chartInitConfig, w: 64, h: 64, zIndex: 1 }
|
||||
public chartConfig = cloneDeep(IconConfig)
|
||||
public option = cloneDeep(option)
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<template>
|
||||
<collapse-item name="属性" :expanded="true">
|
||||
<setting-item-box name="样式">
|
||||
<setting-item name="颜色">
|
||||
<n-color-picker size="small" :modes="['hex']" v-model:value="optionData.color"></n-color-picker>
|
||||
</setting-item>
|
||||
<setting-item name="尺寸">
|
||||
<n-input-number v-model:value="optionData.size" size="small" :min="0" placeholder="尺寸"></n-input-number>
|
||||
</setting-item>
|
||||
</setting-item-box>
|
||||
<setting-item-box name="旋转">
|
||||
<setting-item name="旋转">
|
||||
<n-select v-model:value="optionData.rotate" size="small" :options="rotateMode"></n-select>
|
||||
</setting-item>
|
||||
</setting-item-box>
|
||||
</collapse-item>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { PropType } from 'vue'
|
||||
import { option } from './config'
|
||||
import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
|
||||
|
||||
const props = defineProps({
|
||||
optionData: {
|
||||
type: Object as PropType<typeof option>,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
// 旋转方式
|
||||
const rotateMode = [
|
||||
{
|
||||
value: 0,
|
||||
label: '0°'
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: '90°'
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: '180°'
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: '270°'
|
||||
}
|
||||
]
|
||||
</script>
|
||||
@@ -0,0 +1,14 @@
|
||||
import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
|
||||
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
|
||||
|
||||
export const IconConfig: ConfigType = {
|
||||
key: 'Icon',
|
||||
chartKey: 'VIcon',
|
||||
conKey: 'VCIcon',
|
||||
title: '图标',
|
||||
category: ChatCategoryEnum.UNICONS,
|
||||
categoryName: ChatCategoryEnumName.UNICONS,
|
||||
package: PackagesCategoryEnum.ICONS,
|
||||
chartFrame: ChartFrameEnum.COMMON,
|
||||
image: 'icon.png'
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<template>
|
||||
<div class="go-icon-box">
|
||||
<Icon :icon="((dataset || '') as string)" :color="color" :width="size" :rotate="rotate" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { PropType, toRefs } from 'vue'
|
||||
import { CreateComponentType } from '@/packages/index.d'
|
||||
import { Icon } from '@iconify/vue'
|
||||
|
||||
const props = defineProps({
|
||||
chartConfig: {
|
||||
type: Object as PropType<CreateComponentType>,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
const { w, h } = toRefs(props.chartConfig.attr)
|
||||
const { dataset, color, size, rotate } = toRefs(props.chartConfig.option)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@include go('icon-box') {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: v-bind('`${w}px`');
|
||||
height: v-bind('`${h}px`');
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,45 @@
|
||||
import { IconConfig } from '../Icon/index'
|
||||
import { PackagesCategoryEnum } from '@/packages/index.d'
|
||||
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
|
||||
|
||||
const iconNames = [
|
||||
'line-md:beer-alt-filled-loop',
|
||||
'line-md:beer-alt-twotone-loop',
|
||||
'line-md:cloud-braces-loop',
|
||||
'line-md:cloud-download-loop',
|
||||
'line-md:cloud-download-outline-loop',
|
||||
'line-md:cloud-upload-loop',
|
||||
'line-md:cloud-upload-outline-loop',
|
||||
'line-md:coffee-half-empty-twotone-loop',
|
||||
'line-md:coffee-loop',
|
||||
'line-md:coffee-twotone-loop',
|
||||
'line-md:downloading-loop',
|
||||
'line-md:github-loop',
|
||||
'line-md:light-dark-loop',
|
||||
'line-md:loading-alt-loop',
|
||||
'line-md:loading-loop',
|
||||
'line-md:loading-twotone-loop',
|
||||
'line-md:moon-alt-loop',
|
||||
'line-md:moon-alt-to-sunny-outline-loop-transition',
|
||||
'line-md:moon-filled-loop',
|
||||
'line-md:moon-filled-to-sunny-filled-loop-transition',
|
||||
'line-md:star-pulsating-filled-loop',
|
||||
'line-md:star-pulsating-loop',
|
||||
'line-md:star-pulsating-twotone-loop',
|
||||
'line-md:upload-loop',
|
||||
'line-md:upload-outline-loop',
|
||||
'line-md:uploading-loop'
|
||||
]
|
||||
const iconList = iconNames.map(name => ({
|
||||
...IconConfig,
|
||||
category: ChatCategoryEnum.ML,
|
||||
categoryName: ChatCategoryEnumName.ML,
|
||||
package: PackagesCategoryEnum.ICONS,
|
||||
image: name,
|
||||
icon: name,
|
||||
dataset: name,
|
||||
title: name.replace('line-md:', ''),
|
||||
virtualComponent: './components/Icons/Icon' // 虚拟组件路径,尾部不跟 ‘/’,相对于 /packages/index.ts 文件的位置
|
||||
}))
|
||||
|
||||
export default iconList
|
||||
@@ -0,0 +1,86 @@
|
||||
import { IconConfig } from '../Icon/index'
|
||||
import { PackagesCategoryEnum } from '@/packages/index.d'
|
||||
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
|
||||
|
||||
const iconNames = [
|
||||
'uim:adobe',
|
||||
'uim:airplay',
|
||||
'uim:align',
|
||||
'uim:align-alt',
|
||||
'uim:android-alt',
|
||||
'uim:angle-double-down',
|
||||
'uim:angle-double-left',
|
||||
'uim:angle-double-right',
|
||||
'uim:angle-double-up',
|
||||
'uim:angle-down',
|
||||
'uim:angle-left',
|
||||
'uim:angle-right',
|
||||
'uim:angle-up',
|
||||
'uim:apple',
|
||||
'uim:apple-alt',
|
||||
'uim:apps',
|
||||
'uim:bag',
|
||||
'uim:battery-bolt',
|
||||
'uim:bing',
|
||||
'uim:box',
|
||||
'uim:briefcase',
|
||||
'uim:calender',
|
||||
'uim:chart',
|
||||
'uim:chart-pie',
|
||||
'uim:circle-layer',
|
||||
'uim:clinic-medical',
|
||||
'uim:clock',
|
||||
'uim:comment-alt',
|
||||
'uim:comment-alt-dots',
|
||||
'uim:docker',
|
||||
'uim:download-alt',
|
||||
'uim:dribbble',
|
||||
'uim:dropbox',
|
||||
'uim:entry',
|
||||
'uim:exclamation-circle',
|
||||
'uim:exclamation-triangle',
|
||||
'uim:exit',
|
||||
'uim:facebook',
|
||||
'uim:facebook-messenger',
|
||||
'uim:facebook-messenger-alt',
|
||||
'uim:google-drive',
|
||||
'uim:google-play',
|
||||
'uim:graph-bar',
|
||||
'uim:head-side-mask',
|
||||
'uim:horizontal-align-left',
|
||||
'uim:hospital',
|
||||
'uim:house-user',
|
||||
'uim:image-v',
|
||||
'uim:key-skeleton',
|
||||
'uim:layer-group',
|
||||
'uim:layers-alt',
|
||||
'uim:link-h',
|
||||
'uim:microscope',
|
||||
'uim:microsoft',
|
||||
'uim:object-group',
|
||||
'uim:object-ungroup',
|
||||
'uim:paypal',
|
||||
'uim:refresh',
|
||||
'uim:repeat',
|
||||
'uim:right-indent-alt',
|
||||
'uim:rocket',
|
||||
'uim:shield-plus',
|
||||
'uim:social-distancing',
|
||||
'uim:telegram-alt',
|
||||
'uim:user-md',
|
||||
'uim:toilet-paper',
|
||||
'uim:youtube'
|
||||
]
|
||||
const iconList = iconNames.map(name => ({
|
||||
...IconConfig,
|
||||
category: ChatCategoryEnum.UNICONS,
|
||||
categoryName: ChatCategoryEnumName.UNICONS,
|
||||
package: PackagesCategoryEnum.ICONS,
|
||||
image: name,
|
||||
icon: name,
|
||||
dataset: name,
|
||||
title: name.replace('uim:', ''),
|
||||
virtualComponent: './components/Icons/Icon' // 虚拟组件路径,尾部不跟 ‘/’,相对于 /packages/index.ts 文件的位置
|
||||
}))
|
||||
|
||||
export default iconList
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
export enum ChatCategoryEnum {
|
||||
ML = 'MaterialLine',
|
||||
UNICONS = 'Unicons',
|
||||
}
|
||||
|
||||
export enum ChatCategoryEnumName {
|
||||
ML = '动画',
|
||||
UNICONS = '通用'
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import MaterialLine from './MaterialLine'
|
||||
import Unicons from './Unicons'
|
||||
|
||||
export const IconList = [...MaterialLine, ...Unicons]
|
||||
@@ -7,7 +7,8 @@
|
||||
:fallback-src="requireErrorImg()"
|
||||
:width="w"
|
||||
:height="h"
|
||||
></n-image>
|
||||
lazy
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d'
|
||||
import { ImageConfig } from '@/packages/components/Informations/Mores/Image/index'
|
||||
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
|
||||
import { setLocalStorage, getLocalStorage } from '@/utils'
|
||||
import { usePackagesStore } from '@/store/modules/packagesStore/packagesStore'
|
||||
import { StorageEnum } from '@/enums/storageEnum'
|
||||
|
||||
const StoreKey = StorageEnum.GO_USER_MEDIA_PHOTOS
|
||||
|
||||
/**
|
||||
* 上传完成事件类型
|
||||
*/
|
||||
type UploadCompletedEventType = {
|
||||
fileName: string
|
||||
url: string
|
||||
}
|
||||
|
||||
const userPhotosList: ConfigType[] = getLocalStorage(StoreKey) || []
|
||||
|
||||
const uploadFile = (callback: Function | null = null) => {
|
||||
const input = document.createElement('input')
|
||||
input.type = 'file'
|
||||
input.accept = 'image/*' // 这里只允许图片类型
|
||||
input.onchange = async () => {
|
||||
if (!input.files || !input.files.length) return
|
||||
const file = input.files[0]
|
||||
const reader = new FileReader()
|
||||
reader.onload = () => {
|
||||
const eventObj: UploadCompletedEventType = { fileName: file.name, url: reader.result as string }
|
||||
callback && callback(eventObj)
|
||||
}
|
||||
reader.readAsDataURL(file)
|
||||
}
|
||||
input.click()
|
||||
}
|
||||
|
||||
const addConfig = {
|
||||
...ImageConfig,
|
||||
category: ChatCategoryEnum.MY,
|
||||
categoryName: ChatCategoryEnumName.MY,
|
||||
package: PackagesCategoryEnum.PHOTOS,
|
||||
title: '上传新项',
|
||||
image: 'upload.png',
|
||||
virtualComponent: './components/Informations/Mores/Image', // 虚拟组件路径,尾部不跟 ‘/’,相对于 /packages/index.ts 文件的位置
|
||||
disabled: true,
|
||||
clickHandle: (photoConfig: ConfigType) => {
|
||||
uploadFile((e: UploadCompletedEventType) => {
|
||||
// 和上传组件一样配置,更换标题,图片,预设数据
|
||||
const newPhoto = {
|
||||
...ImageConfig,
|
||||
category: ChatCategoryEnum.MY,
|
||||
categoryName: ChatCategoryEnumName.MY,
|
||||
package: PackagesCategoryEnum.PHOTOS,
|
||||
title: e.fileName,
|
||||
image: e.url,
|
||||
dataset: e.url
|
||||
}
|
||||
userPhotosList.push(newPhoto)
|
||||
setLocalStorage(StoreKey, userPhotosList)
|
||||
const { getPackagesList } = usePackagesStore()
|
||||
getPackagesList.Photos.splice(getPackagesList.Photos.length - 1, 0, newPhoto) // 插入到上传按钮前的位置
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default [...userPhotosList, addConfig]
|
||||
@@ -0,0 +1,20 @@
|
||||
import { PackagesCategoryEnum } from '@/packages/index.d'
|
||||
import { ImageConfig } from '@/packages/components/Informations/Mores/Image/index'
|
||||
import { ChatCategoryEnum, ChatCategoryEnumName } from '../index.d'
|
||||
|
||||
const imageList = [
|
||||
{ imageName: 'carousel1', imageUrl: 'https://naive-ui.oss-cn-beijing.aliyuncs.com/carousel-img/carousel1.jpeg' },
|
||||
{ imageName: 'carousel2', imageUrl: 'https://naive-ui.oss-cn-beijing.aliyuncs.com/carousel-img/carousel2.jpeg' }
|
||||
]
|
||||
const photoConfigList = imageList.map(i => ({
|
||||
...ImageConfig,
|
||||
category: ChatCategoryEnum.SHARE,
|
||||
categoryName: ChatCategoryEnumName.SHARE,
|
||||
package: PackagesCategoryEnum.PHOTOS,
|
||||
image: i.imageUrl,
|
||||
dataset: i.imageUrl,
|
||||
title: i.imageName,
|
||||
virtualComponent: './components/Informations/Mores/Image' // 虚拟组件路径,尾部不跟 ‘/’,相对于 /packages/index.ts 文件的位置
|
||||
}))
|
||||
|
||||
export default photoConfigList
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
export enum ChatCategoryEnum {
|
||||
MY = 'My',
|
||||
SHARE = 'Share'
|
||||
}
|
||||
|
||||
export enum ChatCategoryEnumName {
|
||||
MY = '我的',
|
||||
SHARE = '共享'
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import My from './My'
|
||||
import Share from './Share'
|
||||
|
||||
export const PhotoList = [...Share, ...My]
|
||||
Reference in New Issue
Block a user