From e0909a604449641ebcc6ed15495e6f28515f437c Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 17 十一月 2025 11:07:57 +0800
Subject: [PATCH] 测试完成
---
src/components/SortCheckbox/index.vue | 72 +++++++++++++++++++++++++++--------
1 files changed, 55 insertions(+), 17 deletions(-)
diff --git a/src/components/SortCheckbox/index.vue b/src/components/SortCheckbox/index.vue
index d302d22..a33c5b4 100644
--- a/src/components/SortCheckbox/index.vue
+++ b/src/components/SortCheckbox/index.vue
@@ -48,17 +48,28 @@
name: "OrderedCheckboxGroup",
props: {
options: {
- type: Array,
- default: () => [],
+ type: Array,
+ default: () => [],
+ validator: (value) => {
+ return Array.isArray(value);
+ }
},
value: {
+ type: Array,
+ default: () => [],
+ validator: (value) => {
+ // 鍏佽绌烘暟缁勶紝浣嗗鏋滄槸闈炴暟缁勫�煎垯鍙戝嚭璀﹀憡
+ if (!Array.isArray(value) && value !== null && value !== undefined) {
+ console.warn('value prop should be an array, received:', typeof value);
+ return false;
+ }
+ return true;
+ }
+ },
+ initialselectedOrder: {
type: Array,
default: () => [],
},
- // selectedOrder: {
- // type: Array,
- // default: () => [],
- // },
valueKey: {
type: String,
default: "value",
@@ -83,14 +94,21 @@
value: {
immediate: true,
handler(newVal) {
- if (
- Array.isArray(newVal) &&
- newVal.length > 0 &&
- typeof newVal[0] === "object"
- ) {
+ // 棣栧厛纭繚newVal鏄暟缁勶紝濡傛灉涓嶆槸鍒欒浆鎹负绌烘暟缁�
+ if (!Array.isArray(newVal)) {
+ console.warn(
+ "Expected array for value prop, received:",
+ typeof newVal
+ );
+ this.checkedValues = [];
+ this.selectedOrder = [];
+ return;
+ }
+
+ if (newVal.length > 0 && typeof newVal[0] === "object") {
+ console.log(this.selectedOrder, "111");
// 1. 浼犲叆鐨勬槸瀵硅薄鏁扮粍 [{ sort, preachform, compensateTime }]
- this.checkedValues = newVal.map((item) => item.preachform); // 鎻愬彇 preachform 缁勬垚閫変腑鍊兼暟缁�
- // 鏋勫缓 selectedOrder锛屼紭鍏堜娇鐢ㄤ紶鍏ョ殑 compensateTime锛屽惁鍒欑敤榛樿鍊�
+ this.checkedValues = newVal.map((item) => item.preachform);
this.selectedOrder = newVal.map((item) => ({
value: item.preachform,
compensateTime: item.hasOwnProperty("compensateTime")
@@ -98,10 +116,11 @@
: this.defaultCompensateTime,
}));
} else {
- // 2. 浼犲叆鐨勬槸瀛楃涓叉暟缁� (濡� ["1", "3", "4"]锛屽吋瀹逛箣鍓嶇殑鐢ㄦ硶)
+ // 2. 浼犲叆鐨勬槸瀛楃涓叉暟缁�
if (JSON.stringify(newVal) !== JSON.stringify(this.checkedValues)) {
this.checkedValues = [...newVal];
- // 鏋勫缓鎴栨洿鏂� selectedOrder锛屼繚鐣欏凡鏈夌殑 compensateTime
+ console.log(this.selectedOrder, "222");
+
const newOrder = [];
newVal.forEach((value) => {
const existingItem = this.selectedOrder.find(
@@ -110,9 +129,14 @@
if (existingItem) {
newOrder.push(existingItem);
} else {
+ // 淇hasOwnProperty鏂规硶璋冪敤
+ const existingCompensateTime = this.hasOwnProperty(value);
newOrder.push({
value,
- compensateTime: this.defaultCompensateTime,
+ compensateTime:
+ existingCompensateTime !== false
+ ? existingCompensateTime
+ : this.defaultCompensateTime,
});
}
});
@@ -120,9 +144,10 @@
}
}
},
- deep: true // 寤鸿娣诲姞 deep: true 浠ョ‘淇濆璞℃暟缁勫唴鐨勫彉鍖栬兘琚崟鑾�
+ deep: true,
},
checkedValues(newVal, oldVal) {
+ console.log(this.selectedOrder, "333");
// 澶勭悊閫変腑椤圭殑鍙樺寲
const added = newVal.filter((item) => !oldVal.includes(item));
const removed = oldVal.filter((item) => !newVal.includes(item));
@@ -178,6 +203,19 @@
this.emitChangeEvent();
}
},
+ hasOwnProperty(patfrom) {
+ if (!this.initialselectedOrder || !Array.isArray(this.initialselectedOrder)) {
+ return false;
+ }
+
+ // 浣跨敤find鏂规硶鏌ユ壘鍖归厤鐨勫璞�
+ const foundObject = this.initialselectedOrder.find(
+ (item) => item.preachform === patfrom
+ );
+
+ // 濡傛灉鎵惧埌瀵硅薄锛岃繑鍥炲叾compensateTime锛涘惁鍒欒繑鍥瀎alse
+ return foundObject ? foundObject.compensateTime : false;
+ },
// 鍙戝皠鍙樺寲浜嬩欢
emitChangeEvent() {
// 杞崲鏁版嵁鏍煎紡涓虹埗缁勪欢闇�瑕佺殑鏍煎紡
--
Gitblit v1.9.3