Skip to content

Commit 017b9b6

Browse files
committed
refactor(属性 hook): 封装通用hook属性修改方法
1 parent eab8880 commit 017b9b6

31 files changed

+191
-173
lines changed

.eslintrc-auto-import.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@
6464
"watchPostEffect": true,
6565
"watchSyncEffect": true
6666
}
67-
}
67+
}

src/components/align.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
* @Author: 秦少卫
33
* @Date: 2022-09-03 19:16:55
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-07-16 15:17:28
5+
* @LastEditTime: 2024-10-07 17:26:59
66
* @Description: 组合元素对齐
77
-->
88

99
<template>
10-
<div v-if="mixinState.mSelectMode === 'multiple'" class="attr-item-box">
10+
<div v-if="isMultiple" class="attr-item-box">
1111
<!-- <h3>对齐</h3> -->
1212
<Divider plain orientation="left"><h4>对齐</h4></Divider>
1313
<div class="bg-item">
@@ -74,7 +74,7 @@ import syIcon from '@/assets/icon/sy.svg';
7474
import centerxIcon from '@/assets/icon/centerx.svg';
7575
import centeryIcon from '@/assets/icon/centery.svg';
7676

77-
const { mixinState, canvasEditor } = useSelect();
77+
const { canvasEditor, isMultiple } = useSelect();
7878

