Commit b8c20cfe authored by xiexiuxing's avatar xiexiuxing

feat:完成内容管理按钮权限

parent 835fe2f6
btnCode 是pass 平台配置唯一表示
btnCode 是pass 平台配置唯一表示
......@@ -76,6 +76,27 @@ repositories.edit:仓位库存调拨按钮
// 内容管理-contentAbility
// 内容管理-栏目管理
columnsManagement.del 栏目管理删除 栏目管理删除按钮
columnsManagement.edit 栏目管理编辑 栏目管理编辑按钮
columnsManagement.state 栏目管理状态 栏目管理状态是否有效按钮
columnsManagement.see 栏目管理查看 栏目管理查看按钮
columnsManagement.add 栏目管理添加 栏目管理添加按钮
// 内容管理 -分类管理 category.categorysonadd,category.categoryadd,category.categoryadd 没有处理
category.categorysonadd 分类管理节点新曾子节点 分类管理节点新曾子节点按钮
category.categoryadd 分类管理节点新曾节点 分类管理节点新曾按钮
category.categoryadd 分类管理节点删除 分类管理节点删除按钮
category.edit 分类管理保存 分类管理保存按钮
category.del 分类管理删除 分类管理删除按钮
// 内容管理 -标签管理
tagsManagement.add 标签管理新曾 标签管理按钮
tagsManagement.del 标签管理删除 标签管理删除按钮
tagsManagement.edit 标签管理编辑 标签管理编辑按钮
tagsManagement.see 标签管理查看 标签管理查看按钮
tagsManagement.state 标签管理状态 设置标签有效或者无效按钮
// 内容管理-资讯管理
infomations.del 资讯管理删除 资讯管理删除按钮
......@@ -84,7 +105,7 @@ infomations.state 资讯管理上下架 资讯管理上下架按钮
infomations.see 资讯管理查看 资讯管理查看按钮
infomations.add 资讯管理新曾 资讯管理新曾按钮
//内容管理-公告管理
// 内容管理-公告管理
contentAbility.add 公告管理新曾 公告管理新曾按钮
contentAbility.see 公告管理查看 公告管理查看按钮
contentAbility.state 公告管理操作上架下架 公告管理操作上架下架按钮
......
......@@ -49,7 +49,7 @@ export interface TabTreeProps extends TreeProps {
resetSearch?: boolean;
}
const intl = getIntl();
export interface InnermostTreeNodeProps {}
export interface InnermostTreeNodeProps { }
export interface RenderIconsProps {
node: any;
......@@ -76,11 +76,11 @@ export const createTreeActions = () => {
getSelectKeys() {
return [];
},
setSelectKey() {},
setSelectKeys() {},
setExpandedKeys() {},
getParentPath(id){return ''},
getParent(id){return null}
setSelectKey() { },
setSelectKeys() { },
setExpandedKeys() { },
getParentPath(id) { return '' },
getParent(id) { return null }
};
return actions;
};
......@@ -100,7 +100,7 @@ const RenderIcons: React.FC<RenderIconsProps> = props => {
// return <Space className={cx('god-tabtree-icons', props.nowKey === props.node.key ? 'show' : 'hide')}>
return (
<Space className={cx('god-tabtree-icons')}>
<Tooltip title={intl.formatMessage({id: 'components.xinzengjiedian'})}>
<Tooltip title={intl.formatMessage({ id: 'components.xinzengjiedian' })}>
<PlusCircleOutlined
onClick={e => {
e.stopPropagation();
......@@ -110,7 +110,7 @@ const RenderIcons: React.FC<RenderIconsProps> = props => {
}}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'components.xinzengzijiedian'})}>
<Tooltip title={intl.formatMessage({ id: 'components.xinzengzijiedian' })}>
<PlusCircleOutlined
onClick={e => {
e.stopPropagation();
......@@ -120,7 +120,7 @@ const RenderIcons: React.FC<RenderIconsProps> = props => {
}}
/>
</Tooltip>
<Tooltip title={intl.formatMessage({id: 'components.shanchudangqianjiedian'})}>
<Tooltip title={intl.formatMessage({ id: 'components.shanchudangqianjiedian' })}>
<DeleteOutlined
onClick={e => {
e.stopPropagation();
......@@ -174,7 +174,7 @@ function transformSingleTitle(
}}
>
{checkable ||
(data[item].children && data[item].children.length !== 0) ? (
(data[item].children && data[item].children.length !== 0) ? (
data[item].title
) : (
<InnermostTreeNode>{data[item].title}</InnermostTreeNode>
......@@ -223,7 +223,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
handleCheck,
customExpandkeys,
enableSearch = false,
searchPlaceholder = intl.formatMessage({id: 'components.sousuo'}),
searchPlaceholder = intl.formatMessage({ id: 'components.sousuo' }),
checkStrictly = false,
resetSearch,
} = props;
......@@ -241,8 +241,8 @@ const TabTree: React.FC<TabTreeProps> = props => {
// 搜索的值
const [searchValue, setSearchValue] = useState()
useEffect(()=> {
if(resetSearch) {
useEffect(() => {
if (resetSearch) {
setSearchValue(null)
setExpandkeys([])
}
......@@ -278,7 +278,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
}, []);
useEffect(() => {
if(customExpandkeys?.length) {
if (customExpandkeys?.length) {
setExpandkeys(customExpandkeys)
setAutoExpandParent(true)
}
......@@ -315,7 +315,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
const targetInfo = reductData[id]
const parentInfo = reductData[targetInfo.parentId]
// fixbug 当选中根节点下的节点时, 由于无parentId, 需自动补充0
return parentInfo || {id: 0}
return parentInfo || { id: 0 }
}
}
const batchSelect = (items: any) => {
......@@ -336,7 +336,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
const onSearchChange = v => {
// todo 找到目标节点的父级key
setSearchValue(v)
if(v) {
if (v) {
const reductData = Object.values(treeReduction(treeData))
const expandedKeys = reductData.filter(item => item['title'].indexOf(v) > -1).map(_item => _item['parentId'])
setExpandkeys(expandedKeys)
......@@ -353,12 +353,12 @@ const TabTree: React.FC<TabTreeProps> = props => {
<div>{title}</div>
{checkable && (
<Button onClick={toggleSelectAll} disabled={disabled} type="link">
{allSelected ? intl.formatMessage({id: 'components.quxiaoquanxuan'}) : intl.formatMessage({id: 'components.quanxuan'})}
{allSelected ? intl.formatMessage({ id: 'components.quxiaoquanxuan' }) : intl.formatMessage({ id: 'components.quanxuan' })}
</Button>
)}
{showSave && checkable && (
<Button onClick={handleSubmit} disabled={disabled} type="link">
{intl.formatMessage({id: 'components.baocun'})}
{intl.formatMessage({ id: 'components.baocun' })}
</Button>
)}
</div>
......@@ -368,7 +368,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
style={{ marginBottom: 8 }}
placeholder={searchPlaceholder}
value={searchValue}
onChange={(v:any) => setSearchValue(v.target.value)}
onChange={(v: any) => setSearchValue(v.target.value)}
onSearch={onSearchChange}
/>
}
......@@ -410,7 +410,7 @@ const TabTree: React.FC<TabTreeProps> = props => {
: [...expandkeys, node.key],
);
})
.catch(() => {});
.catch(() => { });
return false;
}
}
......
......@@ -10,6 +10,8 @@ import NiceForm from '@/components/NiceForm';
import styles from './index.less';
import { QuestionCircleOutlined } from '@ant-design/icons';
import { getManageMemberCategoryAll, getManageMemberCategoryGet, postManageMemberCategoryAdd, postManageMemberCategoryDelete, postManageMemberCategoryUpdate } from '@/services/ManageV2Api';
import AuthButton from '@/components/AuthButton'
import { AuthUrl } from '@/components/AuthButton/AuthUrl'
enum FormState {
FREE, // 空闲状态
......@@ -32,9 +34,9 @@ type TreeDataType = {
* @param level
* @returns
*/
const transferTreeData = (treeData: any, level: string, checkedKeys): TreeDataType[] => {
const transferTreeData = (treeData: any, level: string, checkedKeys): TreeDataType[] => {
let res: TreeDataType[] = [];
for(let i = 0; i < treeData.length; i++) {
for (let i = 0; i < treeData.length; i++) {
const item = treeData[i];
const key = level + item.id
let result: TreeDataType = {
......@@ -45,10 +47,10 @@ type TreeDataType = {
parentId: item.parentId,
children: [],
}
if(item.status) {
if (item.status) {
checkedKeys.push(key);
}
if(item.list.length !== 0) {
if (item.list.length !== 0) {
result.children = transferTreeData(item.list as any, key + "-", checkedKeys);
}
res.push(result)
......@@ -91,7 +93,7 @@ const ClassProperty: React.FC<{}> = () => {
const transferTreeDatarRes: TreeDataType[] = useMemo(() => transferTreeData(treeData, "", tempCheckedKeys), [treeData])
// const checkedKeys = useMemo(() => tempCheckedKeys, [transferTreeDatarRes])
const formInitValue = (nodeRecord && treeStatus === FormState.EDIT) ? getTreeMaps(nodeRecord.key) : {}
const formValue = formInitValue ? {...formInitValue, status: [formInitValue.status]} : {}
const formValue = formInitValue ? { ...formInitValue, status: [formInitValue.status] } : {}
const is3Level = useMemo(() => {
if (!nodeRecord || nodeRecord.parentId === 0) {
......@@ -102,7 +104,7 @@ const ClassProperty: React.FC<{}> = () => {
const splitRes = _key.split("-");
let flag = splitRes.length;
let i = 1;
for ( ; i <= splitRes.length; i++) {
for (; i <= splitRes.length; i++) {
if (splitRes[i - 1] === parentId?.toString()) {
console.log(i);
flag = i + 1;
......@@ -112,7 +114,7 @@ const ClassProperty: React.FC<{}> = () => {
return flag
}, [nodeRecord])
const onFinish = async (values: {id: number, parentId: number, name: string, describe: string, status: string[], level: number}) => {
const onFinish = async (values: { id: number, parentId: number, name: string, describe: string, status: string[], level: number }) => {
const _key = nodeRecord?._key?.split("-");
const isEdit = treeStatus === FormState.EDIT;
let parentId = nodeRecord?.parentId || 0;
......@@ -152,7 +154,7 @@ const ClassProperty: React.FC<{}> = () => {
useEffect(() => {
// 这里有个奇怪的地方,不知道为什么要医疗nodeRecord
if (treeStatus === FormState.ADD && is3Level === 3 || is3Level === 4) {
if (treeStatus === FormState.ADD && is3Level === 3 || is3Level === 4) {
formActions.setFieldValue("level", 3);
}
}, [treeStatus, nodeRecord, is3Level])
......@@ -165,8 +167,8 @@ const ClassProperty: React.FC<{}> = () => {
<h3 className="mb-30">{intl.formatMessage({ id: 'content.category.selectEditProject' })}</h3>
{
treeData && treeData.length > 0
? <TabTree
fetchData = {params => fetchClassTreeData(params)}
? <TabTree
fetchData={params => fetchClassTreeData(params)}
treeData={transferTreeDatarRes}
toolsRender={toolsRender}
actions={treeActions}
......@@ -191,12 +193,12 @@ const ClassProperty: React.FC<{}> = () => {
name='classForm'
onSubmit={onFinish}
actions={formActions}
effects={($, action)=> {}}
effects={($, action) => { }}
schema={classSchema()}
expressionScope={{
showWarn: (
<Tooltip placement="topLeft" title={intl.formatMessage({ id: 'content.category.handleTips' })}>
<span style={{marginTop: '-12px', width: '50px'}}>
<span style={{ marginTop: '-12px', width: '50px' }}>
<QuestionCircleOutlined />
</span>
</Tooltip>
......@@ -204,21 +206,27 @@ const ClassProperty: React.FC<{}> = () => {
}}
>
<FormButtonGroup>
<Button htmlType='submit' type="primary" >
{intl.formatMessage({ id: 'common.button.save' })}
</Button>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
okText={intl.formatMessage({ id: 'common.button.yes' })}
cancelText={intl.formatMessage({ id: 'common.button.no' })}
onConfirm={handleDeleteMenu}
>
{
treeStatus !== FormState.ADD && <Button >
{intl.formatMessage({ id: 'common.button.delete' })}
</Button>
}
</Popconfirm>
<AuthButton btnCode='category.edit' menuCode='contentAbility'>
<Button htmlType='submit' type="primary" >
{intl.formatMessage({ id: 'common.button.save' })}
</Button>
</AuthButton>
<AuthButton btnCode='category.del' menuCode='contentAbility'>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
okText={intl.formatMessage({ id: 'common.button.yes' })}
cancelText={intl.formatMessage({ id: 'common.button.no' })}
onConfirm={handleDeleteMenu}
>
{
treeStatus !== FormState.ADD && <Button >
{intl.formatMessage({ id: 'common.button.delete' })}
</Button>
}
</Popconfirm>
</AuthButton>
</FormButtonGroup>
</NiceForm>
</>
......
import React, { useRef } from 'react';
import { Card, Button, Popconfirm, Row, Col } from 'antd';
import { Card, Button, Popconfirm, Row, Col } from 'antd';
import { createFormActions, ISchema } from '@formily/antd';
import { history, useIntl } from 'umi';
import StatusSwitch from '@/components/StatusSwitch';
......@@ -12,6 +12,8 @@ import EyePreview from '@/components/EyePreview'
import StandardTable from '@/components/StandardTable';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { getManageMemberColumnPage, postManageMemberColumnDelete, postManageMemberColumnUpdateStatus } from '@/services/ManageV2Api';
import AuthButton from '@/components/AuthButton'
import { AuthUrl } from '@/components/AuthButton/AuthUrl'
const formActions = createFormActions();
......@@ -63,13 +65,13 @@ const columnList: React.FC<{}> = () => {
ref.current.reload()
}
// 栏目删除
const handleRemove = async (id: number) => {
// 栏目删除
const handleRemove = async (id: number) => {
const res = await postManageMemberColumnDelete({ id })
if (res.code === 1000) {
ref.current.reload()
}
}
}
// 获取列表
const fetchData = (params: any) => {
......@@ -91,7 +93,7 @@ const columnList: React.FC<{}> = () => {
dataIndex: 'name',
key: 'name',
render: (text: any, record: any) => (
<EyePreview url={`/memberCenter/contentAbility/columnsManagement/detail?id=${record.id}&preview=1`}>
<EyePreview type={AuthUrl('columnsManagement.see', 'contentAbility') ? 'link' : 'button'} url={`/memberCenter/contentAbility/columnsManagement/detail?id=${record.id}&preview=1`}>
{text}
</EyePreview>
)
......@@ -115,11 +117,14 @@ const columnList: React.FC<{}> = () => {
dataIndex: 'status',
key: 'status',
render: (text: any, record: any) => (
<StatusSwitch
fieldNames="status"
handleConfirm={() => handleModify(record)}
record={record}
/>
<AuthButton btnCode='columnsManagement.state' menuCode='contentAbility'>
<StatusSwitch
fieldNames="status"
handleConfirm={() => handleModify(record)}
record={record}
/>
</AuthButton>
)
},
{
......@@ -129,13 +134,19 @@ const columnList: React.FC<{}> = () => {
dataIndex: 'operate',
render: (_, record) => !record.status && (
<>
<Button type='link' onClick={() => history.push(`/memberCenter/contentAbility/columnsManagement/detail?id=${record.id}`)}>{intl.formatMessage({ id: 'common.button.modify' })}</Button>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
onConfirm={() => handleRemove(record.id)}
>
<Button type='link'>{intl.formatMessage({ id: 'common.button.delete' })}</Button>
</Popconfirm>
<AuthButton btnCode='columnsManagement.edit' menuCode='contentAbility'>
<Button type='link' onClick={() => history.push(`/memberCenter/contentAbility/columnsManagement/detail?id=${record.id}`)}>{intl.formatMessage({ id: 'common.button.modify' })}</Button>
</AuthButton>
<AuthButton btnCode='columnsManagement.del' menuCode='contentAbility'>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
onConfirm={() => handleRemove(record.id)}
>
<Button type='link'>{intl.formatMessage({ id: 'common.button.delete' })}</Button>
</Popconfirm>
</AuthButton>
</>
)
}
......@@ -143,17 +154,20 @@ const columnList: React.FC<{}> = () => {
const controllerBtns = <Row>
<Col span={6}>
<Button
onClick={() => history.push('/memberCenter/contentAbility/columnsManagement/add')}
type="primary"
icon={<PlusOutlined />}
>
{intl.formatMessage({ id: 'common.button.add' })}
</Button>
<AuthButton btnCode='columnsManagement.add1' menuCode='contentAbility'>
<Button
onClick={() => history.push('/memberCenter/contentAbility/columnsManagement/add')}
type="primary"
icon={<PlusOutlined />}
>
{intl.formatMessage({ id: 'common.button.add' })}
</Button>
</AuthButton>
</Col>
</Row>
return (
return (
<PageHeaderWrapper>
<Card>
<StandardTable
......@@ -176,7 +190,7 @@ const columnList: React.FC<{}> = () => {
/>
</Card>
</PageHeaderWrapper>
)
)
}
export default columnList
import React, { useRef } from 'react';
import { Card, Button, Popconfirm, Row, Col } from 'antd';
import { Card, Button, Popconfirm, Row, Col } from 'antd';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import { ColumnType } from 'antd/lib/table/interface'
......@@ -10,6 +10,8 @@ import StatusSwitch from '@/components/StatusSwitch';
import StandardTable from '@/components/StandardTable';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { getManageMemberLabelPage, postManageMemberLabelDelete, postManageMemberLabelUpdateStatus } from '@/services/ManageV2Api';
import AuthButton from '@/components/AuthButton'
import { AuthUrl } from '@/components/AuthButton/AuthUrl'
const actions = createFormActions();
......@@ -18,11 +20,12 @@ const Tags = () => {
const ref = useRef<any>({})
const columns: ColumnType<any>[] = [
{title: 'ID', dataIndex: 'id'},
{ title: 'ID', dataIndex: 'id' },
{
title: intl.formatMessage({ id: 'content.tag.name' }), dataIndex: 'name',
render: (text: string, record: any) => (
<EyePreview
type={AuthUrl('tagsManagement.see', 'contentAbility') ? 'link' : 'button'}
url={`/memberCenter/contentAbility/tagsManagement/detail?id=${record.id}&preview=1`}
>
{text}
......@@ -39,11 +42,13 @@ const Tags = () => {
dataIndex: 'status',
key: 'status',
render: (text: any, record: any) => (
<StatusSwitch
fieldNames="status"
handleConfirm={() => handleModify(record)}
record={record}
/>
<AuthButton btnCode='tagsManagement.state' menuCode='contentAbility'>
<StatusSwitch
fieldNames="status"
handleConfirm={() => handleModify(record)}
record={record}
/>
</AuthButton>
)
},
{
......@@ -53,13 +58,19 @@ const Tags = () => {
dataIndex: 'operate',
render: (_, record) => !record.status && (
<>
<Button type='link' onClick={() => history.push(`/memberCenter/contentAbility/tagsManagement/detail?id=${record.id}`)}>{intl.formatMessage({ id: 'common.button.modify' })}</Button>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
onConfirm={() => handleRemove(record.id)}
>
<Button type='link'>{intl.formatMessage({ id: 'common.button.delete' })}</Button>
</Popconfirm>
<AuthButton btnCode='tagsManagement.edit' menuCode='contentAbility'>
<Button type='link' onClick={() => history.push(`/memberCenter/contentAbility/tagsManagement/detail?id=${record.id}`)}>{intl.formatMessage({ id: 'common.button.modify' })}</Button>
</AuthButton>
<AuthButton btnCode='tagsManagement.del' menuCode='contentAbility'>
<Popconfirm
title={intl.formatMessage({ id: 'common.tip.option.confirm' })}
onConfirm={() => handleRemove(record.id)}
>
<Button type='link'>{intl.formatMessage({ id: 'common.button.delete' })}</Button>
</Popconfirm>
</AuthButton>
</>
)
}
......@@ -107,38 +118,41 @@ const Tags = () => {
})
}
// 修改状态
const handleModify = (value) => {
const { id, status } = value;
const postData = {
id: id,
enableStatus: (status ^ 1),
}
postManageMemberLabelUpdateStatus(postData).then((res) => {
if (res.code === 1000) {
// 修改状态
const handleModify = (value) => {
const { id, status } = value;
const postData = {
id: id,
enableStatus: (status ^ 1),
}
postManageMemberLabelUpdateStatus(postData).then((res) => {
if (res.code === 1000) {
ref.current.reload()
}
})
}
})
}
// 栏目删除
const handleRemove = (id: number) => {
///manage/contentColumn/delete
postManageMemberLabelDelete({id: id}).then((res) => {
if (res.code === 1000) {
// 栏目删除
const handleRemove = (id: number) => {
///manage/contentColumn/delete
postManageMemberLabelDelete({ id: id }).then((res) => {
if (res.code === 1000) {
ref.current.reload()
}
})
}
})
}
const controllerBtns = <Row>
<Col span={6}>
<Button
onClick={() => history.push('/memberCenter/contentAbility/tagsManagement/add')}
type="primary"
>
{intl.formatMessage({ id: 'common.button.add' })}
</Button>
<AuthButton btnCode='tagsManagement.add' menuCode='contentAbility'>
<Button
onClick={() => history.push('/memberCenter/contentAbility/tagsManagement/add')}
type="primary"
>
{intl.formatMessage({ id: 'common.button.add' })}
</Button>
</AuthButton>
</Col>
</Row>
......
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