You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
/*
|
|
* @Author: donghao donghao@supervision.ltd
|
|
* @Date: 2024-08-06 16:50:48
|
|
* @LastEditors: donghao donghao@supervision.ltd
|
|
* @LastEditTime: 2024-08-06 17:07:30
|
|
* @FilePath: \General-AI-Platform-Web-Client\src\hooks\select.ts
|
|
* @Description: useSelect 类型待优化
|
|
*/
|
|
import { inject, onBeforeMount, onMounted, reactive } from "vue";
|
|
import { SelectEvent, SelectMode, SelectOneType } from "@/utils/event/types";
|
|
|
|
interface Selector {
|
|
mSelectMode: SelectMode;
|
|
mSelectOneType: SelectOneType;
|
|
mSelectId: string[] | "";
|
|
mSelectIds: string[];
|
|
mSelectActive: unknown[];
|
|
}
|
|
|
|
export default function useSelect() {
|
|
const state = reactive<Selector>({
|
|
mSelectMode: SelectMode.EMPTY,
|
|
mSelectOneType: SelectOneType.EMPTY,
|
|
mSelectId: "", // 选择id
|
|
mSelectIds: [], // 选择id
|
|
mSelectActive: []
|
|
});
|
|
|
|
const fabric = inject("fabric");
|
|
// const canvas = inject('canvas');
|
|
const canvasEditor = inject("canvasEditor");
|
|
const event = inject("event");
|
|
|
|
const selectOne = e => {
|
|
state.mSelectMode = SelectMode.ONE;
|
|
state.mSelectId = e[0].id;
|
|
state.mSelectOneType = e[0].type;
|
|
state.mSelectIds = e.map(item => item.id);
|
|
};
|
|
|
|
const selectMulti = e => {
|
|
state.mSelectMode = SelectMode.MULTI;
|
|
state.mSelectId = "";
|
|
state.mSelectIds = e.map(item => item.id);
|
|
};
|
|
|
|
const selectCancel = () => {
|
|
state.mSelectId = "";
|
|
state.mSelectIds = [];
|
|
state.mSelectMode = SelectMode.EMPTY;
|
|
state.mSelectOneType = SelectOneType.EMPTY;
|
|
};
|
|
|
|
onMounted(() => {
|
|
event.on(SelectEvent.ONE, selectOne);
|
|
event.on(SelectEvent.MULTI, selectMulti);
|
|
event.on(SelectEvent.CANCEL, selectCancel);
|
|
});
|
|
|
|
onBeforeMount(() => {
|
|
event.off(SelectEvent.ONE, selectOne);
|
|
event.off(SelectEvent.MULTI, selectMulti);
|
|
event.off(SelectEvent.CANCEL, selectCancel);
|
|
});
|
|
|
|
return {
|
|
fabric,
|
|
// canvas,
|
|
canvasEditor,
|
|
mixinState: state
|
|
};
|
|
}
|