|
@@ -9,13 +9,17 @@
|
|
|
>
|
|
|
<el-form-item label="上级物料组" prop="parentId">
|
|
|
<el-tree-select
|
|
|
+ ref="treeSelectRef"
|
|
|
+ filterable
|
|
|
v-model="formData.parentId"
|
|
|
:data="materialGroupTree"
|
|
|
:props="defaultProps"
|
|
|
+ :default-expanded-keys="firstLevelKeys"
|
|
|
check-strictly
|
|
|
- default-expand-all
|
|
|
+ clearable
|
|
|
placeholder="请选择上级物料组"
|
|
|
value-key="id"
|
|
|
+ @filter="handleFilter"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="物料组名称" prop="name">
|
|
@@ -72,14 +76,18 @@ const formRules = reactive<FormRules>({
|
|
|
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
|
|
})
|
|
|
const formRef = ref() // 表单 Ref
|
|
|
-const materialGroupTree = ref() // 树形结构
|
|
|
+const materialGroupTree = ref<Tree[]>([]) // 树形结构
|
|
|
+const firstLevelKeys = ref<Tree[]>([])
|
|
|
+
|
|
|
+const treeSelectRef = ref()
|
|
|
|
|
|
/** 打开弹窗 */
|
|
|
-const open = async (type: string, id?: number) => {
|
|
|
+const open = async (type: string, id?: number, parentId: number) => {
|
|
|
dialogVisible.value = true
|
|
|
dialogTitle.value = t('action.' + type)
|
|
|
formType.value = type
|
|
|
resetForm()
|
|
|
+ formData.value.parentId = parentId
|
|
|
// 修改时,设置数据
|
|
|
if (id) {
|
|
|
formLoading.value = true
|
|
@@ -120,6 +128,21 @@ const submitForm = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+const handleFilter = (val: string) => {
|
|
|
+ // 当筛选值清空时重置展开状态
|
|
|
+ if (val === '') {
|
|
|
+ nextTick(() => {
|
|
|
+ const treeComponent = treeSelectRef.value?.treeRef
|
|
|
+ if (treeComponent) {
|
|
|
+ // 重置到初始展开状态
|
|
|
+ treeComponent.setExpandedKeys(firstLevelKeys.value)
|
|
|
+ // 滚动到顶部确保可视区域正确
|
|
|
+ treeComponent.scrollTo({ top: 0 })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/** 重置表单 */
|
|
|
const resetForm = () => {
|
|
|
formData.value = {
|
|
@@ -137,8 +160,18 @@ const resetForm = () => {
|
|
|
const getTree = async () => {
|
|
|
materialGroupTree.value = []
|
|
|
const data = await MaterialGroupApi.getSimpleMaterialGroupList()
|
|
|
- let materialGroup: Tree = { id: 0, name: '顶级物料组', children: [] }
|
|
|
- materialGroup.children = handleTree(data)
|
|
|
- materialGroupTree.value.push(materialGroup)
|
|
|
+ // let materialGroup: Tree = { id: 0, name: '顶级物料组', children: [] }
|
|
|
+ // materialGroup.children = handleTree(data)
|
|
|
+ // materialGroupTree.value.push(materialGroup)
|
|
|
+ // firstLevelKeys.value = materialGroupTree.value.map(node => node.id);
|
|
|
+
|
|
|
+ // 构建稳定的顶级节点
|
|
|
+ const rootNode = {
|
|
|
+ id: 0,
|
|
|
+ name: '物料组分类',
|
|
|
+ children: handleTree(data)
|
|
|
+ }
|
|
|
+ materialGroupTree.value = [rootNode]
|
|
|
+ firstLevelKeys.value = [rootNode.id]
|
|
|
}
|
|
|
</script>
|