Commit 422ff7dc by zhaochengxiang

属性值变更

parent 5d8f2420
......@@ -348,6 +348,14 @@ export function* resourceCombineDataAsset(payload) {
return yield call(service.resourceCombineDataAsset, payload)
}
export function* changeElementValue(payload) {
return yield call(service.changeElementValue, payload)
}
export function* getDistinctValuesByElementId(payload) {
return yield call(service.getDistinctValuesByElementId, payload)
}
export function* getTasks(payload) {
return yield call(service.getTasks, payload)
}
......
......@@ -340,6 +340,14 @@ export function getPreviewRangeByDirId(payload) {
return PostJSON("/dataassetmanager/resourceApi/combineExistDataAsset", payload);
}
export function changeElementValue(payload) {
return PostJSON("/dataassetmanager/resourceApi/batchChangeElementValue", payload);
}
export function getDistinctValuesByElementId(payload) {
return GetJSON("/dataassetmanager/resourceApi/getDistinctValuesByElementId", payload);
}
export function getTasks(payload) {
return GetJSON("/dataassetmanager/resource/taskApi/listTasksByPage", payload)
}
......
......@@ -6,6 +6,7 @@ import { AssetBrowseReference, AssetManageReference, ResourceBrowseReference, Re
import ImportElement from './ImportElement';
import AttributeRelationModal from "./AttributeRelationModal";
import FilterElementModal from './FilterElementModal';
import ChangeElementValue from './change-element-value';
import { showNotifaction, getAssetRange, getAssetType } from '../../../../util';
import { MoreSvg } from './AssetSvg';
import Separate from './Separate';
......@@ -28,6 +29,10 @@ const AssetDirectory = (props) => {
const [ filterElementVisible, setFilterElementVisible ] = useState(false);
const [ resourceState, setResourceState ] = useState(null);
const [ permissions, setPermissions ] = useState([]);
const [changeElementValueParams, setChangeElementValueParams] = useState({
visible: false,
type: undefined
})
useEffect(() => {
getPermissions()
......@@ -124,6 +129,13 @@ const AssetDirectory = (props) => {
setAttributeRelationModalVisible(true);
}
const onChangeElementValueClick = () => {
setChangeElementValueParams({
visible: true,
type: reference
})
}
const onImportElementCancel = (visible = false, change = false, tip = '') => {
setImportElementVisible(visible);
......@@ -154,6 +166,8 @@ const AssetDirectory = (props) => {
onFilterElementClick();
} else if (key === 'attributeRelate') {
onAttributeRelationBtnClick();
} else if (key === 'changeElementValue') {
onChangeElementValueClick();
}
}
......@@ -195,6 +209,14 @@ const AssetDirectory = (props) => {
资产属性关联
</div>
</PermissionMenuItem>
<PermissionMenuItem
defaultPermission='true'
key='changeElementValue'
>
<div className='text-center'>
属性值变更管理
</div>
</PermissionMenuItem>
</Menu>
);
......@@ -343,6 +365,17 @@ const AssetDirectory = (props) => {
visible={ attributeRelationModalVisible }
onCancel={ onAttributeRelationModalCancel }
/>
<ChangeElementValue
{...changeElementValueParams}
onCancel={(refresh) => {
setChangeElementValueParams({
visible: false,
type: undefined
})
refresh && AssetDirectorySubject.next({ type: 'element-value-change' })
}}
/>
</Spin>
);
}
......
import React from "react"
import { Modal, Button, Spin, Form, Select } from "antd"
import { dispatch } from '../../../../model'
import { getAssetRange, getAssetType } from '../../../../util'
import { ElementItem } from "./AssetAction"
const FC = (props) => {
const { type, visible, onCancel } = props
const [loading, setLoading] = React.useState(false)
const [waiting, setWaiting] = React.useState(false)
const [elements, setElements] = React.useState()
const basicRef = React.useRef()
React.useEffect(() => {
if (visible) {
getElements()
}
}, [visible])
const getElements = () => {
setLoading(true)
dispatch({
type: 'assetmanage.listElements',
payload: {
params: {
range: getAssetRange(type),
dataAssetType: getAssetType(type)
}
},
callback: data => {
setLoading(false)
setElements((data??[]).filter(item => item.supportBatchEdit==='是'))
},
error: () => {
setLoading(false)
}
})
}
const close = (refresh = false) => {
setLoading(false)
setWaiting(false)
onCancel?.(refresh)
}
const save = async () => {
try {
const rows = await basicRef.current?.validate()
setWaiting(true)
dispatch({
type: 'assetmanage.changeElementValue',
payload: {
params: {
dataAssetType: getAssetType(type),
...rows
}
},
callback: data => {
setWaiting(false)
close(true)
},
error: () => {
setWaiting(false)
}
})
} catch(e) {
}
}
const footer = React.useMemo(() => {
return [
<Button key={'cancel'}
onClick={() => close()}
>取消</Button>,
<Button disabled={waiting} key={'save'} type='primary'
onClick={() => save()}
>确定</Button>
]
}, [close, save, waiting])
return (
<Modal
visible={visible}
footer={footer}
width={520}
bodyStyle={{ padding: '15px 15px 0px 15px', overflowX: 'auto', maxHeight: '80vh' }}
title='属性值变更管理'
centered destroyOnClose
onCancel={() => { close() }}
>
<Spin spinning={loading||waiting} >
<Basic ref={basicRef} type={type} elements={elements} />
</Spin>
</Modal>
)
}
export default FC
export const Basic = React.forwardRef(function ({ type, elements }, ref) {
const [form] = Form.useForm()
const [loadingSources, setLoadingSources] = React.useState(false)
const [sources, setSources] = React.useState()
const [currentElement, setCurrentElement] = React.useState()
React.useImperativeHandle(ref, () => ({
validate: async () => {
return await form.validateFields()
},
}), [form])
const marginBottom = React.useMemo(() => {
return 15
}, [])
const getSources = (elementId) => {
setLoadingSources(true)
dispatch({
type: 'assetmanage.getDistinctValuesByElementId',
payload: {
dataAssetType: getAssetType(type),
elementId
},
callback: data => {
setLoadingSources(false)
setSources(data)
},
error: () => {
setLoadingSources(false)
}
})
}
const onValuesChange = (changedValues, allValues) => {
if (changedValues.hasOwnProperty('elementId')) {
const index = (elements??[]).findIndex(item => item.id === changedValues.elementId)
if (index !== -1) {
setCurrentElement(elements[index])
}
getSources(changedValues.elementId)
}
}
return (
<Form
form={form}
labelCol={{ span: 5 }}
wrapperCol={{ span: 17 }}
autoComplete="off"
onValuesChange={onValuesChange}
>
<Form.Item
label="属性"
name="elementId"
rules={[{ required: true, message: '请选择属性!' }]}
style={{ marginBottom }}
>
<Select placeholder='请选择属性'>
{
(elements??[]).map((item,index) =>
<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>
)
}
</Select>
</Form.Item>
<Form.Item
label="原属性值"
name="source"
rules={[{ required: true, message: '请选择原属性值!' }]}
style={{ marginBottom }}
>
<Select loading={loadingSources} placeholder='请选择属性'>
{
(sources??[]).map((item,index) =>
<Select.Option key={item} value={item}>{item}</Select.Option>
)
}
</Select>
</Form.Item>
<Form.Item
label="替换属性值"
name="target"
rules={[{ required: true, message: '请选择替换属性值!' }]}
style={{ marginBottom }}
>
<ElementItem type='edit' element={currentElement} />
</Form.Item>
</Form>
)
})
\ No newline at end of file
......@@ -153,6 +153,8 @@ const FC = (props) => {
if (props.type === 'element-change') {
getElements()
getAssets()
} else if (props.type === 'element-value-change') {
getAssets()
}
})
......
......@@ -186,7 +186,7 @@ export const Basic = React.forwardRef(function ({ node, action }, ref) {
allowChangeResourceType ? <Select allowClear>
{
resourceTypes.map((item,index) => {
return <Select.Option key={item.key}>{item.name}</Select.Option>
return <Select.Option key={item.key} value={item.key}>{item.name}</Select.Option>
})
}
</Select> : <span>{currentResourceType}</span>
......
......@@ -20,14 +20,16 @@ const FC = (props) => {
const getElements = () => {
setLoading(true)
dispatch({
type: 'assetmanage.listFilterElements',
type: 'assetmanage.listElements',
payload: {
range: getAssetRange(type),
dataAssetType: getAssetType(type)
params: {
range: getAssetRange(type),
dataAssetType: getAssetType(type)
}
},
callback: data => {
setLoading(false)
setElements(data)
setElements((data??[]).filter(item => item.supportBatchEdit==='是'))
},
error: () => {
setLoading(false)
......
......@@ -186,6 +186,8 @@ const FC = (props) => {
if (props.type === 'element-change') {
getElements()
getAssets()
} else if (props.type === 'element-value-change') {
getAssets()
}
})
......
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