Commit da4a5a83 by fanyj

资产打标签

parent 60b94136
const outUrl:string = '/center-home';
const appUrl:string = '/center-home';
const Api:string = '/api';
const inapp:boolean = false;//内网true;外网false
const baseUrl = inapp?appUrl:outUrl;
export default {
baseUrl:baseUrl,
BaseURL: baseUrl,
inapp:inapp,
headerstring:'Basic ZGVtb3Rlc3Q6ZGVtb3Rlc3Q=',
page:{
index:`${baseUrl}/menu/index`,
indexpage:'/menu/index',
loginpage: inapp?'/api/auth/login':`${baseUrl}/view/login`,
workpage:'/view/task',
jdbc:'/view/jdbcmanage',
homeIndex: `${baseUrl}/view`,
roleTree: `${baseUrl}/view/roleTree`,
rolemanage: `${baseUrl}/view/rolemanage`,
metadetail:`${baseUrl}/metadetail`,
metadotheretail:`${baseUrl}/staticmeta/detail`,
standardmanage:`${baseUrl}/menu/datastandard`,
indecatormanage:`${baseUrl}/menu/dataindicator`,
taggermanage:`${baseUrl}/menu/datatagger`,
relationpage:`${baseUrl}/menu/sourcemap`,
catalogpage:`${baseUrl}/menu/domain`,
systempage:`${baseUrl}/menu/datasys`,
questionpage:`${baseUrl}/menu/myquestion`,
modelpage:`${baseUrl}/menu/data-model`,
noticepage:`${baseUrl}/menu/systemnotice`,
assertspage:`${baseUrl}/menu/asset-1104-manage`,
assetssource:`${baseUrl}/menu/asset-resource-browse`,//资源
asserts:`${baseUrl}/menu/asset-browse`,//资产,
assetmap:`${baseUrl}/menu/asset-map`,
},
api:{
houseinfo:`${Api}`,
api:`${Api}`,
standard:`${Api}/standard`,
authservice:`${Api}/authservice`,
singin: `${Api}/auth/signin`,
signout: `${Api}/auth/signout`,
users: `${Api}/authservice/users/:userId/domains`,
sessionInfo: `${Api}/auth/sessionInfo`,
userupdate: `${Api}/authservice/users/`,
jdbcmanage: `${Api}/metadataharvester/rest/targetConfig/jdbc`,
sysjdbcmanage: `${Api}/metadataharvester/rest/targetConfig/system/jdbc`,
harveJdbcmanage: `${Api}/metadataharvester/rest/harvestingTarget/jdbc`,
taskResult: `${Api}/metadataharvester/rest/taskResult`,
task: `${Api}/metadataharvester/rest/task`,
role: `${Api}/datacatalog/roleCtrl`,
management: `${Api}/datacatalog/management`,
domains: `${Api}/authservice/domains`,
roleUser: `${Api}/authservice/roles`,
usersRoles: `${Api}/authservice/users`,
dataqualityapi: `${Api}/dataqualityapi`,
dataq:`${Api}/dataq`,
label: `${Api}/tagmanager`,
metaRepo: `${Api}/metadatarepo`,
metaHarvest:`${Api}/metadataharvester`,
information: `${Api}/informationmanagement`,
questionfeedback:`${Api}/questionfeedback`,
fileCatalog: `${Api}/informationmanagement/rest/fileCatalog`,
fileInformation: `${Api}/informationmanagement/rest/fileInformation`,
dataInformation: `${Api}/informationmanagement/rest/dataInformation`,
issuetrack: `${Api}/questionfeedback/rest/issuetrack`,
questionInfo: `${Api}/questionfeedback/rest/questionInfo`,
report: `${Api}/portal/report`,
nodeRelation: `${Api}/metadatarepo/rest/nodeRelation`,
interfaceLog:`${Api}/auditlogger/interfaceLogCtrl`,
finder: `${Api}/finder`,
asset:`${Api}/dataassetmanager`,
metadataRelation: `${Api}/metadatarelation`,
tagger: `${Api}/tagger`,
customertag: `${Api}/customertag`,
datamodeler: `${Api}/datamodeler`,
indicatorrule:`${Api}/indicatorrule`,
accesspolicymanager: `${Api}/accesspolicymanager`,
dataquality: `${Api}/dataquality`,
activiti:`${Api}/activiti`,
dataculture:`${Api}/dataculture`,
indicator:`${Api}/index`,
dataservice:`${Api}/dataservice`,
pdataservice:`${Api}/pdataservice`,
sttagger:`${Api}/sttagger`,
notice:`${Api}/notice`,
workorder:`${Api}/governworkorder`
}
}
export const colors = {
primary: '#ffbc0c',
secondary: '#db0007'
}
\ No newline at end of file
import request from "../util/request";
import config from "../commons";
import qs from "qs";
const {
api: { tagger },
} = config
export function loadTagCatalogTree(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/loadTagCatalogTree`, method: "get", data: data },
successdo,
errordo
)
}
export function getSupportTagForm(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/getSupportTagForm`, method: "get", data: data },
successdo,
errordo
)
}
export function saveTag(isDefault, data, successdo, errordo) {
request(
{ url: `${tagger}/tag/saveTag?isDefault=${isDefault}`, method: "post", data: data },
successdo,
errordo
)
}
export function deleteTag(id, successdo, errordo) {
request(
{ url: `${tagger}/tag/deleteTag?id=${id}`, method: "delete", data: null },
successdo,
errordo
)
}
export function getTagByKeywordAndCreator(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/getTagByKeywordAndCreator`, method: "get", data: data },
successdo,
errordo
)
}
export function getTagDataById(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/getTagDataById`, method: "get", data: data },
successdo,
errordo
)
}
export function batchAddTagResource(data, successdo, errordo) {
request(
{ url: `${tagger}/tagResource/batchAddTagResource`, method: "post", data: qs.stringify(data) },
successdo,
errordo
)
}
export function newbatchAddTagResource(data, successdo, errordo) {
request(
{ url: `${tagger}/tagResource/batchAddTagResourceMultiTags`, method: "post", data: qs.stringify(data) },
successdo,
errordo
)
}
export function deleteTagResource(data, successdo, errordo) {
request(
{ url: `${tagger}/tagResource/deleteTagResource?esIds=${data}`, method: "delete", data: null },
successdo,
errordo
)
}
export function getResourceTagIn(data, successdo, errordo) {
request(
{ url: `${tagger}/tagResource/getResourceTagIn`, method: "post", data: qs.stringify(data) },
successdo,
errordo
)
}
//通过条件分页获取挂靠资源
export function getTagResourceDataPage(data, successdo, errordo) {
request(
{ url: `${tagger}/tagResource/getTagResourceDataPage`, method: "get", data: data },
successdo,
errordo
)
}
export function getSupportCatalogForm(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/getSupportCatalogForm`, method: "get", data: data },
successdo,
errordo
)
}
export function saveTagCatalog(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/saveTagCatalog`, method: "post", data: data },
successdo,
errordo
)
}
export function getCatalogById(data, successdo, errordo) {
request(
{ url: `${tagger}/tag/getCatalogById`, method: "get", data: data },
successdo,
errordo
)
}
export function deleteCatalog(id, successdo, errordo) {
request(
{ url: `${tagger}/tag/deleteCatalog?id=${id}`, method: "delete", data: null },
successdo,
errordo
)
}
\ No newline at end of file
import axios from "axios"
import pathToRegexp from "path-to-regexp"
import { message } from "antd"
import config from "../commons"
const {page:{loginpage}} =config
axios.interceptors.request.use(
config => {
config.headers.common['WWW-Authenticate']=null;
return config;
},
err => {
return Promise.reject(err);
});
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response) {
switch (error.response.status) {
case 401:
const config = {
content:"身份信息已过期,正在重新验证……",
key:'logout'
}
message.warning(config)
window.location.href=loginpage
}
}
return Promise.reject(error.response.data) // 返回接口返回的错误信息
}
);
const fetch = options => {
let { method = "get", data, url, config, ...opts } = options
try {
// const match = pathToRegexp.parse(url)
url = pathToRegexp.compile(url)(data)
// match.forEach(item => {
// if (item instanceof Object && data[item.name]) {
// delete data[item.name]
// }
// })
// For Ugly IE 304, Must add timestamp
// url = url + `?t=${Date.now()}`
} catch (e) {
//message.error(e.message)
}
switch (method.toLowerCase()) {
case "get":
return axios.get(
url,
{
params: data,
},
config
)
case "delete":
return axios.delete(
url,
{
data: data,
},
config
)
case "post":
return axios.post(url, data, config)
case "put":
return axios.put(url, data, config)
case "patch":
return axios.patch(url, data, config)
default:
return axios(options)
}
}
export default function request(options, successdo, errordo) {
fetch(options)
.then(response => {
//console.log(response)
if(response.status==302){
console.log('redirect')
window.location.reload();
}
//console.log("finish success try")
if(successdo)
successdo(response)
else
message.success('操作成功')
})
.catch(error => {
//console.log('try throw 302')
//console.log(error)
//console.log(error.response)
if(errordo)
errordo(error)
})
}
...@@ -18,6 +18,7 @@ import { FullScreenSvg, CancelFullScreenSvg } from './AssetSvg'; ...@@ -18,6 +18,7 @@ import { FullScreenSvg, CancelFullScreenSvg } from './AssetSvg';
import AssetDeleteModal from './AssetDeleteModal'; import AssetDeleteModal from './AssetDeleteModal';
import { AppContext, appId } from "../../../../App"; import { AppContext, appId } from "../../../../App";
import StartFlowModal from "./StartFlow"; import StartFlowModal from "./StartFlow";
import TagColumnConnect from "../../Tag";
import "./AssetTable.less"; import "./AssetTable.less";
import 'react-contexify/dist/ReactContexify.css'; import 'react-contexify/dist/ReactContexify.css';
...@@ -172,6 +173,8 @@ const AssetTable = (props) => { ...@@ -172,6 +173,8 @@ const AssetTable = (props) => {
const [currentTemplateType, setTemplateType] = useState() const [currentTemplateType, setTemplateType] = useState()
const [sorter, setSorter] = useState() const [sorter, setSorter] = useState()
const [elements, setElements] = useState() const [elements, setElements] = useState()
const [mouseEnterKey,setMouseEnterKey] = useState(null)
const [tableReload,setTableReload] = useState(null)
const [ modal, contextHolder ] = Modal.useModal(); const [ modal, contextHolder ] = Modal.useModal();
const anchorId = getQueryParam(AnchorId, props?.location?.search); const anchorId = getQueryParam(AnchorId, props?.location?.search);
...@@ -186,6 +189,8 @@ const AssetTable = (props) => { ...@@ -186,6 +189,8 @@ const AssetTable = (props) => {
const app = useContext(AppContext) const app = useContext(AppContext)
console.log(app)
const actionCol = { const actionCol = {
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
...@@ -215,9 +220,42 @@ const AssetTable = (props) => { ...@@ -215,9 +220,42 @@ const AssetTable = (props) => {
} }
} }
const tagColumns={
title:"标签",
key:"tag",
dataIndex:"tag",
width:200,
onCell:(record)=>{
return ({
onMouseEnter: (event) => {
setMouseEnterKey(record._id);
},
onMouseLeave: (event) => {
setMouseEnterKey(null);
},
})
},
render:(_,record)=>{
const payload = {id:record.id,type:'dataAsset',reload:tableReload,creator:app.user.userName}
console.log('payload',payload)
return (record._id===mouseEnterKey)?<TagColumnConnect {...{...payload,styleType:'complex'}} />:<TagColumnConnect {...payload} />
}
}
useEffect(() => { useEffect(() => {
if (TableWidth>0 && columns.length>0 && (elements??[]).length>0) { if (TableWidth>0 && columns.length>0 && (elements??[]).length>0) {
const newColumns = [...columns??[]]; const newColumns = [...columns??[]].map((column)=>{
return ({...column,onCell:(record)=>{
return({
onClick: (e) => {
setSelectItem(record);
onSelect && onSelect(record?.id, record?.dirId);
setAssetDetailDrawerVisible(true);
},
})
}})
});
const currentWidth = (newColumns.reduce((preVal, col) => (col.width?col.width:0) + preVal, 0)) + 32.0; const currentWidth = (newColumns.reduce((preVal, col) => (col.width?col.width:0) + preVal, 0)) + 32.0;
newColumns.forEach(column => { newColumns.forEach(column => {
...@@ -238,12 +276,12 @@ const AssetTable = (props) => { ...@@ -238,12 +276,12 @@ const AssetTable = (props) => {
} }
}) })
setRealColumns([...newColumns, <Column key='auto' />]); setRealColumns([...newColumns,tagColumns, <Column key='auto' />]);
} else { } else {
setRealColumns([]); setRealColumns([]);
} }
}, [columns, TableWidth, elements, users]) }, [columns, TableWidth, elements, users, mouseEnterKey, tableReload])
useEffect(() => { useEffect(() => {
getUsers(); getUsers();
...@@ -1165,12 +1203,6 @@ const AssetTable = (props) => { ...@@ -1165,12 +1203,6 @@ const AssetTable = (props) => {
onRow={(record) => { onRow={(record) => {
return { return {
id: `data-asset-${record?.id}`, id: `data-asset-${record?.id}`,
onClick: (e) => {
setSelectItem(record);
onSelect && onSelect(record?.id, record?.dirId);
setAssetDetailDrawerVisible(true);
},
onContextMenu: event => { onContextMenu: event => {
// if ((reference===AssetManageReference||(reference===AssetBrowseReference&&record.hasPermission)) && (record.resourceState==='uncombed'||record.resourceState==='notRelatedAsset')) { // if ((reference===AssetManageReference||(reference===AssetBrowseReference&&record.hasPermission)) && (record.resourceState==='uncombed'||record.resourceState==='notRelatedAsset')) {
// setContextMenuItem(record); // setContextMenuItem(record);
......
import React, { useState, useRef, useEffect } from 'react';
import { Modal, Button, AutoComplete, Input, Avatar, Tooltip, message, Form, TreeSelect } from 'antd';
import { connect } from "react-redux";
import { getTagByKeywordAndCreator, batchAddTagResource, getSupportTagForm, saveTag,newbatchAddTagResource } from '../../../../service/TagService';
import './AddTagModal.less';
import TreeSelectItem from './TreeSelectItem';
const { TextArea } = Input;
const AddTagModal = (props) => {
const { visible, onCancel, id, type, creator,callback } = props;
const [form] = Form.useForm();
const [ step, setStep ] = useState(0);
const [ keyword, setKeyword ] = useState('');
const [ selectTag, setSelectTag ] = useState(null);
const [ matchTags, setMatchTags ] = useState([]);
const [ options, setOptions ] = useState();
const [ confirmLoading, setConfirmLoading ] = useState(false);
const [ description, setDescription ] = useState('');
const [ tagFormData, setTagFormData ] = useState({});
const [selectTags,setSelectTags] = useState([])
const getTagByKeyword = (value=keyword) => {
getTagByKeywordAndCreator({
keyword: value,
creator: creator||'',
resourceType:type,
}, data => {
setMatchTags(data?.data||[]);
let tagExsit = false, _selectTag = null;
const _options = [];
(data?.data||[]).forEach(item => {
_options.push({
value: item.tagId,
label: (
<div
style={{
display: 'flex',
justifyContent: 'space-between',
}}
>
{item.name||''}
<Avatar
shape="square"
size="small"
title={item.type==='public'?'公共标签':'个人标签'}
>
{item.type==='public'?'公':'个'}
</Avatar>
</div>
)
});
if (value==='' || item.name===value) {
tagExsit = true;
}
if (item.name === value) {
_selectTag = item;
}
})
if (!tagExsit) {
_options.push({
value: -1,
label: (
<a >{`创建 ${value||''}`}</a>
)
})
}
setSelectTag(_selectTag);
setOptions(_options);
})
}
const onOk = () => {
if (selectTags.length===0) {
message.warning('请先填写标签');
return;
}
if (selectTags.length>0) {
setConfirmLoading(true);
newbatchAddTagResource({
tagIds: selectTags.join(','),
resourceIds: id,
type,
creator: creator||''
}, () => {
reset();
onCancel && onCancel(true);
callback?.()
setSelectTags([])
}, () => {
setConfirmLoading(false);
})
} else {
getTagForm();
}
}
const cancel = () => {
reset();
onCancel && onCancel();
}
const onBack = () => {
setStep(0);
}
const onCreate = () => {
form.validateFields().then((data)=>{
setConfirmLoading(true);
let saveData = JSON.parse(JSON.stringify(tagFormData))
for (let item of saveData.targetParameters){
item.value = String(data[item.name])
}
saveTag(false,saveData,(data)=>{
batchAddTagResource({
tagId: data?.data?.id,
resourceIds: id,
type,
creator: creator||''
}, () => {
reset()
onCancel && onCancel(true);
}, () => {
setConfirmLoading(false);
})
},(err)=>{
setConfirmLoading(false);
console.log("err",err)
})
})
}
const onFocus = () => {
getTagByKeyword();
}
const onKeywordChange = (value) => {
//匹配行被选中时 跳过
if (value!==undefined && value!==null && typeof(value)!=='string') return;
setSelectTag(null);
setKeyword(value||'');
getTagByKeyword(value||'');
}
//获取新增标签表单
const getTagForm = async ()=>{
setConfirmLoading(true);
getSupportTagForm({
isDefault: false,
type: 'private',
creator: creator||''
}, data => {
const _tagForm = data?.data||{};
setTagFormData(_tagForm)
form.resetFields()
setConfirmLoading(false);
setStep(1);
}, () => {
setConfirmLoading(false);
})
}
const onSelect = async (value, option) => {
if (value!==-1) {
let _selectTag = null;
matchTags.forEach(item => {
if (item.tagId === value) {
_selectTag = item;
}
})
setSelectTag(_selectTag);
setKeyword(_selectTag.name||'');
} else {
setSelectTag(null);
getTagForm()
}
}
const onDescriptionChange = (e) => {
setDescription(e.target.value);
}
const reset = () => {
setConfirmLoading(false);
setStep(0);
setSelectTag(null);
setKeyword('');
}
let footer = [];
if (step === 0) {
footer = [
<Button
key="0"
onClick={cancel}
>
取消
</Button>,
<Button
key="1"
type="primary"
loading={confirmLoading}
onClick={onOk}
// disabled={keyword===''}
>
确定
</Button>
];
} else if (step === 1) {
footer = [
<Button
key="0"
onClick={onBack}
>
返回
</Button>,
<Button
key="1"
type="primary"
loading={confirmLoading}
onClick={onCreate}
>
创建
</Button>
];
}
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 4 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 },
},
};
const newTreeData = (data) =>{
let box = []
for (let item of data){
let node = {title:item.name,value:item.idString}
if(item.children&&item.children[0]){
node.children = newTreeData(item.children)
}
box.push(node)
}
return box
}
return (
<Modal
className='add-tag-modal'
forceRender
visible={visible}
title={(step===0)?'选择标签':`创建${keyword}`}
width={520}
onCancel={cancel}
footer={footer}
>
{/* {
step === 0 && <AutoComplete
style={{ width: '100%' }}
allowClear
value={keyword}
onChange={onKeywordChange}
onFocus={onFocus}
options={options}
onSelect={onSelect}
/>
} */}
{
step===0&&<TreeSelectItem session={{user:{userName:creator}}} resourceType={type} selectTags={selectTags} setSelectTags={setSelectTags} />
}
{
step === 1 && <Form
{...formItemLayout}
form={form}
>
{tagFormData&&tagFormData.targetParameters&&tagFormData.targetParameters[0]?
tagFormData.targetParameters.map((item,key)=>{
if(item.name==='catalogId'){
return(
<Form.Item
label={item.cnName}
name={item.name}
rules={[{ required: item.required, message: `请选择${item.cnName}!` }]}
key={`tagFormData${key}`}
>
<TreeSelect
style={{ width: '100%' }}
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
treeData={newTreeData(item.tagCatalogNode.children)}
treeDefaultExpandAll
/>
</Form.Item>
)
}else if(item.name==='usable'){
return(
<Form.Item
label={item.cnName}
name={item.name}
rules={[{ required: item.required, message: `请选择${item.cnName}!` }]}
initialValue="1"
style={{display:'none'}}
key={`tagFormData${key}`}
>
<Input disabled />
</Form.Item>
)
}else if(item.name==='name'){
return(
<Form.Item
label={item.cnName}
name={item.name}
rules={[{ required: item.required, message: `请输入${item.cnName}!` }]}
initialValue={keyword}
key={`tagFormData${key}`}
>
<Input disabled />
</Form.Item>
)
}else {
return(
<Form.Item
label={item.cnName}
name={item.name}
rules={[{ required: item.required, message: `请输入${item.cnName}!` }]}
key={`tagFormData${key}`}
>
<Input />
</Form.Item>
)
}
})
:''}
</Form>
}
</Modal>
)
}
export default AddTagModal;
\ No newline at end of file
import React, { useEffect, useState } from 'react';
import { TreeSelect } from 'antd';
import { loadTagCatalogTree } from '../../../../service/TagService';
export interface TreeSelectItemProps {
value?: string | number;
onChange?: (value: string | number) => void;
placeholder?: string;
multiple?: boolean;
style?: React.CSSProperties;
resourceType:string;
session:any;
setSelectTags:any
selectTags:any
}
const TreeSelectItem: React.FC<TreeSelectItemProps> = ({
value,
onChange,
placeholder = '请选择',
multiple = true,
setSelectTags,
selectTags,
resourceType,
session
}) => {
const [treeData, setTreeData] = useState<any>([]);
const [loading,setLoading] = useState(false)
useEffect(() => {
getAllTags()
}, []);
//获取所有标签
const getAllTags = (bol=false) => {
setLoading(true);
loadTagCatalogTree({
isDefault:false,
withTagData: true,
type: 'public',
resourceType:resourceType,
creator: session?.user?.userName||''
}, (data:any) => {
getPrivateTags(data?.data,bol);
}, () => {
setLoading(false);
})
}
//目录树结构修改
const newTreeData = (datas:any,type:any,parentkey=undefined)=>{
try{
let data:any = JSON.parse(JSON.stringify(datas))
let newbox:any = []
for(let node of data){
let box:any = {
title: <div id={`catalog_${type}_${node.id}`}>
<div
style={{
borderRadius:2,
height:14,
border:type==='public'?'2px solid #2db7f5':'2px solid #d4380d',
float:'left',
marginTop:5,
marginRight:4,
}}
/>
<span style={{float:'left'}} >{node.name}</span>
</div>,
key: parentkey?`${parentkey},catalog_${type}_${node.id}`:`catalog_${type}_${node.id}`,
type: 'catalog',
isLeaf: false,
name:node.name,
value:`catalog_${type}_${node.id}`,
selectable:false,
children:[]
}
if(node.children&&node.children[0]){
let childrenBox = newTreeData(node.children,type,node.key)
box.children = childrenBox
}
if(node.tagNode&&node.tagNode[0]){
for(let item of node.tagNode){
box.children.push({
title: item.name,
key: item.id,
type: 'tag',
value:item.id,
isLeaf: true,
name:item.name
})
}
}
newbox.push(box)
}
return newbox
}catch(err){
console.log('err',err)
return []
}
}
//获取私有标签
const getPrivateTags = (publicData:any,reflash=true) => {
console.log(reflash)
loadTagCatalogTree({
isDefault:false,
withTagData: true,
type: 'private',
resourceType:resourceType,
creator: session?.user?.userName||''
}, (data:any) => {
setLoading(false);
try{
let _treeData:any = [];
if ((publicData?.children||[]).length>0) {
let publicbox = newTreeData(publicData.children,'public')
_treeData=_treeData.concat(publicbox)
}
if ((data?.data?.children||[]).length>0) {
let privatebox = newTreeData(data.data.children,'private')
_treeData=_treeData.concat(privatebox)
}
console.log(_treeData)
setTreeData(_treeData);
}catch(err){
console.log('err',err)
}
}, () => {
setLoading(false);
})
}
return (
<TreeSelect
treeData={treeData}
value={selectTags}
placeholder={placeholder}
onChange={(values)=>{setSelectTags(values)}}
allowClear
multiple={multiple}
style={{width:'100%'}}
showSearch
treeNodeFilterProp="title"
filterTreeNode={(input, node:any) =>{
return node?.name?.toLowerCase().indexOf(input.toLowerCase()) >= 0
// return node?.title?.props?.children?.[1]?.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||
// node?.title?.indexOf(input.toLowerCase()) >= 0
}}
/>
);
};
export default TreeSelectItem;
\ No newline at end of file
...@@ -2,12 +2,14 @@ import React, { useEffect, useState } from 'react'; ...@@ -2,12 +2,14 @@ import React, { useEffect, useState } from 'react';
import { Button, Tag, Modal } from 'antd'; import { Button, Tag, Modal } from 'antd';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import AddTagModal from './Component/AddTagModal'; import AddTagModal from './Component/AddNewTagModal';
import { dispatch } from '../../../model'; import { dispatch } from '../../../model';
const TagColumn = (props) => { const TagColumn = (props) => {
const { id, type = 'dataAsset', creator = '', styleType = 'simple', onAssetTag } = props; const { id, type = 'dataAsset', creator = '', styleType = 'simple', onAssetTag } = props;
console.log('creator',creator)
const [ ownTags, setOwnTags ] = useState([]); const [ ownTags, setOwnTags ] = useState([]);
const [ addTagModalVisible, setAddTagModalVisible ] = useState(false); const [ addTagModalVisible, setAddTagModalVisible ] = useState(false);
const [modal, contextHolder] = Modal.useModal(); const [modal, contextHolder] = Modal.useModal();
...@@ -149,6 +151,7 @@ const TagColumn = (props) => { ...@@ -149,6 +151,7 @@ const TagColumn = (props) => {
type='text' type='text'
icon={<PlusOutlined />} icon={<PlusOutlined />}
onClick={onAddBtnClick} onClick={onAddBtnClick}
style={{zIndex:100}}
> >
新增标签 新增标签
</Button> </Button>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment