Browse Source

feat:[模板管理][checkbox-tree]

ouqian
luojie 1 month ago
parent
commit
897e1348cb
1 changed files with 106 additions and 43 deletions
  1. +106
    -43
      src/components/Template/HandleFormItem.vue

+ 106
- 43
src/components/Template/HandleFormItem.vue View File

@ -54,20 +54,20 @@
<div v-for="group in item.options" :key="group.value" class="checkbox-tree-group">
<el-checkbox :label="group.value" :disabled="getDisabled()"
:value="getCheckboxTreeChecked(group.value)"
@change="onCheckboxTreeChange(group.value, $event)">
:indeterminate="getCheckboxTreeIndeterminate(group.value)"
@change="onCheckboxTreeParentChange(group, $event)">
{{ group.label }}
</el-checkbox>
<div v-if="group.children && group.children.length > 0" class="checkbox-tree-children">
<div v-for="child in group.children" :key="child.value" class="checkbox-tree-item">
<el-checkbox :label="child.value" :disabled="getDisabled()"
:value="getCheckboxTreeChecked(child.value)"
@change="onCheckboxTreeChange(child.value, $event)">
@change="onCheckboxTreeChildChange(group, child.value, $event)">
{{ child.label }}
</el-checkbox>
<div v-if="(child.value === '样品信息' || child.value === '其他') && isCheckboxTreeChecked(child.value)"
class="checkbox-tree-input-container">
<el-input v-model="inputValue.otherValues[child.value]"
:class="{ 'error-border': isCheckboxTreeOtherInputError(child.value) }"
placeholder="请输入" @blur="onCheckboxTreeOtherBlur(child.value, $event)" />
</div>
</div>
@ -944,50 +944,113 @@ export default {
return !!o.checked;
},
// checkboxTree
onCheckboxTreeChange(value, checked) {
this.currentHandleType = 'checkboxTreeCheckbox';
this.currentCheckboxTreeValue = value;
// checkedValues
// checkedItem
getOrCreateCheckedItem(value) {
let checkedItem = this.inputValue.checkedValues.find(item => item.label === value);
if (!checkedItem) {
checkedItem = { label: value, checked: false };
this.inputValue.checkedValues.push(checkedItem);
}
return checkedItem;
},
if (checked) {
checkedItem.checked = true;
//
this.checkParentIfNeeded(value);
} else {
// false
checkedItem.checked = false;
// otherValues
delete this.inputValue.otherValues[value];
// checkbox
onCheckboxTreeParentChange(group, checked) {
this.currentHandleType = 'checkboxTreeCheckbox';
this.currentCheckboxTreeValue = group.value;
//
const parentItem = this.getOrCreateCheckedItem(group.value);
parentItem.checked = checked;
//
if (group.children && group.children.length > 0) {
group.children.forEach(child => {
const childItem = this.getOrCreateCheckedItem(child.value);
childItem.checked = checked;
// otherValues
if (!checked) {
delete this.inputValue.otherValues[child.value];
}
});
}
this.onCommonHandleSaveRecord();
},
//
checkParentIfNeeded(childValue) {
//
if (this.item && this.item.options) {
for (const group of this.item.options) {
if (group.children && group.children.length > 0) {
// childValuegroupchildren
const childExists = group.children.some(child => child.value === childValue);
if (childExists) {
//
let parentItem = this.inputValue.checkedValues.find(item => item.label === group.value);
if (!parentItem) {
//
parentItem = { label: group.value, checked: true };
this.inputValue.checkedValues.push(parentItem);
} else if (!parentItem.checked) {
//
parentItem.checked = true;
}
break;
}
}
// checkbox
onCheckboxTreeChildChange(group, childValue, checked) {
this.currentHandleType = 'checkboxTreeCheckbox';
this.currentCheckboxTreeValue = childValue;
//
const childItem = this.getOrCreateCheckedItem(childValue);
childItem.checked = checked;
// otherValues
if (!checked) {
delete this.inputValue.otherValues[childValue];
}
//
this.updateParentState(group);
this.onCommonHandleSaveRecord();
},
//
updateParentState(group) {
if (!group.children || group.children.length === 0) return;
const parentItem = this.getOrCreateCheckedItem(group.value);
const childValues = group.children.map(child => child.value);
//
let checkedCount = 0;
let totalCount = childValues.length;
childValues.forEach(childValue => {
const childItem = this.inputValue.checkedValues.find(item => item.label === childValue);
if (childItem && childItem.checked) {
checkedCount++;
}
});
//
if (checkedCount === 0) {
//
parentItem.checked = false;
} else if (checkedCount === totalCount) {
//
parentItem.checked = true;
}
// indeterminate
},
//
getCheckboxTreeIndeterminate(groupValue) {
if (!this.inputValue || !this.inputValue.checkedValues) {
return false;
}
// group
const group = this.item.options.find(opt => opt.value === groupValue);
if (!group || !group.children || group.children.length === 0) {
return false;
}
const childValues = group.children.map(child => child.value);
let checkedCount = 0;
childValues.forEach(childValue => {
const childItem = this.inputValue.checkedValues.find(item => item.label === childValue);
if (childItem && childItem.checked) {
checkedCount++;
}
});
//
return checkedCount > 0 && checkedCount < childValues.length;
},
// checkboxTree
@ -1053,7 +1116,7 @@ export default {
const oldItem = oldCheckedValues.find(item => item.label === currentCheckboxTreeValue);
const o = {
"checkboxTreeCheckbox": { oldValue: oldItem, newValue: newItem, des: "" },
"checkboxTreeOther": { oldValue: oldOtherValues[currentCheckboxTreeValue], newValue: otherValues[currentCheckboxTreeValue], des: "样品信息:" },
"checkboxTreeOther": { oldValue: oldOtherValues[currentCheckboxTreeValue], newValue: otherValues[currentCheckboxTreeValue], des: `${currentCheckboxTreeValue}` },
}
return o[currentHandleType];
},
@ -1121,7 +1184,7 @@ export default {
} else if (this.type === "checkboxTree") {
const current = this.getCheckboxTreeInfo();
const { oldValue, newValue } = current;
if (this.currentHandleType === "checkboxTreeCheckbox") {
if (currentHandleType === "checkboxTreeCheckbox") {
isSame = this.isEqual(oldValue.checked, newValue.checked);
isOldValueEmpty = isValueEmpty(oldValue.checked);
} else {
@ -1214,8 +1277,8 @@ export default {
recordValue = `${newValue.label || ''}:${newValue.checked ? '勾选' : '未勾选'}`;
isModify = newValue.checked !== undefined;
} else {
recordOldVlaue = current.oldValue;
recordValue = current.newValue;
recordOldVlaue = `${current.des + current.oldValue}`;
recordValue = `${current.des + current.newValue}`;
isModify = !!current.oldValue;
}
}

Loading…
Cancel
Save