Просмотр исходного кода

myapp修复恢复默认失效问题

Signed-off-by: 公司职务微信QQ领英 <7730191+oaimisgnay@user.noreply.gitee.com>
公司职务微信QQ领英 2 лет назад
Родитель
Сommit
7305d831d4
2 измененных файлов с 24 добавлено и 2 удалено
  1. 21 0
      Web/src/utils/arrayOperation.ts
  2. 3 2
      Web/src/views/home/widgets/index.vue

+ 21 - 0
Web/src/utils/arrayOperation.ts

@@ -63,3 +63,24 @@ export function removeDuplicate(arr: EmptyArrayType, attr?: string) {
 		}
 	}
 }
+/* 数组、对象深拷贝
+ * @param value 需要拷贝内容
+ * @returns
+ */
+export const clone = <T>(value: T): T => {
+	if (!value) return value
+
+	// 数组
+	if (Array.isArray(value)) return value.map((item) => clone(item)) as unknown as T
+
+	// 普通对象
+	if (typeof value === 'object') {
+		return Object.fromEntries(
+			Object.entries(value).map(([k, v]: [string, any]) => {
+				return [k, clone(v)];
+			})
+		) as unknown as T
+	}
+	// 基本类型
+	return value
+}

+ 3 - 2
Web/src/views/home/widgets/index.vue

@@ -110,6 +110,7 @@
 <script setup lang="ts">
 import { ref, reactive, computed, onMounted, nextTick } from 'vue';
 import draggable from 'vuedraggable';
+import { clone } from '/@/utils/arrayOperation';
 import allComps from './components/index';
 import { Local } from '/@/utils/storage';
 
@@ -125,7 +126,7 @@ const defaultGrid = ({
 const customizing = ref<boolean>(false);
 const allCompsList = ref(allComps);
 const widgetsRef = ref<HTMLElement | null>(null);
-const grid = ref<Grid>({ ...defaultGrid });
+const grid = ref<Grid>(clone(defaultGrid));
 
 onMounted(() => {
 	const savedGrid = Local.get('grid');
@@ -202,7 +203,7 @@ const save = () => {
 const backDefault = () => {
 	customizing.value = false;
 	widgetsRef.value?.style.removeProperty('transform');
-	grid.value = JSON.parse(JSON.stringify(defaultGrid));
+	grid.value = clone(defaultGrid);
 	Local.remove('grid');
 };