7979
// 左对齐
8080
const left = () => {

src/components/attribute.vue

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<template>
2-
<div class="box" v-if="mixinState.mSelectMode === 'one'">
2+
<div class="box" v-if="isOne">
33
<!-- 通用属性 -->
4-
<div v-show="baseType.includes(mixinState.mSelectOneType)">
4+
<div v-show="isMatchType">
55
<Divider plain orientation="left">{{ $t('attributes.exterior') }}</Divider>
66
<!-- 多边形边数 -->
7-
<Row v-if="mixinState.mSelectOneType === 'polygon'" :gutter="12">
7+
<Row v-if="selectType === 'polygon'" :gutter="12">
88
<Col flex="0.5">
99
<InputNumber
1010
v-model="baseAttr.points.length"
@@ -29,15 +29,7 @@ import useSelect from '@/hooks/select';
2929
import colorSelector from '@/components/colorSelector.vue';
3030
import { getPolygonVertices } from '@/utils/math';
3131
import InputNumber from '@/components/inputNumber';
32-
import { Spin } from 'view-ui-plus';
3332
34-
const update = getCurrentInstance();
35-
const { mixinState, canvasEditor } = useSelect();
36-
37-
const fontsList = ref([]);
38-
canvasEditor.getFontList().then((list) => {
39-
fontsList.value = list;
40-
});
4133
// 通用元素
4234
const baseType = [
4335
'text',
@@ -53,6 +45,15 @@ const baseType = [
5345
'arrow',
5446
'thinTailArrow',
5547
];
48+
49+
const update = getCurrentInstance();
50+
const { selectType, canvasEditor, isOne, isMatchType } = useSelect(baseType);
51+
52+
const fontsList = ref([]);
53+
canvasEditor.getFontList().then((list) => {
54+
fontsList.value = list;
55+
});
56+
5657
// 文字元素
5758
// 通用属性
5859
const baseAttr = reactive({

src/components/attributeBarcode.vue

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,12 @@
22
* @Author: 秦少卫
33
* @Date: 2024-06-06 16:27:21
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-06-07 21:26:22
5+
* @LastEditTime: 2024-10-07 17:30:43
66
* @Description: 条形码插件
77
-->
88

99
<template>
10-
<div
11-
class="box attr-item-box"
12-
v-if="
13-
mixinState.mSelectMode === 'one' && textType.includes(mixinState.mSelectOneType) && isBarcode
14-
"
15-
>
10+
<div class="box attr-item-box" v-if="isOne && isMatchType && isBarcode">
1611
<!-- <h3>字体属性</h3> -->
1712
<Divider plain orientation="left"><h4>条形码属性</h4></Divider>
1813
<div>
@@ -114,10 +109,9 @@ import InputNumber from '@/components/inputNumber';
114109
import { toRaw } from 'vue';
115110

116111
const update = getCurrentInstance();
117-
const { mixinState, canvasEditor } = useSelect();
112+
const { isOne, canvasEditor, isMatchType } = useSelect(['image']);
118113

119114
// 文字元素
120-
const textType = ['image'];
121115
const extensionType = ref('');
122116

123117
const isBarcode = computed(() => extensionType.value === 'barcode');
@@ -150,11 +144,7 @@ const getObjectAttr = (e) => {
150144
// 不是当前obj,跳过
151145
if (e && e.target && e.target !== activeObject) return;
152146
extensionType.value = activeObject?.extensionType || '';
153-
if (
154-
activeObject &&
155-
textType.includes(activeObject.type) &&
156-
activeObject?.extensionType === 'barcode'
157-
) {
147+
if (activeObject && isMatchType && activeObject?.extensionType === 'barcode') {
158148
baseAttr.value = activeObject.get('extension').value;
159149
baseAttr.format = activeObject.get('extension').format;
160150
baseAttr.text = activeObject.get('extension').text;

src/components/attributeBorder.vue

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 10:18:57
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-05-26 22:59:26
5+
* @LastEditTime: 2024-10-07 17:31:43
66
* @Description: 边框
77
-->
88
<template>
9-
<div class="box attr-item-box" v-if="mixinState.mSelectMode === 'one' && !isGroup">
9+
<div class="box attr-item-box" v-if="isOne && !isGroup">
1010
<!-- <h3>边框</h3> -->
1111
<Divider plain orientation="left"><h4>边框</h4></Divider>
1212
<!-- 通用属性 -->
@@ -61,7 +61,7 @@ import useSelect from '@/hooks/select';
6161
import InputNumber from '@/components/inputNumber';
6262

6363
const update = getCurrentInstance();
64-
const { mixinState, canvasEditor } = useSelect();
64+
const { isOne, isGroup, canvasEditor } = useSelect();
6565

6666
const groupType = ['group'];
6767
// 属性值
@@ -146,7 +146,6 @@ const strokeDashList = [
146146
},
147147
];
148148

149-
const isGroup = computed(() => groupType.includes(mixinState.mSelectOneType));
150149
// 属性获取
151150
const getObjectAttr = (e) => {
152151
const activeObject = canvasEditor.canvas.getActiveObject();

src/components/attributeColor.vue

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,13 @@
11
<!--
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 10:59:48
4-
* @LastEditors: June 1601745371@qq.com
5-
* @LastEditTime: 2024-06-20 17:46:45
4+
* @LastEditors: 秦少卫
5+
* @LastEditTime: 2024-10-07 17:32:19
66
* @Description: 渐变
77
-->
88

99
<template>
10-
<div
11-
class="box attr-item-box"
12-
v-if="
13-
mixinState.mSelectMode === 'one' &&
14-
mixinState.mSelectOneType !== 'image' &&
15-
mixinState.mSelectOneType !== 'group'
16-
"
17-
>
10+
<div class="box attr-item-box" v-if="isOne && selectType !== 'image' && selectType !== 'group'">
1811
<Divider plain orientation="left"><h4>颜色</h4></Divider>
1912
<!-- 通用属性 -->
2013
<div class="bg-item">
@@ -40,7 +33,7 @@ import colorPicker from './color-picker';
4033
import { toRaw } from 'vue';
4134

4235
const update = getCurrentInstance();
43-
const { fabric, mixinState, canvasEditor } = useSelect();
36+
const { fabric, selectType, canvasEditor, isOne } = useSelect();
4437
const angleKey = 'gradientAngle';
4538
// 属性值
4639
const baseAttr = reactive({
@@ -52,7 +45,7 @@ const getObjectAttr = (e) => {
5245
const activeObject = canvasEditor.canvas.getActiveObject();
5346
// 不是当前obj,跳过
5447
if (e && e.target && e.target !== activeObject) return;
55-
if (activeObject && mixinState.mSelectMode === 'one') {
48+
if (activeObject && isOne) {
5649
const fill = activeObject.get('fill');
5750
if (typeof fill === 'string') {
5851
baseAttr.fill = fill;

src/components/attributeFont.vue

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 10:35:12
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-05-21 15:43:48
5+
* @LastEditTime: 2024-10-07 17:32:41
66
* @Description: 字体属性
77
-->
88

99
<template>
10-
<div
11-
class="box attr-item-box"
12-
v-if="mixinState.mSelectMode === 'one' && textType.includes(mixinState.mSelectOneType)"
13-
>
10+
<div class="box attr-item-box" v-if="isOne && isMatchType">
1411
<!-- <h3>字体属性</h3> -->
1512
<Divider plain orientation="left"><h4>字体属性</h4></Divider>
1613
<div>
@@ -134,10 +131,11 @@ import { Spin } from 'view-ui-plus';
134131
import InputNumber from '@/components/inputNumber';
135132

136133
const update = getCurrentInstance();
137-
const { mixinState, canvasEditor } = useSelect();
138134

139135
// 文字元素
140136
const textType = ['i-text', 'textbox', 'text'];
137+
const { canvasEditor, isMatchType, isOne } = useSelect(textType);
138+
141139
// 属性值
142140
const baseAttr = reactive({
143141
fontSize: 0,
@@ -173,7 +171,7 @@ const getObjectAttr = (e) => {
173171
const activeObject = canvasEditor.canvas.getActiveObject();
174172
// 不是当前obj,跳过
175173
if (e && e.target && e.target !== activeObject) return;
176-
if (activeObject && textType.includes(activeObject.type)) {
174+
if (activeObject && isMatchType) {
177175
baseAttr.fontSize = activeObject.get('fontSize');
178176
baseAttr.fontFamily = activeObject.get('fontFamily');
179177
baseAttr.lineHeight = activeObject.get('lineHeight');

src/components/attributeId.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 09:53:33
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-05-21 15:36:36
5+
* @LastEditTime: 2024-10-07 17:33:27
66
* @Description: file content
77
-->
88

99
<template>
10-
<div class="box attr-item-box" v-if="mixinState.mSelectMode === 'one'">
10+
<div class="box attr-item-box" v-if="isOne">
1111
<!-- <h3>数据</h3> -->
1212
<Divider plain orientation="left"><h4>数据</h4></Divider>
1313

@@ -46,7 +46,7 @@
4646
import useSelect from '@/hooks/select';
4747

4848
const update = getCurrentInstance();
49-
const { mixinState, canvasEditor } = useSelect();
49+
const { canvasEditor, isOne } = useSelect();
5050

5151
// 属性值
5252
const baseAttr = reactive({

src/components/attributePostion.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 09:23:36
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-05-21 15:37:27
5+
* @LastEditTime: 2024-10-07 17:33:41
66
* @Description: file content
77
-->
88
<template>
9-
<div class="box attr-item-box" v-if="mixinState.mSelectMode === 'one'">
9+
<div class="box attr-item-box" v-if="isOne">
1010
<!-- <h3>位置信息</h3> -->
1111
<Divider plain orientation="left"><h4>位置信息</h4></Divider>
1212
<!-- 通用属性 -->
13-
<div v-show="baseType.includes(mixinState.mSelectOneType)">
13+
<div v-show="isMatchType">
1414
<Row :gutter="10">
1515
<Col flex="1">
1616
<InputNumber
@@ -52,7 +52,6 @@ import useSelect from '@/hooks/select';
5252
import InputNumber from '@/components/inputNumber';
5353

5454
const update = getCurrentInstance();
55-
const { mixinState, canvasEditor } = useSelect();
5655

5756
// 可修改的元素
5857
const baseType = [
@@ -69,6 +68,7 @@ const baseType = [
6968
'arrow',
7069
'thinTailArrow',
7170
];
71+
const { isMatchType, canvasEditor, isOne } = useSelect(baseType);
7272

7373
// 属性值
7474
const baseAttr = reactive({
@@ -85,7 +85,7 @@ const getObjectAttr = (e) => {
8585
const activeObject = canvasEditor.canvas.getActiveObject();
8686
// 不是当前obj,跳过
8787
if (e && e.target && e.target !== activeObject) return;
88-
if (activeObject && baseType.includes(activeObject.type)) {
88+
if (activeObject && isMatchType) {
8989
baseAttr.opacity = activeObject.get('opacity') * 100;
9090
baseAttr.left = activeObject.get('left');
9191
baseAttr.top = activeObject.get('top');

src/components/attributeQrCode.vue

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,12 @@
22
* @Author: 秦少卫
33
* @Date: 2024-06-06 20:04:48
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-06-07 20:56:55
5+
* @LastEditTime: 2024-10-07 17:34:37
66
* @Description: 二维码组件
77
-->
88

99
<template>
10-
<div
11-
class="box attr-item-box"
12-
v-if="
13-
mixinState.mSelectMode === 'one' && textType.includes(mixinState.mSelectOneType) && isQrcode
14-
"
15-
>
10+
<div class="box attr-item-box" v-if="isOne && isMatchType && isQrcode">
1611
<!-- <h3>字体属性</h3> -->
1712
<Divider plain orientation="left"><h4>二位码属性</h4></Divider>
1813
<div>
@@ -145,10 +140,9 @@ import InputNumber from '@/components/inputNumber';
145140
import { toRaw } from 'vue';
146141

147142
const update = getCurrentInstance();
148-
const { mixinState, canvasEditor } = useSelect();
143+
const { canvasEditor, isOne, isMatchType } = useSelect(['image']);
149144

150145
// 文字元素
151-
const textType = ['image'];
152146
const extensionType = ref('');
153147

154148
const isQrcode = computed(() => extensionType.value === 'qrcode');
@@ -174,11 +168,7 @@ const getObjectAttr = (e) => {
174168
// 不是当前obj,跳过
175169
if (e && e.target && e.target !== activeObject) return;
176170
extensionType.value = activeObject?.extensionType || '';
177-
if (
178-
activeObject &&
179-
textType.includes(activeObject.type) &&
180-
activeObject?.extensionType === 'qrcode'
181-
) {
171+
if (activeObject && isMatchType && activeObject?.extensionType === 'qrcode') {
182172
const extension = activeObject.get('extension');
183173
Object.keys(extension).forEach((key) => {
184174
baseAttr[key] = extension[key];

src/components/attributeRounded.vue

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
* @Author: 秦少卫
33
* @Date: 2024-05-21 10:18:57
44
* @LastEditors: 秦少卫
5-
* @LastEditTime: 2024-05-26 22:59:26
5+
* @LastEditTime: 2024-10-07 17:35:31
66
* @Description: 圆角
77
-->
88
<template>
9-
<div
10-
class="box attr-item-box"
11-
v-if="mixinState.mSelectMode === 'one' && rectType.includes(mixinState.mSelectOneType)"
12-
>
9+
<div class="box attr-item-box" v-if="isOne && isMatchType">
1310
<!-- <h3>圆角</h3> -->
1411
<Divider plain orientation="left"><h4>圆角</h4></Divider>
1512
<!-- 通用属性 -->
@@ -44,10 +41,7 @@
4441
import useSelect from '@/hooks/select';
4542

4643
const update = getCurrentInstance();
47-
const { mixinState, canvasEditor } = useSelect();
48-
49-
// 矩形元素
50-
const rectType = ['rect'];
44+
const { canvasEditor, isOne, isMatchType } = useSelect(['rect']);
5145

5246
// 属性值
5347
const baseAttr = reactive({

0 commit comments

Comments
 (0)