瀏覽代碼

feat:工单受理新增事件分类;新增事件分类管理;

zhangchong 1 年之前
父節點
當前提交
2def646ee9
共有 1 個文件被更改,包括 40 次插入22 次删除
  1. 40 22
      src/views/auxiliary/eventClass/index.vue

+ 40 - 22
src/views/auxiliary/eventClass/index.vue

@@ -79,17 +79,35 @@ const SelectionCell: FunctionalComponent<SelectionCellProps> = ({ value, interme
 	return <ElCheckbox onChange={onChange} modelValue={value} indeterminate={intermediate} />;
 };
 // 递归改变选中状态
-const changeChecked = (obj: any, value: string | number | boolean) => {
-	if (!obj) return;
-	if (obj.children && obj.children.length) {
-		obj.children.forEach((v: any) => {
-			v.checked = value;
-			if (obj.children && obj.children.length) {
-				changeChecked(v.children, value);
-				return (v.checked = value);
-			}
-		});
-	}
+const changeChecked = (arr: unknown, value: string | number | boolean) => {
+	if (!arr || !arr.length || !Array.isArray(arr)) return;
+	arr.forEach((v: any) => {
+		v.checked = value;
+		if (v.children && v.children.length) {
+			changeChecked(v.children, value);
+		}
+		return (v.checked = value);
+	});
+};
+// 递归判断全部选中
+const isAllCheck = (arr: unknown) => {
+	if (!arr || !arr.length || !Array.isArray(arr)) return false;
+	return arr.every((v: any) => {
+		if (v.checked) return true;
+		if (v.children && v.children.length) {
+			return isAllCheck(v.children);
+		}
+	});
+};
+// 递归判断是否有选中
+const isCheck = (arr: unknown) => {
+	if (!arr || !arr.length || !Array.isArray(arr)) return false;
+	return arr.some((v: any) => {
+		if (v.checked) return true;
+		if (v.children && v.children.length) {
+			return isCheck(v.children);
+		}
+	});
 };
 // 定义变量内容
 const state = reactive<any>({
@@ -106,21 +124,21 @@ const state = reactive<any>({
 			width: 50,
 			cellRenderer: ({ rowData }) => {
 				const onChange = (value: CheckboxValueType) => {
-					console.log(rowData);
-					// changeChecked(rowData, value);
-					return (rowData.checked = value);
+					rowData.checked = value;
+					return changeChecked(rowData.children, value);
 				};
-				return <SelectionCell value={rowData.checked} onChange={onChange} />;
+				const containsChecked = isCheck(rowData.children);
+				const allSelected = isAllCheck(rowData.children);
+				return <SelectionCell value={rowData.checked || allSelected} intermediate={containsChecked && !allSelected} onChange={onChange} />;
 			},
 			headerCellRenderer: () => {
 				const _data = unref(state.tableData);
-				const onChange = (value: CheckboxValueType) =>
-					(state.tableData = _data.map((row) => {
-						row.checked = value;
-						return row;
-					}));
-				const allSelected = _data.every((row) => row.checked);
-				const containsChecked = _data.some((row) => row.checked);
+				const onChange = (value: CheckboxValueType) => {
+					return changeChecked(_data, value);
+				};
+
+				const allSelected = isAllCheck(_data);
+				const containsChecked = isCheck(_data);
 
 				return <SelectionCell value={allSelected} intermediate={containsChecked && !allSelected} onChange={onChange} />;
 			},