feat: 新增多选的历史记录处理

This commit is contained in:
奔跑的面条
2022-08-16 20:41:41 +08:00
parent 26d249f942
commit 57be88e8aa
7 changed files with 118 additions and 122 deletions
@@ -15,6 +15,8 @@ export const historyActionTypeName = {
[HistoryActionTypeEnum.BOTTOM]: '层级置底',
[HistoryActionTypeEnum.UP]: '层级上移',
[HistoryActionTypeEnum.DOWN]: '层级下移',
[HistoryActionTypeEnum.GROUP]: '创建分组',
[HistoryActionTypeEnum.UN_GROUP]: '解除分组',
[HistoryActionTypeEnum.SELECT_HISTORY]: '选择记录',
[HistoryTargetTypeEnum.CANVAS]: '画布初始化'
+2 -2
View File
@@ -56,10 +56,10 @@ export enum HistoryStackItemEnum {
// 历史记录项类型
export interface HistoryItemType {
// 会有同时操作多个组件场景
[HistoryStackItemEnum.ID]: string | string[]
[HistoryStackItemEnum.ID]: string
[HistoryStackItemEnum.TARGET_TYPE]: HistoryTargetTypeEnum
[HistoryStackItemEnum.ACTION_TYPE]: HistoryActionTypeEnum
[HistoryStackItemEnum.HISTORY_DATA]: CreateComponentType | CreateComponentGroupType | EditCanvasType
[HistoryStackItemEnum.HISTORY_DATA]: CreateComponentType[] | CreateComponentGroupType[] | EditCanvasType[]
}
// 历史 Store 类型
@@ -35,31 +35,26 @@ export const useChartHistoryStore = defineStore({
* @param targetType 对象类型(默认图表)
*/
createStackItem(
item: CreateComponentType | CreateComponentGroupType | EditCanvasType,
item: CreateComponentType[] | CreateComponentGroupType[] | EditCanvasType[],
actionType: HistoryActionTypeEnum,
targetType: HistoryTargetTypeEnum = HistoryTargetTypeEnum.CHART
) {
// 优化性能转为freeze
this.pushBackStackItem(Object.freeze({
[HistoryStackItemEnum.ID]: new Date().getTime().toString(),
[HistoryStackItemEnum.HISTORY_DATA]: item,
[HistoryStackItemEnum.ACTION_TYPE]: actionType,
[HistoryStackItemEnum.TARGET_TYPE]: targetType
} as const))
// 优化性能转为 freeze
this.pushBackStackItem(
Object.freeze({
[HistoryStackItemEnum.ID]: new Date().getTime().toString(),
[HistoryStackItemEnum.HISTORY_DATA]: item,
[HistoryStackItemEnum.ACTION_TYPE]: actionType,
[HistoryStackItemEnum.TARGET_TYPE]: targetType
} as const)
)
},
// * 画布初始化
canvasInit(canvas: EditCanvasType) {
this.createStackItem(
canvas,
HistoryActionTypeEnum.ADD,
HistoryTargetTypeEnum.CANVAS
)
this.createStackItem([canvas], HistoryActionTypeEnum.ADD, HistoryTargetTypeEnum.CANVAS)
},
// * 推入后退栈
pushBackStackItem(
item: HistoryItemType | Array<HistoryItemType>,
notClear = false
): void {
pushBackStackItem(item: HistoryItemType | Array<HistoryItemType>, notClear = false): void {
if (item instanceof Array) this.backStack = [...this.backStack, ...item]
else this.backStack.push(item)
this.backStack.splice(0, this.backStack.length - editHistoryMax)
@@ -69,30 +64,17 @@ export const useChartHistoryStore = defineStore({
},
// * 推入前进栈
pushForwardStack(item: HistoryItemType | Array<HistoryItemType>): void {
if (item instanceof Array)
this.forwardStack = [...this.forwardStack, ...item]
if (item instanceof Array) this.forwardStack = [...this.forwardStack, ...item]
else this.forwardStack.push(item)
},
// * 移出后退栈
popBackStackItem(
index?: number
): HistoryItemType[] | HistoryItemType | undefined {
const length = this.backStack.length
if (index && length >= index) {
return this.backStack.splice(-index)
}
popBackStackItem(): HistoryItemType | undefined {
if (this.backStack.length > 0) {
return this.backStack.pop()
}
},
// * 移出前进栈
popForwardStack(
index?: number
): HistoryItemType[] | HistoryItemType | undefined {
const length = this.forwardStack.length
if (index && length >= index) {
return this.forwardStack.splice(-index)
}
popForwardStack(): HistoryItemType | undefined {
if (this.forwardStack.length > 0) {
return this.forwardStack.pop()
}
@@ -104,7 +86,7 @@ export const useChartHistoryStore = defineStore({
// * 清空后退栈(保留初始化)
clearBackStack() {
const canvasHistory = this.getBackStack[0]
this.backStack = [canvasHistory]
this.backStack = [canvasHistory]
},
// * 撤回
backAction() {
@@ -148,59 +130,43 @@ export const useChartHistoryStore = defineStore({
}
},
// * 新增组件记录
createAddHistory(item: CreateComponentType | CreateComponentGroupType) {
this.createStackItem(
item,
HistoryActionTypeEnum.ADD,
HistoryTargetTypeEnum.CHART
)
createAddHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.ADD, HistoryTargetTypeEnum.CHART)
},
// * 更新属性记录(大小、图表属性)
createUpdateHistory(item: CreateComponentType | CreateComponentGroupType) {
this.createStackItem(
item,
HistoryActionTypeEnum.UPDATE,
HistoryTargetTypeEnum.CHART
)
createUpdateHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.UPDATE, HistoryTargetTypeEnum.CHART)
},
// * 删除组件记录
createDeleteHistory(item: CreateComponentType | CreateComponentGroupType) {
this.createStackItem(
item,
HistoryActionTypeEnum.DELETE,
HistoryTargetTypeEnum.CHART
)
createDeleteHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.DELETE, HistoryTargetTypeEnum.CHART)
},
// * 移动组件记录
createMoveHistory(item: CreateComponentType | CreateComponentGroupType) {
this.createStackItem(
item,
HistoryActionTypeEnum.MOVE,
HistoryTargetTypeEnum.CHART
)
createMoveHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.MOVE, HistoryTargetTypeEnum.CHART)
},
// * 改变层级组件记录
createLayerHistory(
item: CreateComponentType | CreateComponentGroupType,
item: Array<CreateComponentType | CreateComponentGroupType>,
type:
| HistoryActionTypeEnum.TOP
| HistoryActionTypeEnum.DOWN
| HistoryActionTypeEnum.UP
| HistoryActionTypeEnum.BOTTOM
) {
this.createStackItem(
item,
type,
HistoryTargetTypeEnum.CHART
)
this.createStackItem(item, type, HistoryTargetTypeEnum.CHART)
},
// * 剪切组件记录
createPasteHistory(item: CreateComponentType | CreateComponentGroupType) {
this.createStackItem(
item,
HistoryActionTypeEnum.CUT,
HistoryTargetTypeEnum.CHART
)
createPasteHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.CUT, HistoryTargetTypeEnum.CHART)
},
// * 创建分组
createGroupHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.GROUP, HistoryTargetTypeEnum.CHART)
},
// * 解除分组
createUnGroupHistory(item: Array<CreateComponentType | CreateComponentGroupType>) {
this.createStackItem(item, HistoryActionTypeEnum.GROUP, HistoryTargetTypeEnum.CHART)
}
}
})