| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- import {Object as FabricObject} from 'fabric'
- import {customAlphabet} from 'nanoid'
- import {defineStore} from 'pinia'
- import {SYS_FONTS} from '@/configs/fonts'
- import {ImageCategoryInfo} from '@/configs/images'
- import {getSupportFonts} from '@/utils/fonts'
- import {CanvasElement} from '@/types/canvas'
- import {RightStates, PointElement, ImageCategoryData} from '@/types/elements'
- import {ExportTypes, PoolType, SystemFont} from '@/types/common'
- import {getDesignFonts} from '@/api/static/font'
- import useCanvas from '@/views/Canvas/useCanvas'
- export interface MainState {
- canvasObject: FabricObject | undefined
- hoveredObject: FabricObject | undefined
- leavedObject: FabricObject | undefined
- clonedObject: FabricObject | undefined
- currentPoint: PointElement | null
- rightState: RightStates
- imageCategoryType: string[]
- imageCategoryData: ImageCategoryData[]
- illustrationCategoryType: string[]
- illustrationCategoryData: ImageCategoryData[]
- handleElementId: string
- sizeMode: number
- unitMode: number
- gridColorSelf: [string[]]
- databaseId: string
- selectedTemplatesIndex: number[]
- thumbnailsFocus: boolean
- drawAreaFocus: boolean
- systemFonts: SystemFont[]
- onlineFonts: any[]
- disableHotkeys: boolean
- exportType: ExportTypes
- lastHelp: PoolType
- lastEdit: PoolType
- poolType: PoolType
- poolShow: boolean
- runMode: number
- }
- const nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
- export const databaseId = nanoid(10)
- export const useMainStore = defineStore('main', {
- state: (): MainState => ({
- canvasObject: undefined,
- clonedObject: undefined,
- hoveredObject: undefined,
- leavedObject: undefined,
- currentPoint: null,
- rightState: RightStates.ELEMENT_CANVAS,
- imageCategoryType: [],
- imageCategoryData: ImageCategoryInfo,
- illustrationCategoryType: [],
- illustrationCategoryData: ImageCategoryInfo,
- handleElementId: '', // 正在操作的元素ID
- sizeMode: 0, // 模板样式
- unitMode: 0, // 单位
- gridColorSelf: [[]], // 自定义颜色
- databaseId, // 标识当前应用的indexedDB数据库ID
- selectedTemplatesIndex: [],
- thumbnailsFocus: false, // 左侧导航缩略图区域聚焦
- drawAreaFocus: false, // 编辑区聚焦
- systemFonts: SYS_FONTS, // 系统字体
- onlineFonts: [], // 在线字体
- disableHotkeys: false, // 禁用快捷键
- exportType: 'image', // 导出面板
- lastEdit: 'editor', // 左边栏
- lastHelp: 'editor', // 左边栏
- poolType: 'editor', // 左边栏
- poolShow: false, // 显示左边栏
- runMode: 0 //运行方式, 0客户端展示/1模板编辑
- }),
- getters: {
- activeElementList() {
- // const slidesStore = useSlidesStore()
- // const currentSlide = slidesStore.currentSlide
- // if (!currentSlide || !currentSlide.elements) return []
- },
- handleElement() {
- // const slidesStore = useSlidesStore()
- // const currentSlide = slidesStore.currentSlide
- // if (!currentSlide || !currentSlide.elements) return null
- // return currentSlide.elements.find(element => state.handleElementId === element.id) || null
- },
- },
- actions: {
- setCanvasObject(canvasObject: FabricObject | undefined) {
- this.canvasObject = canvasObject
- // this.getFonts()
- },
- setHoveredObject(hoveredObject: FabricObject | undefined) {
- this.hoveredObject = hoveredObject
- },
- setLeaveddObject(leavedObject: FabricObject | undefined) {
- this.leavedObject = leavedObject
- },
- setActiveObject() {
- const [canvas] = useCanvas()
- if (!canvas) return
- const activeObject = canvas._activeObject as CanvasElement | null
- },
- // setHandleElementId(handleElementId: string) {
- // this.handleElementId = handleElementId
- // },
- // setActiveGroupElementId(activeGroupElementId: string) {
- // this.activeGroupElementId = activeGroupElementId
- // },
- // setHiddenElementIdList(hiddenElementIdList: string[]) {
- // this.hiddenElementIdList = hiddenElementIdList
- // },
- // setCanvasDragged(isDragged: boolean) {
- // this.canvasDragged = isDragged
- // },
- setPoolType(poolType: PoolType) {
- if (poolType === 'help') this.lastHelp = this.poolType
- // if (poolType === 'editor') this.lastEdit = this.poolType
- this.poolType = poolType
- },
- setRightState(rightState: RightStates) {
- this.rightState = rightState
- },
- setThumbnailsFocus(isFocus: boolean) {
- this.thumbnailsFocus = isFocus
- },
- getFonts() {
- this.getSystemFonts()
- this.getOnlineFonts()
- },
- getSystemFonts() {
- this.systemFonts = getSupportFonts(SYS_FONTS)
- },
- async getOnlineFonts() {
- // const res = await getFontInfo()
- // if (res.data.code === 200) {
- // // this.onlineFonts = res.data.data
- // const style = document.createElement("style");
- // style.type = "text/css";
- // res.data.data.forEach(fontInfo => {
- // this.onlineFonts.push({label: fontInfo.fontname, value: fontInfo.fontname})
- // style.appendChild(document.createTextNode(
- // `@font-face {font-family: '${fontInfo.fontname}'; src: url(${fontInfo.url}) format('truetype');}`
- // ));
- // })
- // document.head.appendChild(style);
- // }
- getDesignFonts({}).then((response: any) => {
- if (response.httpCode == 200) {
- this.onlineFonts = response.data
- const style = document.createElement("style");
- style.type = "text/css";
- response.data.forEach(fontInfo => {
- style.appendChild(document.createTextNode(
- `@font-face {font-family: '${fontInfo.fontFamily}'; src: url(${fontInfo.fontFilePath}) format('truetype');}`
- ));
- })
- document.head.appendChild(style);
- }
- });
- },
- setExportType(type: ExportTypes) {
- this.exportType = type
- },
- setDrawAreaFocus(status: boolean) {
- this.drawAreaFocus = status
- },
- // setDisableHotkeysState(disable: boolean) {
- // this.disableHotkeys = disable
- // },
- // setGridLineSize(size: number) {
- // this.gridLineSize = size
- // },
- // setRulerState(show: boolean) {
- // this.showRuler = show
- // },
- // setClipingImageElementId(elId: string) {
- // this.clipingImageElementId = elId
- // },
- // setSelectedTableCells(cells: string[]) {
- // this.selectedTableCells = cells
- // },
- // setScalingState(isScaling: boolean) {
- // this.isScaling = isScaling
- // },
- updateSelectedTemplatesIndex(selectedTemplatesIndex: number[]) {
- this.selectedTemplatesIndex = selectedTemplatesIndex
- },
- // setDialogForColor(show: boolean) {
- // this.dialogForColor = show
- // },
- // saveDialogForColor(colors: string[]) {
- // this.dialogForColor = false
- // this.colorSelfStore.push(colors)
- // },
- // setDialogForTemplate(show: boolean) {
- // this.dialogForTemplate = show
- // },
- // setSelectPanelState(show: boolean) {
- // this.showSelectPanel = show
- // },
- setRunMode(runMode: number) {
- this.runMode = runMode
- },
- getRunMode() {
- return this.runMode
- }
- },
- })
|