Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
basic-vue-admin
概览
概览
详情
活动
周期分析
版本库
存储库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Basic
basic-vue-admin
Commits
67d514ad
Unverified
提交
67d514ad
authored
1月 18, 2022
作者:
ToQuery
提交者:
GitHub
1月 18, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增 api tree 组件 (#1582)
* tsconfig 增加 types , 解决webstorm提示错误 * api-tree
上级
929141be
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
90 行增加
和
0 行删除
+90
-0
index.ts
src/components/Form/index.ts
+1
-0
componentMap.ts
src/components/Form/src/componentMap.ts
+2
-0
ApiTree.vue
src/components/Form/src/components/ApiTree.vue
+86
-0
index.ts
src/components/Form/src/types/index.ts
+1
-0
没有找到文件。
src/components/Form/index.ts
浏览文件 @
67d514ad
...
...
@@ -9,6 +9,7 @@ export { useForm } from './src/hooks/useForm';
export
{
default
as
ApiSelect
}
from
'./src/components/ApiSelect.vue'
;
export
{
default
as
RadioButtonGroup
}
from
'./src/components/RadioButtonGroup.vue'
;
export
{
default
as
ApiTreeSelect
}
from
'./src/components/ApiTreeSelect.vue'
;
export
{
default
as
ApiTree
}
from
'./src/components/ApiTree.vue'
;
export
{
default
as
ApiRadioGroup
}
from
'./src/components/ApiRadioGroup.vue'
;
export
{
default
as
ApiCascader
}
from
'./src/components/ApiCascader.vue'
;
...
...
src/components/Form/src/componentMap.ts
浏览文件 @
67d514ad
...
...
@@ -24,6 +24,7 @@ import {
import
ApiRadioGroup
from
'./components/ApiRadioGroup.vue'
;
import
RadioButtonGroup
from
'./components/RadioButtonGroup.vue'
;
import
ApiSelect
from
'./components/ApiSelect.vue'
;
import
ApiTree
from
'./components/ApiTree.vue'
;
import
ApiTreeSelect
from
'./components/ApiTreeSelect.vue'
;
import
ApiCascader
from
'./components/ApiCascader.vue'
;
import
{
BasicUpload
}
from
'/@/components/Upload'
;
...
...
@@ -43,6 +44,7 @@ componentMap.set('AutoComplete', AutoComplete);
componentMap
.
set
(
'Select'
,
Select
);
componentMap
.
set
(
'ApiSelect'
,
ApiSelect
);
componentMap
.
set
(
'ApiTree'
,
ApiTree
);
componentMap
.
set
(
'TreeSelect'
,
TreeSelect
);
componentMap
.
set
(
'ApiTreeSelect'
,
ApiTreeSelect
);
componentMap
.
set
(
'ApiRadioGroup'
,
ApiRadioGroup
);
...
...
src/components/Form/src/components/ApiTree.vue
0 → 100644
浏览文件 @
67d514ad
<
template
>
<a-tree
v-bind=
"getAttrs"
@
change=
"handleChange"
>
<template
#[
item
]="
data
"
v-for=
"item in Object.keys($slots)"
>
<slot
:name=
"item"
v-bind=
"data ||
{}">
</slot>
</
template
>
<
template
#
suffixIcon
v-if=
"loading"
>
<LoadingOutlined
spin
/>
</
template
>
</a-tree>
</template>
<
script
lang=
"ts"
>
import
{
computed
,
defineComponent
,
watch
,
ref
,
onMounted
,
unref
}
from
'vue'
;
import
{
Tree
}
from
'ant-design-vue'
;
import
{
isArray
,
isFunction
}
from
'/@/utils/is'
;
import
{
get
}
from
'lodash-es'
;
import
{
propTypes
}
from
'/@/utils/propTypes'
;
import
{
LoadingOutlined
}
from
'@ant-design/icons-vue'
;
export
default
defineComponent
({
name
:
'ApiTree'
,
components
:
{
ATree
:
Tree
,
LoadingOutlined
},
props
:
{
api
:
{
type
:
Function
as
PropType
<
(
arg
?:
Recordable
)
=>
Promise
<
Recordable
>>
},
params
:
{
type
:
Object
},
immediate
:
{
type
:
Boolean
,
default
:
true
},
resultField
:
propTypes
.
string
.
def
(
''
),
},
emits
:
[
'options-change'
,
'change'
],
setup
(
props
,
{
attrs
,
emit
})
{
const
treeData
=
ref
<
Recordable
[]
>
([]);
const
isFirstLoaded
=
ref
<
Boolean
>
(
false
);
const
loading
=
ref
(
false
);
const
getAttrs
=
computed
(()
=>
{
return
{
...(
props
.
api
?
{
treeData
:
unref
(
treeData
)
}
:
{}),
...
attrs
,
};
});
function
handleChange
(...
args
)
{
emit
(
'change'
,
...
args
);
}
watch
(
()
=>
props
.
params
,
()
=>
{
!
unref
(
isFirstLoaded
)
&&
fetch
();
},
{
deep
:
true
},
);
watch
(
()
=>
props
.
immediate
,
(
v
)
=>
{
v
&&
!
isFirstLoaded
.
value
&&
fetch
();
},
);
onMounted
(()
=>
{
props
.
immediate
&&
fetch
();
});
async
function
fetch
()
{
const
{
api
}
=
props
;
if
(
!
api
||
!
isFunction
(
api
))
return
;
loading
.
value
=
true
;
treeData
.
value
=
[];
let
result
;
try
{
result
=
await
api
(
props
.
params
);
}
catch
(
e
)
{
console
.
error
(
e
);
}
loading
.
value
=
false
;
if
(
!
result
)
return
;
if
(
!
isArray
(
result
))
{
result
=
get
(
result
,
props
.
resultField
);
}
treeData
.
value
=
(
result
as
Recordable
[])
||
[];
isFirstLoaded
.
value
=
true
;
emit
(
'options-change'
,
treeData
.
value
);
}
return
{
getAttrs
,
loading
,
handleChange
};
},
});
</
script
>
src/components/Form/src/types/index.ts
浏览文件 @
67d514ad
...
...
@@ -91,6 +91,7 @@ export type ComponentType =
|
'Select'
|
'ApiSelect'
|
'TreeSelect'
|
'ApiTree'
|
'ApiTreeSelect'
|
'ApiRadioGroup'
|
'RadioButtonGroup'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论