Commit 01dbcb9b by chengming
parents 8e951492 d29fc66b
/**
* @file @/common/permissions/AuthContext.jsx
* @description 权限上下文
* @param {Object} props - 组件属性
* @param {React.ReactNode} props.children - 子组件
* @returns {React.ReactNode} - 包含权限信息的上下文提供者
* @author Lichen
* @date 2025/09/28
* @example
* import { AuthProvider } from '@/common/permissions/AuthContext';
* <AuthProvider>
* <App />
* </AuthProvider>
*/
import React, { createContext, useState, useEffect } from "react";
export const AuthContext = createContext();
export const AuthProvider = ({ children }) => {
const [userPermissions, setUserPermissions] = useState([]);
useEffect(() => {
const perms = JSON.parse(localStorage.getItem("userPermissions") || "[]");
setUserPermissions(perms);
}, []);
return (
<AuthContext.Provider value={{ userPermissions }}>
{children}
</AuthContext.Provider>
);
};
/**
* @file @/common/permissions/Permission.jsx
* @description 控制组件渲染权限
* @param {Object} props - 组件属性
* @param {React.ReactNode} props.children - 需要权限控制的子组件
* @param {string|string[]} props.permission - 所需权限字符串或数组
* @param {'or' | 'and'} [props.mode='or'] - 权限匹配模式,'or' 表示满足任一权限即可,'and' 表示需满足所有权限
* @param {React.ReactNode} [props.fallback=null] - 无权限时显示的替代组件,默认为 null(不显示)
* @returns {React.ReactNode} - 根据权限渲染子组件或替代组件
* @author Lichen
* @date 2025/09/28
* @example
* import Permission from '@/common/permissions/Permission';
* <Permission permission="edu_site_admin">
* <button>用户管理</button>
* </Permission>
*
* <Permission permission={['edu_site_admin']} mode="and" fallback={<span>无权限</span>}>
* <button>删除用户</button>
* </Permission> // mode="and" 表示权限全部满足时才显示组件,否则显示 fallback
*
* <Permission permission={['edu_site_admin']} mode="or">
* <button>修改用户</button>
* </Permission> // mode="or" 表示权限满足其一时显示组件,否则显示 fallback
*/
import usePermission from "./usePermission";
const Permission = ({ children, permission, mode = "or", fallback = null }) => {
const hasPermission = usePermission();
return hasPermission(permission, mode) ? children : fallback;
};
export default Permission;
/**
* @file @/common/permissions/usePermission.js
* @description 权限检查 Hook
* @param {string|string[]} permission - 权限字符串或数组
* @param {'or' | 'and'} [mode='or'] - 权限匹配模式,'or' 表示满足任一权限即可,'and' 表示需满足所有权限
* @returns {Function} - 检查权限的函数
* @author Lichen
* @date 2025/09/28
* @example
* import usePermission from '@/common/permissions/usePermission';
* const hasPermission = usePermission();
* hasPermission('edu_general_user:one'); // true 或 false
* hasPermission(['edu_general_user:one', 'edu_site_admin'], 'and'); // true 或 false
* hasPermission(['edu_general_user:one', 'edu_site_admin'], 'or'); // true 或 false
*/
import { useContext } from "react";
import { AuthContext } from "./AuthContext";
const usePermission = () => {
const { userPermissions } = useContext(AuthContext);
/**
* 检查权限
* @param {string|string[]} permission - 权限字符串或数组
* @param {'or' | 'and'} mode - 匹配模式,默认 'or'
* @returns {boolean}
*/
const hasPermission = (permission, mode = "or") => {
if (!userPermissions || !Array.isArray(userPermissions)) return false;
if (typeof permission === "string") {
return userPermissions.includes(permission);
}
if (Array.isArray(permission)) {
if (mode === "and") {
return permission.every(p => userPermissions.includes(p));
} else {
return permission.some(p => userPermissions.includes(p));
}
}
return false;
};
return hasPermission;
};
export default usePermission;
...@@ -6,4 +6,11 @@ ...@@ -6,4 +6,11 @@
import React from "react"; import React from "react";
import ReactDOM from "react-dom"; import ReactDOM from "react-dom";
import App from "./app.js"; import App from "./app.js";
ReactDOM.render(<App />, document.getElementById("root")); // 引入权限上下文
import { AuthProvider } from "@/common/permissions/AuthContext";
ReactDOM.render(
<AuthProvider>
<App />
</AuthProvider>,
document.getElementById("root")
);
...@@ -51,6 +51,12 @@ export function exfetchR(data, cb, check) { ...@@ -51,6 +51,12 @@ export function exfetchR(data, cb, check) {
data, data,
}).then(res => { }).then(res => {
if (res.success) { if (res.success) {
let userPermissions = "";
const authRole = res?.data?.authRole || [];
if (authRole.length > 0) {
userPermissions = JSON.stringify(authRole.map(role => role.code));
}
window.localStorage.setItem("userPermissions", userPermissions);
//只有社群的话直接滚走去社群 //只有社群的话直接滚走去社群
if (res.data.isOnlyCommunity) { if (res.data.isOnlyCommunity) {
sessionStorage.setItem("mgtk", res.data.Authorization); sessionStorage.setItem("mgtk", res.data.Authorization);
......
import React, { Component } from "react"; import React, { Component } from "react";
import styles from "./Bread.less"; import styles from "./Bread.less";
import { connect } from "react-redux"; import { connect } from "react-redux";
import Permission from "@/common/permissions/Permission";
import { import {
Divider, Divider,
Popover, Popover,
...@@ -24,10 +25,7 @@ class Breadcrumb extends Component { ...@@ -24,10 +25,7 @@ class Breadcrumb extends Component {
const { collapsed, title } = this.props; const { collapsed, title } = this.props;
return ( return (
<div <div className={collapsed ? styles.collapsed : styles.bread}>
className={collapsed ? styles.collapsed : styles.bread}
>
<span <span
style={{ style={{
fontSize: "20px", fontSize: "20px",
...@@ -36,15 +34,31 @@ class Breadcrumb extends Component { ...@@ -36,15 +34,31 @@ class Breadcrumb extends Component {
lineHeight: "60px", lineHeight: "60px",
marginLeft: "32px", marginLeft: "32px",
backgroundColor: "#FFF", backgroundColor: "#FFF",
marginRight: '20px', marginRight: "20px",
}} }}
> >
菜单管理 菜单管理
</span> </span>
<Button type="primary" style={{ right: '30px', top: '15px', position: 'absolute' }} onClick={() => { this.props.showModal('',"add") }}>新建一级菜单</Button> <Permission
permission={[
</div > "edu_party_member:two",
) "edu_party_member:three",
"edu_site_admin",
]}
mode="or"
>
<Button
type="primary"
style={{ right: "30px", top: "15px", position: "absolute" }}
onClick={() => {
this.props.showModal("", "add");
}}
>
新建一级菜单
</Button>
</Permission>
</div>
);
} }
} }
......
...@@ -26,6 +26,7 @@ import { ...@@ -26,6 +26,7 @@ import {
postUpDown, postUpDown,
getSortListUpDown, getSortListUpDown,
} from "./redux/actions"; } from "./redux/actions";
import Permission from "@/common/permissions/Permission";
const FormItem = Form.Item; const FormItem = Form.Item;
const RadioGroup = Radio.Group; const RadioGroup = Radio.Group;
...@@ -106,53 +107,77 @@ class MenuManager extends React.Component { ...@@ -106,53 +107,77 @@ class MenuManager extends React.Component {
key: "action", key: "action",
render: (text, record, index) => ( render: (text, record, index) => (
<span> <span>
<Popconfirm <Permission
title="确定执行此操作?" permission={[
onConfirm={() => this.onDelete(record)} "edu_party_member:two",
"edu_party_member:three",
"edu_site_admin",
]}
mode="or"
fallback={<span>-</span>}
> >
<a className={styles.handle_button}>{record.enabled == 1 ? '禁用' : "启用"}</a> <Popconfirm
</Popconfirm> title="确定执行此操作?"
onConfirm={() => this.onDelete(record)}
<a >
className={styles.handle_button} <a className={styles.handle_button}>
onClick={() => this.upsidDown(record, -1)} {record.enabled == 1 ? "禁用" : "启用"}
> </a>
上移 </Popconfirm>
<a
className={styles.handle_button}
onClick={() => this.upsidDown(record, -1)}
>
上移
</a> </a>
<a <a
className={styles.handle_button} className={styles.handle_button}
onClick={() => this.upsidDown(record, 1)} onClick={() => this.upsidDown(record, 1)}
> >
下移 下移
</a> </a>
<Dropdown overlay={() => { <Dropdown
return (<Menu > overlay={() => {
<Menu.Item key="0"> return (
<a onClick={() => this.showModal(record, 'edit')} >修改</a> <Menu>
</Menu.Item> <Menu.Item key="0">
{!record.childrenMenus && <a onClick={() => this.showModal(record, "edit")}>
<Menu.Item key="3"> 修改
<Popconfirm </a>
title="是否删除?" </Menu.Item>
onConfirm={() => this.deleteModal(record)} {!record.childrenMenus && (
> <Menu.Item key="3">
<a className={styles.handle_button}>删除</a> <Popconfirm
</Popconfirm> title="是否删除?"
</Menu.Item> onConfirm={() => this.deleteModal(record)}
} >
{record.menuType == 0 && <a className={styles.handle_button}>删除</a>
<Menu.Item key="1"> </Popconfirm>
<a onClick={() => this.showModal(record, 'child')} >添加子菜单</a> </Menu.Item>
</Menu.Item> )}
} {record.menuType == 0 && (
</Menu>) <Menu.Item key="1">
} <a onClick={() => this.showModal(record, "child")}>
} trigger={['click']}> 添加子菜单
<a className={styles.handle_button} onClick={e => e.preventDefault()}> </a>
更多<Icon type="down" /> </Menu.Item>
</a> )}
</Dropdown> </Menu>
);
}}
trigger={["click"]}
>
<a
className={styles.handle_button}
onClick={e => e.preventDefault()}
>
更多
<Icon type="down" />
</a>
</Dropdown>
</Permission>
</span> </span>
), ),
}, },
......
...@@ -20,6 +20,7 @@ import { ...@@ -20,6 +20,7 @@ import {
import { getIficationList } from "../Information/redux/action"; import { getIficationList } from "../Information/redux/action";
import moment from "moment"; import moment from "moment";
import Styles from "./style.less"; import Styles from "./style.less";
import Permission from "@/common/permissions/Permission";
class Atricle extends React.Component { class Atricle extends React.Component {
constructor(props) { constructor(props) {
...@@ -470,91 +471,101 @@ class Atricle extends React.Component { ...@@ -470,91 +471,101 @@ class Atricle extends React.Component {
render: (text, record) => { render: (text, record) => {
return ( return (
<div> <div>
{record.state == "2" && ( <Permission
<div style={{ display: "inline" }}> permission={[
<a "edu_party_member:two",
className={Styles.marr10} "edu_party_member:three",
onClick={() => { "edu_site_admin",
this.setState({ title: "审核" }); ]}
this.seeEdit(record.id, "approve"); mode="or"
}} fallback={<span>-</span>}
> >
审核 {record.state == "2" && (
</a> <div style={{ display: "inline" }}>
</div> <a
)} className={Styles.marr10}
{record.state == "3" && ( onClick={() => {
<div style={{ display: "inline" }}> this.setState({ title: "审核" });
<a this.seeEdit(record.id, "approve");
className={Styles.marr10} }}
onClick={() => this.shelves(record.id, 1)} >
> 审核
发布 </a>
</a> </div>
<a )}
className={Styles.marr10} {record.state == "3" && (
onClick={() => { <div style={{ display: "inline" }}>
this.setState({ title: "编辑" }); <a
this.seeEdit(record.id, "edit"); className={Styles.marr10}
}} onClick={() => this.shelves(record.id, 1)}
> >
编辑 发布
</a> </a>
<a <a
className={Styles.marr10} className={Styles.marr10}
onClick={() => { onClick={() => {
this.setState({ title: "查看" }); this.setState({ title: "编辑" });
this.seeEdit(record.id, "look"); this.seeEdit(record.id, "edit");
}} }}
> >
查看 编辑
</a> </a>
<Popconfirm <a
title="是否删除?" className={Styles.marr10}
onConfirm={() => this.onDelete(record.id)} onClick={() => {
> this.setState({ title: "查看" });
<a className={Styles.marr10}>删除</a> this.seeEdit(record.id, "look");
</Popconfirm> }}
</div> >
)} 查看
{record.state == "4" && ( </a>
<div style={{ display: "inline" }}> <Popconfirm
<a title="是否删除?"
className={Styles.marr10} onConfirm={() => this.onDelete(record.id)}
onClick={() => this.shelves(record.id, 2)} >
> <a className={Styles.marr10}>删除</a>
取消发布 </Popconfirm>
</a> </div>
<a )}
className={Styles.marr10} {record.state == "4" && (
onClick={() => { <div style={{ display: "inline" }}>
this.setState({ title: "查看" }); <a
this.seeEdit(record.id, "look"); className={Styles.marr10}
}} onClick={() => this.shelves(record.id, 2)}
> >
查看 取消发布
</a> </a>
</div> <a
)} className={Styles.marr10}
{record.state == "5" && ( onClick={() => {
<div style={{ display: "inline" }}> this.setState({ title: "查看" });
<a this.seeEdit(record.id, "look");
className={Styles.marr10} }}
onClick={() => { >
this.setState({ title: "查看" }); 查看
this.seeEdit(record.id, "look"); </a>
}} </div>
> )}
查看 {record.state == "5" && (
</a> <div style={{ display: "inline" }}>
<Popconfirm <a
title="是否删除?" className={Styles.marr10}
onConfirm={() => this.onDelete(record.id)} onClick={() => {
> this.setState({ title: "查看" });
<a className={Styles.marr10}>删除</a> this.seeEdit(record.id, "look");
</Popconfirm> }}
</div> >
)} 查看
</a>
<Popconfirm
title="是否删除?"
onConfirm={() => this.onDelete(record.id)}
>
<a className={Styles.marr10}>删除</a>
</Popconfirm>
</div>
)}
</Permission>
</div> </div>
); );
}, },
......
...@@ -18,6 +18,7 @@ import { ...@@ -18,6 +18,7 @@ import {
} from "./redux/actions"; } from "./redux/actions";
import EditBanner from "./editBanner"; import EditBanner from "./editBanner";
import Breadcrumb from "@/common/Breadcrumb"; import Breadcrumb from "@/common/Breadcrumb";
import Permission from '@/common/permissions/Permission';
const Option = Select.Option; const Option = Select.Option;
const textOver = { const textOver = {
...@@ -131,35 +132,51 @@ class Banner extends React.PureComponent { ...@@ -131,35 +132,51 @@ class Banner extends React.PureComponent {
render: (text, record) => { render: (text, record) => {
return ( return (
<div> <div>
{" "} <Permission
{/* record.state == "1" 为上架状态 */} permission={[
<span "edu_party_member:two",
onClick={() => "edu_party_member:three",
this.toEditBanner( "edu_site_admin",
record, ]}
record.state === 1 ? "look" : "edit" mode="or"
) fallback={
<span
onClick={() => this.toEditBanner(record, "look")}
style={{ ...buttonStyle }}
>
查看
</span>
} }
style={{ ...buttonStyle }}
>
{record.state === 1 ? "查看" : "修改"}
</span>
<span
onClick={() => this.handleUpDown(record)}
style={{ ...buttonStyle }}
> >
{record.state === 1 ? "下架" : "上架"} {/* record.state == "1" 为上架状态 */}
</span> <span
{record.state !== 1 ? ( onClick={() =>
<Popconfirm this.toEditBanner(
title="是否删除?" record,
onConfirm={() => this.handleDelete(record)} record.state === 1 ? "look" : "edit"
)
}
style={{ ...buttonStyle }}
>
{record.state === 1 ? "查看" : "修改"}
</span>
<span
onClick={() => this.handleUpDown(record)}
style={{ ...buttonStyle }}
> >
<span style={{ ...buttonStyle }}>删除</span> {record.state === 1 ? "下架" : "上架"}
</Popconfirm> </span>
) : ( {record.state !== 1 ? (
"" <Popconfirm
)} title="是否删除?"
onConfirm={() => this.handleDelete(record)}
>
<span style={{ ...buttonStyle }}>删除</span>
</Popconfirm>
) : (
""
)}
</Permission>
</div> </div>
); );
}, },
...@@ -364,13 +381,15 @@ class Banner extends React.PureComponent { ...@@ -364,13 +381,15 @@ class Banner extends React.PureComponent {
</Col> </Col>
<Col span={8} offset={16}> <Col span={8} offset={16}>
<FormItem> <FormItem>
<Button <Permission permission={['edu_party_member:two', 'edu_party_member:three', 'edu_site_admin']} mode="or">
type="primary" <Button
onClick={() => this.toEditBanner({}, "add")} type="primary"
style={{ marginRight: 8 }} onClick={() => this.toEditBanner({}, "add")}
> style={{ marginRight: 8 }}
新建Banner >
</Button> 新建Banner
</Button>
</Permission>
<Button <Button
type="primary" type="primary"
onClick={() => { onClick={() => {
......
import React from "react"; import React from "react";
import { Row, Col, Form, Icon, Input, Button, DatePicker, Select } from "antd"; import { Row, Col, Form, Icon, Input, Button, DatePicker, Select } from "antd";
import Permission from "@/common/permissions/Permission";
const FormItem = Form.Item; const FormItem = Form.Item;
const Option = Select.Option; const Option = Select.Option;
const RangePicker = DatePicker.RangePicker; const RangePicker = DatePicker.RangePicker;
...@@ -100,13 +101,24 @@ class Header extends React.Component { ...@@ -100,13 +101,24 @@ class Header extends React.Component {
> >
重置 重置
</Button> </Button>
<Button <Permission
type="primary" permission={[
style={{ marginLeft: "30px" }} "edu_general_user:one",
onClick={this.showModal} "edu_party_member:one",
"edu_party_member:two",
"edu_party_member:three",
"edu_site_admin",
]}
mode="or"
> >
新建内容 <Button
</Button> type="primary"
style={{ marginLeft: "30px" }}
onClick={this.showModal}
>
新建内容
</Button>
</Permission>
</FormItem> </FormItem>
</Col> </Col>
</Form> </Form>
......
...@@ -52,6 +52,7 @@ import { ...@@ -52,6 +52,7 @@ import {
import moment from "moment"; import moment from "moment";
import Styles from "./index.less"; import Styles from "./index.less";
import InfoComment from "./InfoComment.jsx"; import InfoComment from "./InfoComment.jsx";
import Permission from "@/common/permissions/Permission";
const TreeNode = Tree.TreeNode; const TreeNode = Tree.TreeNode;
const FormItem = Form.Item; const FormItem = Form.Item;
const Option = Select.Option; const Option = Select.Option;
...@@ -273,49 +274,67 @@ class TreeItem extends React.Component { ...@@ -273,49 +274,67 @@ class TreeItem extends React.Component {
</span> </span>
{type == "News" && data.name != "公告" {type == "News" && data.name != "公告"
? addshow && ( ? addshow && (
<span <span
style={{ float: "right", position: "absolute", right: "15%" }} //bug-12640-liyuan 30 -> 15% style={{ float: "right", position: "absolute", right: "15%" }} //bug-12640-liyuan 30 -> 15%
> >
<Icon <Permission
type="plus" permission={[
className={Styles.pmEditIcon} "edu_party_member:two",
onClick={() => this.showModal("1")} "edu_party_member:three",
/> "edu_site_admin",
<Icon ]}
type="edit" mode="or"
className={Styles.pmEditIcon} >
onClick={() => this.showModal("2")} <Icon
/> type="plus"
{/* <Icon className={Styles.pmEditIcon}
onClick={() => this.showModal("1")}
/>
<Icon
type="edit"
className={Styles.pmEditIcon}
onClick={() => this.showModal("2")}
/>
{/* <Icon
type="delete" type="delete"
className={Styles.pmEditIcon} className={Styles.pmEditIcon}
onClick={() => this.onDelete()} onClick={() => this.onDelete()}
/> */} /> */}
</span> </Permission>
) </span>
)
: ""} : ""}
{type == "" {type == ""
? show && ( ? show && (
<span <span
style={{ float: "right", position: "absolute", right: "15%" }} //bug-12640-liyuan 30 -> 15% style={{ float: "right", position: "absolute", right: "15%" }} //bug-12640-liyuan 30 -> 15%
> >
<Icon <Permission
type="plus" permission={[
className={Styles.pmEditIcon} "edu_party_member:two",
onClick={() => this.showModal("1")} "edu_party_member:three",
/> "edu_site_admin",
<Icon ]}
type="edit" mode="or"
className={Styles.pmEditIcon} >
onClick={() => this.showModal("2")} <Icon
/> type="plus"
<Icon className={Styles.pmEditIcon}
type="delete" onClick={() => this.showModal("1")}
className={Styles.pmEditIcon} />
onClick={() => this.onDelete()} <Icon
/> type="edit"
</span> className={Styles.pmEditIcon}
) onClick={() => this.showModal("2")}
/>
<Icon
type="delete"
className={Styles.pmEditIcon}
onClick={() => this.onDelete()}
/>
</Permission>
</span>
)
: ""} : ""}
</p> </p>
</div> </div>
...@@ -1067,63 +1086,72 @@ class Information extends React.Component { ...@@ -1067,63 +1086,72 @@ class Information extends React.Component {
render: (text, record) => { render: (text, record) => {
return ( return (
<div> <div>
<a <Permission
className={Styles.marr10} permission={[
onClick={() => this.cancelRoof(record.id)} "edu_general_user:one",
> "edu_party_member:one",
{record.isTop == "1" ? "移除首页" : "同步首页"} "edu_party_member:two",
</a> "edu_party_member:three",
<a "edu_site_admin",
className={Styles.marr10} ]}
onClick={() => this.showComment(record.id, record.name)} fallback={<span>-</span>}
mode="or"
> >
评论管理 <a
</a> className={Styles.marr10}
{record.state == "2" ? ( onClick={() => this.cancelRoof(record.id)}
<div style={{ display: "inline" }}> >
<a {record.isTop == "1" ? "移除首页" : "同步首页"}
className={Styles.marr10} </a>
onClick={() => this.offshelf(record.id)} <a
> className={Styles.marr10}
下架 onClick={() => this.showComment(record.id, record.name)}
</a> >
<a 评论管理
className={Styles.marr10} </a>
onClick={() => this.seeEdit(record.id, "look")} {record.state == "2" ? (
> <div style={{ display: "inline" }}>
查看
</a>
</div>
) : (
<div style={{ display: "inline" }}>
<a
className={Styles.marr10}
onClick={() => this.shelves(record.id)}
>
上架
</a>
<a
className={Styles.marr10}
onClick={() => this.seeEdit(record.id, "edit")}
>
编辑
</a>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.delete(record.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a <a
className={Styles.marr10} className={Styles.marr10}
href="#" onClick={() => this.offshelf(record.id)}
> >
删除 下架
</a> </a>
</Popconfirm> <a
</div> className={Styles.marr10}
)} onClick={() => this.seeEdit(record.id, "look")}
>
查看
</a>
</div>
) : (
<div style={{ display: "inline" }}>
<a
className={Styles.marr10}
onClick={() => this.shelves(record.id)}
>
上架
</a>
<a
className={Styles.marr10}
onClick={() => this.seeEdit(record.id, "edit")}
>
编辑
</a>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.delete(record.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a className={Styles.marr10} href="#">
删除
</a>
</Popconfirm>
</div>
)}
</Permission>
</div> </div>
); );
}, },
...@@ -1171,9 +1199,18 @@ class Information extends React.Component { ...@@ -1171,9 +1199,18 @@ class Information extends React.Component {
borderRadius: 5, borderRadius: 5,
}} }}
> >
<Button type="primary" onClick={() => this.showEidt()}> <Permission
新增一级分类 permission={[
</Button> "edu_party_member:two",
"edu_party_member:three",
"edu_site_admin",
]}
mode="or"
>
<Button type="primary" onClick={() => this.showEidt()}>
新增一级分类
</Button>
</Permission>
<Tree <Tree
className="draggable-tree" className="draggable-tree"
draggable draggable
......
...@@ -13,6 +13,7 @@ import func from "@/common/commonFunc"; ...@@ -13,6 +13,7 @@ import func from "@/common/commonFunc";
import Breadcrumb from "@/common/Breadcrumb"; import Breadcrumb from "@/common/Breadcrumb";
import AddEditForm from "./addEditForm"; import AddEditForm from "./addEditForm";
import { connect } from "react-redux"; import { connect } from "react-redux";
import Permission from "@/common/permissions/Permission";
import { import {
// postReleases, // postReleases,
// postUnReleases, // postUnReleases,
...@@ -428,12 +429,21 @@ class Mailbox extends React.Component { ...@@ -428,12 +429,21 @@ class Mailbox extends React.Component {
查看 查看
</a> </a>
</div> </div>
<Popconfirm <Permission
title="是否删除?" permission={[
onConfirm={() => this.onDelete(record.id)} "edu_party_member:two",
"edu_party_member:three",
"edu_site_admin",
]}
mode="or"
> >
<a className={Styles.marr10}>删除</a> <Popconfirm
</Popconfirm> title="是否删除?"
onConfirm={() => this.onDelete(record.id)}
>
<a className={Styles.marr10}>删除</a>
</Popconfirm>
</Permission>
</div> </div>
); );
}, },
......
...@@ -10,6 +10,7 @@ import { connect } from "react-redux"; ...@@ -10,6 +10,7 @@ import { connect } from "react-redux";
import { gupList, gupfetch } from "@/common/UpLoad/redux/actions"; import { gupList, gupfetch } from "@/common/UpLoad/redux/actions";
import moment from "moment"; import moment from "moment";
import validator from "@/common/validatorForm/index"; import validator from "@/common/validatorForm/index";
import Permission from "@/common/permissions/Permission";
const FormItem = Form.Item; const FormItem = Form.Item;
class addEdit extends React.Component { class addEdit extends React.Component {
...@@ -151,11 +152,24 @@ class addEdit extends React.Component { ...@@ -151,11 +152,24 @@ class addEdit extends React.Component {
onCancel={onCancel} onCancel={onCancel}
footer={ footer={
<> <>
{state === 1 && ( <Permission
<Button key="1" type="primary" onClick={() => onApprove(id, 2)}> permission={[
接收 "edu_party_member:two",
</Button> "edu_party_member:three",
)} "edu_site_admin",
]}
mode="or"
>
{state === 1 && (
<Button
key="1"
type="primary"
onClick={() => onApprove(id, 2)}
>
接收
</Button>
)}
</Permission>
<Button key="3" type="primary" onClick={onCancel}> <Button key="3" type="primary" onClick={onCancel}>
返回 返回
</Button> </Button>
...@@ -167,10 +181,7 @@ class addEdit extends React.Component { ...@@ -167,10 +181,7 @@ class addEdit extends React.Component {
{getFieldDecorator("name", { {getFieldDecorator("name", {
initialValue: seeEdit && seeEdit.name, initialValue: seeEdit && seeEdit.name,
})( })(
<Input <Input disabled={type !== "edit"} style={{ width: "300px" }} />
disabled={type !== "edit"}
style={{ width: "300px" }}
/>
)} )}
</FormItem> </FormItem>
<FormItem {...formItemLayout} label="留言图片"> <FormItem {...formItemLayout} label="留言图片">
...@@ -181,7 +192,11 @@ class addEdit extends React.Component { ...@@ -181,7 +192,11 @@ class addEdit extends React.Component {
key={index} key={index}
src={item} src={item}
alt="" alt=""
style={{ width: "200px", height: "240px", cursor: 'pointer' }} style={{
width: "200px",
height: "240px",
cursor: "pointer",
}}
onClick={() => this.handlePreview(item)} onClick={() => this.handlePreview(item)}
/> />
))} ))}
...@@ -204,7 +219,7 @@ class addEdit extends React.Component { ...@@ -204,7 +219,7 @@ class addEdit extends React.Component {
footer={null} footer={null}
onCancel={this.handleCancel} onCancel={this.handleCancel}
> >
<img alt="preview" style={{ width: '100%' }} src={previewImage} /> <img alt="preview" style={{ width: "100%" }} src={previewImage} />
</Modal> </Modal>
</> </>
); );
......
...@@ -18,6 +18,7 @@ import { ...@@ -18,6 +18,7 @@ import {
getList, getList,
} from "./redux/action"; } from "./redux/action";
import moment from "moment"; import moment from "moment";
import Permission from "@/common/permissions/Permission";
import Styles from "./style.less"; import Styles from "./style.less";
const TreeNode = Tree.TreeNode; const TreeNode = Tree.TreeNode;
const FormItem = Form.Item; const FormItem = Form.Item;
...@@ -438,14 +439,23 @@ class Message extends React.Component { ...@@ -438,14 +439,23 @@ class Message extends React.Component {
查看 查看
</a> </a>
</div> </div>
<div style={{ display: "inline" }}> <Permission
<Popconfirm permission={[
title="是否删除?" "edu_party_member:two",
onConfirm={() => this.delect(record.id)} "edu_party_member:three",
> "edu_site_admin",
<a className={Styles.marr10}>删除</a> ]}
</Popconfirm> mode="or"
</div> >
<div style={{ display: "inline" }}>
<Popconfirm
title="是否删除?"
onConfirm={() => this.delect(record.id)}
>
<a className={Styles.marr10}>删除</a>
</Popconfirm>
</div>
</Permission>
</div> </div>
); );
}, },
......
...@@ -26,6 +26,7 @@ import { ...@@ -26,6 +26,7 @@ import {
} from "./redux/actions"; } from "./redux/actions";
import moment from "moment"; import moment from "moment";
import HandleMessageCheck from "./handleMessageCheck"; import HandleMessageCheck from "./handleMessageCheck";
import Permission from "@/common/permissions/Permission";
import Style from "./index.less"; import Style from "./index.less";
const TabPane = Tabs.TabPane; const TabPane = Tabs.TabPane;
// require('./index.scss'); // require('./index.scss');
...@@ -475,41 +476,52 @@ class News extends React.Component { ...@@ -475,41 +476,52 @@ class News extends React.Component {
{ {
<div> <div>
<a onClick={() => this.customSee(record)}>查看</a> <a onClick={() => this.customSee(record)}>查看</a>
<Divider type="vertical" /> <Permission
<a permission={[
disabled={record.status == 1 ? false : true} "edu_party_member:two",
onClick={() => this.customModify(record)} "edu_party_member:three",
> "edu_site_admin",
修改 ]}
</a> mode="or"
<Divider type="vertical" />
<Popconfirm
title="是否发送?"
onConfirm={() => this.onSend(record, true, 0)}
>
<a disabled={record.status == 1 ? false : true}>发送</a>
</Popconfirm>
<Divider type="vertical" />
<Popconfirm
title="是否删除?"
onConfirm={() => this.onDelete(record)}
> >
<a disabled={record.status == 1 ? false : true}>删除</a> <Divider type="vertical" />
</Popconfirm> <a
<Divider type="vertical" /> disabled={record.status == 1 ? false : true}
<Popconfirm onClick={() => this.customModify(record)}
title="是否删除?" >
onConfirm={() => this.onSend(record, false, 2)} 修改
> </a>
<a disabled={record.status == 4 ? false : true}>撤回</a> <Divider type="vertical" />
</Popconfirm> <Popconfirm
<Divider type="vertical" /> title="是否发送?"
<Popconfirm onConfirm={() => this.onSend(record, true, 0)}
title="取消发送?" >
onConfirm={() => this.onSend(record, false, 1)} <a disabled={record.status == 1 ? false : true}>发送</a>
> </Popconfirm>
<a disabled={record.status == 2 ? false : true}>取消发送</a> <Divider type="vertical" />
</Popconfirm> <Popconfirm
title="是否删除?"
onConfirm={() => this.onDelete(record)}
>
<a disabled={record.status == 1 ? false : true}>删除</a>
</Popconfirm>
<Divider type="vertical" />
<Popconfirm
title="是否删除?"
onConfirm={() => this.onSend(record, false, 2)}
>
<a disabled={record.status == 4 ? false : true}>撤回</a>
</Popconfirm>
<Divider type="vertical" />
<Popconfirm
title="取消发送?"
onConfirm={() => this.onSend(record, false, 1)}
>
<a disabled={record.status == 2 ? false : true}>
取消发送
</a>
</Popconfirm>
</Permission>
</div> </div>
} }
</div> </div>
...@@ -549,29 +561,38 @@ class News extends React.Component { ...@@ -549,29 +561,38 @@ class News extends React.Component {
return ( return (
<div> <div>
<a onClick={() => this.systemModify(record, "look")}>查看</a> <a onClick={() => this.systemModify(record, "look")}>查看</a>
<Divider type="vertical" /> <Permission
<a permission={[
disabled={record.status == "7" ? true : false} "edu_party_member:two",
onClick={() => this.systemModify(record)} "edu_party_member:three",
"edu_site_admin",
]}
mode="or"
> >
修改 <Divider type="vertical" />
</a> <a
<Divider type="vertical" /> disabled={record.status == "7" ? true : false}
<a onClick={() => this.systemModify(record)}
disabled={record.status == "7" ? true : false} >
onClick={() => this.messageShelves(record, 2, 2)} 修改
> </a>
上架 <Divider type="vertical" />
</a> <a
<Divider type="vertical" /> disabled={record.status == "7" ? true : false}
<a onClick={() => this.messageShelves(record, 2, 2)}
disabled={ >
record.status == "6" || record.siteId === "0" ? true : false 上架
} </a>
onClick={() => this.messageOffShelf(record, 2, 2)} <Divider type="vertical" />
> <a
下架 disabled={
</a> record.status == "6" || record.siteId === "0" ? true : false
}
onClick={() => this.messageOffShelf(record, 2, 2)}
>
下架
</a>
</Permission>
</div> </div>
); );
}, },
...@@ -615,27 +636,36 @@ class News extends React.Component { ...@@ -615,27 +636,36 @@ class News extends React.Component {
<a onClick={() => this.messageCheckModify(record, "look")}> <a onClick={() => this.messageCheckModify(record, "look")}>
查看 查看
</a> </a>
<Divider type="vertical" /> <Permission
<a permission={[
disabled={record.status == "7" ? true : false} "edu_party_member:two",
onClick={() => this.messageCheckModify(record)} "edu_party_member:three",
> "edu_site_admin",
修改 ]}
</a> mode="or"
<Divider type="vertical" />
<a
disabled={record.status == "6" ? true : false}
onClick={() => this.messageOffShelf(record, 3, 3)}
>
下架
</a>
<Divider type="vertical" />
<a
disabled={record.status == "7" ? true : false}
onClick={() => this.messageShelves(record, 3, 3)}
> >
上架 <Divider type="vertical" />
</a> <a
disabled={record.status == "7" ? true : false}
onClick={() => this.messageCheckModify(record)}
>
修改
</a>
<Divider type="vertical" />
<a
disabled={record.status == "6" ? true : false}
onClick={() => this.messageOffShelf(record, 3, 3)}
>
下架
</a>
<Divider type="vertical" />
<a
disabled={record.status == "7" ? true : false}
onClick={() => this.messageShelves(record, 3, 3)}
>
上架
</a>
</Permission>
</div> </div>
</div> </div>
); );
...@@ -722,14 +752,23 @@ class News extends React.Component { ...@@ -722,14 +752,23 @@ class News extends React.Component {
QueryForm={this.QueryForm} QueryForm={this.QueryForm}
onClickChange={this.onClickChange} onClickChange={this.onClickChange}
/> />
<Button <Permission
className={Style.marl40} permission={[
type="primary" "edu_party_member:two",
onClick={this.showModal} "edu_party_member:three",
disabled={this.state.addNewBtnAbled} "edu_site_admin",
]}
mode="or"
> >
新增消息 <Button
</Button> className={Style.marl40}
type="primary"
onClick={this.showModal}
disabled={this.state.addNewBtnAbled}
>
新增消息
</Button>
</Permission>
{this.state.visible && ( {this.state.visible && (
<AddQueryModal <AddQueryModal
handleSearch={this.handleSearch} handleSearch={this.handleSearch}
......
...@@ -6,6 +6,7 @@ import UpdataDepartment from "./UpdataDepartment/UpdataDepartment"; ...@@ -6,6 +6,7 @@ import UpdataDepartment from "./UpdataDepartment/UpdataDepartment";
import DepartmentForm from "./Department/Department"; import DepartmentForm from "./Department/Department";
import styles from "./index.less"; import styles from "./index.less";
import ScrollBar from "../../Operating/LanguageConfiguration/ScrollBar"; import ScrollBar from "../../Operating/LanguageConfiguration/ScrollBar";
import Permission from "@/common/permissions/Permission";
// const Search = Input.Search; // const Search = Input.Search;
const TreeNode = Tree.TreeNode; const TreeNode = Tree.TreeNode;
const FormItem = Form.Item; const FormItem = Form.Item;
...@@ -159,13 +160,13 @@ class TreeItem extends Component { ...@@ -159,13 +160,13 @@ class TreeItem extends Component {
{...this.props} {...this.props}
/> />
) : ( ) : (
<DepartmentForm <DepartmentForm
onCancel={this.handleCancel} onCancel={this.handleCancel}
{...this.state} {...this.state}
layer={layer} layer={layer}
InsertTree={this.props.InsertTree} InsertTree={this.props.InsertTree}
/> />
)} )}
</Modal> </Modal>
)} )}
</div> </div>
...@@ -183,13 +184,20 @@ class TreeItem extends Component { ...@@ -183,13 +184,20 @@ class TreeItem extends Component {
> >
<span <span
className={ className={
show && !isUserGroup ? show && !isUserGroup
layer === 8 ? styles.itemTitleHover8 : ? layer === 8
layer === 7 ? styles.itemTitleHover7 : ? styles.itemTitleHover8
layer === 6 ? styles.itemTitleHover6 : : layer === 7
layer === 5 ? styles.itemTitleHover5 : ? styles.itemTitleHover7
layer === 4 ? styles.itemTitleHover4 : : layer === 6
layer === 3 ? styles.itemTitleHover3 : styles.itemTitleHover2 ? styles.itemTitleHover6
: layer === 5
? styles.itemTitleHover5
: layer === 4
? styles.itemTitleHover4
: layer === 3
? styles.itemTitleHover3
: styles.itemTitleHover2
: styles.itemTitle : styles.itemTitle
} }
title={data.name} title={data.name}
...@@ -197,23 +205,25 @@ class TreeItem extends Component { ...@@ -197,23 +205,25 @@ class TreeItem extends Component {
{data.name} {data.name}
</span> </span>
{(show && !isUserGroup && ( {show && !isUserGroup && (
<span style={{ float: "right" }}> <span style={{ float: "right" }}>
<Dropdown overlay={menu} trigger={['click']}> <Permission
permission={["edu_party_member:three", "edu_site_admin"]}
mode="or"
>
<Dropdown overlay={menu} trigger={["click"]}>
<Icon type="more" />
</Dropdown>
<Icon <Icon
type="more" style={{ marginLeft: "2px" }}
type="plus"
onClick={() => this.showModal("新增部门")}
/> />
</Dropdown> </Permission>
<Icon
style={{ marginLeft: "2px" }}
type="plus"
onClick={() => this.showModal("新增部门")}
/>
</span> </span>
))} )}
</p> </p>
{/* </Popover> */} {/* </Popover> */}
</div> </div>
); );
} }
......
...@@ -7,6 +7,7 @@ import EditPasswords from "../EditPassword/EditPassword"; ...@@ -7,6 +7,7 @@ import EditPasswords from "../EditPassword/EditPassword";
import moment from "moment"; import moment from "moment";
import { sm2 } from "sm-crypto"; import { sm2 } from "sm-crypto";
import md5 from "md5"; import md5 from "md5";
import Permission from "@/common/permissions/Permission";
class UserTable extends Component { class UserTable extends Component {
constructor(props) { constructor(props) {
...@@ -90,24 +91,30 @@ class UserTable extends Component { ...@@ -90,24 +91,30 @@ class UserTable extends Component {
render: (text, record, index) => { render: (text, record, index) => {
return ( return (
<span> <span>
{record.enabled === "启用" ? ( <Permission
<a onClick={() => this.handleEdit("停用", record)}>停用</a> permission={["edu_party_member:three", "edu_site_admin"]}
) : ( mode="or"
<a onClick={() => this.handleOpen("启用", record)}>启用</a> fallback={<span>-</span>}
)}
<Divider type="vertical" />
<a
data-index={index}
onClick={() => this.handleEditUser("编辑用户", record)}
> >
修改用户 {record.enabled === "启用" ? (
</a> <a onClick={() => this.handleEdit("停用", record)}>停用</a>
<Divider type="vertical" /> ) : (
<a onClick={() => this.handleEditPassWord("修改密码", record)}> <a onClick={() => this.handleOpen("启用", record)}>启用</a>
修改密码 )}
</a> <Divider type="vertical" />
<Divider type="vertical" /> <a
<a onClick={() => this.handleResetPassword(record)}>重置密码</a> data-index={index}
onClick={() => this.handleEditUser("编辑用户", record)}
>
修改用户
</a>
<Divider type="vertical" />
<a onClick={() => this.handleEditPassWord("修改密码", record)}>
修改密码
</a>
<Divider type="vertical" />
<a onClick={() => this.handleResetPassword(record)}>重置密码</a>
</Permission>
</span> </span>
); );
}, },
......
...@@ -218,7 +218,7 @@ class AddRotes extends Component { ...@@ -218,7 +218,7 @@ class AddRotes extends Component {
message: "请输入角色序号,数字字母下划线组成", message: "请输入角色序号,数字字母下划线组成",
}, },
], ],
})(<Input placeholder="角色序号" maxLength={20} />)} })(<Input placeholder="角色序号" maxLength={30} />)}
</FormItem> </FormItem>
<FormItem {...formItemLayout} label="角色名:"> <FormItem {...formItemLayout} label="角色名:">
{getFieldDecorator("name", { {getFieldDecorator("name", {
......
...@@ -20,6 +20,7 @@ import { connect } from "react-redux"; ...@@ -20,6 +20,7 @@ import { connect } from "react-redux";
import * as actions from "./redux/actions"; import * as actions from "./redux/actions";
import AddRotes from "./AddRotes"; import AddRotes from "./AddRotes";
import RoteCheck from "./RoteCheck"; import RoteCheck from "./RoteCheck";
import Permission from "@/common/permissions/Permission";
const Option = Select.Option; const Option = Select.Option;
class RoteManager extends React.Component { class RoteManager extends React.Component {
...@@ -98,30 +99,35 @@ class RoteManager extends React.Component { ...@@ -98,30 +99,35 @@ class RoteManager extends React.Component {
key: "action", key: "action",
render: (text, record, index) => ( render: (text, record, index) => (
<span> <span>
<a <Permission
data-index={index} permission={["edu_site_admin"]}
onClick={() => this.editModal("修改角色", record)} mode="or"
fallback={<span>-</span>}
> >
修改 <a
</a> data-index={index}
<Divider type="vertical" /> onClick={() => this.editModal("修改角色", record)}
<a >
data-index={index} 修改
onClick={() => this.etModal("授权用户", record)} </a>
> <Divider type="vertical" />
授权用户 <a
</a> data-index={index}
<Divider type="vertical" /> onClick={() => this.etModal("授权用户", record)}
<a >
data-index={index} 授权用户
onClick={() => this.roleManageModal(record.id, "管理对象")} </a>
> <Divider type="vertical" />
管理对象 <a
</a> data-index={index}
<Divider type="vertical" /> onClick={() => this.roleManageModal(record.id, "管理对象")}
{ >
record.isSiteDefaultAdmin ? 管理对象
<a style={{color:"#999"}}>删除</a> : </a>
<Divider type="vertical" />
{record.isSiteDefaultAdmin ? (
<a style={{ color: "#999" }}>删除</a>
) : (
<Popconfirm <Popconfirm
title="是否要删除此行?" title="是否要删除此行?"
onConfirm={() => onConfirm={() =>
...@@ -132,8 +138,8 @@ class RoteManager extends React.Component { ...@@ -132,8 +138,8 @@ class RoteManager extends React.Component {
> >
<a>删除</a> <a>删除</a>
</Popconfirm> </Popconfirm>
} )}
</Permission>
</span> </span>
), ),
}, },
...@@ -363,7 +369,7 @@ class RoteManager extends React.Component { ...@@ -363,7 +369,7 @@ class RoteManager extends React.Component {
return ( return (
<div className="list" style={{ paddingLeft: "20px" }}> <div className="list" style={{ paddingLeft: "20px" }}>
<Breadcrumb title="角色管理" /> <Breadcrumb title="角色管理" />
<div className="list-btn" style={{paddingTop:15}}> <div className="list-btn" style={{ paddingTop: 15 }}>
<div ref={input => (this.input = input)}> <div ref={input => (this.input = input)}>
{/*<Input placeholder="请输入角色序号或角色名" style={{width: 250, marginRight: 10}} onKeyDown={this.getExamKeyword} onChange={this.handleGetValue} />*/} {/*<Input placeholder="请输入角色序号或角色名" style={{width: 250, marginRight: 10}} onKeyDown={this.getExamKeyword} onChange={this.handleGetValue} />*/}
<Input <Input
...@@ -378,9 +384,17 @@ class RoteManager extends React.Component { ...@@ -378,9 +384,17 @@ class RoteManager extends React.Component {
> >
搜索 搜索
</Button> </Button>
<Button type="primary" onClick={() => this.insertModal("创建角色")}> <Permission
创建角色 permission={["edu_site_admin"]}
</Button> mode="or"
>
<Button
type="primary"
onClick={() => this.insertModal("创建角色")}
>
创建角色
</Button>
</Permission>
</div> </div>
</div> </div>
<Table <Table
......
...@@ -6,13 +6,24 @@ import { connect } from "react-redux"; ...@@ -6,13 +6,24 @@ import { connect } from "react-redux";
import { getSiteList, releaseSite, unReleaseSite } from "./redux/actions"; import { getSiteList, releaseSite, unReleaseSite } from "./redux/actions";
import func from "@/common/commonFunc"; import func from "@/common/commonFunc";
import Breadcrumb from "@/common/Breadcrumb"; import Breadcrumb from "@/common/Breadcrumb";
import Permission from "@/common/permissions/Permission";
class Door extends Component { class Door extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.columns = [ this.columns = [
{ title: "终端", key: "site", dataIndex: "site", align: "left" }, { title: "终端", key: "site", dataIndex: "site", align: "left" },
{ title: "操作人", key: "operation", dataIndex: "operation", align: "left" }, {
{ title: "最后操作日期", key: "lastTime", dataIndex: "lastTime", align: "left" }, title: "操作人",
key: "operation",
dataIndex: "operation",
align: "left",
},
{
title: "最后操作日期",
key: "lastTime",
dataIndex: "lastTime",
align: "left",
},
{ title: "状态", key: "status", dataIndex: "status", align: "left" }, { title: "状态", key: "status", dataIndex: "status", align: "left" },
{ {
title: "操作", title: "操作",
...@@ -21,71 +32,81 @@ class Door extends Component { ...@@ -21,71 +32,81 @@ class Door extends Component {
dataIndex: "action", dataIndex: "action",
render: (text, record) => ( render: (text, record) => (
<div className={Styles.doorOpt}> <div className={Styles.doorOpt}>
{text.state == 0 ? ( <Permission
<a permission={[
// href={"javascript:void(0)"} "edu_party_member:two",
onClick={() => this.changeSiteStatus("on", text.id)} "edu_party_member:three",
"edu_site_admin",
]}
mode="or"
fallback={<span>-</span>}
>
{text.state == 0 ? (
<a
// href={"javascript:void(0)"}
onClick={() => this.changeSiteStatus("on", text.id)}
>
发布
</a>
) : (
<a
// href={"javascript:void(0)"}
onClick={() => this.changeSiteStatus("off", text.id)}
>
取消发布
</a>
)}
<Link
to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
(record.action.type !== 1
? "/index/manager/site/door/previewindexpage"
: "/index/manager/site/door/pcIndex"),
// query: { id: text.id, type: text.type, lookState: true },
state: { id: text.id, type: text.type, lookState: true },
search: `?id=${text.id}&type=${text.type}&lookState=true`,
}}
> >
发布 预览
</a> </Link>
) : ( <Link
<a to={{
// href={"javascript:void(0)"} pathname:
onClick={() => this.changeSiteStatus("off", text.id)} "/" +
func.companyCode +
"/" +
func.siteCode +
(record.action.type !== 1
? "/index/manager/site/door/indexpage"
: "/index/manager/site/door/pcIndex"),
// query: { id: text.id, type: text.type },
search: `?{id:${text.id}&type:${text.type}}`,
state: { id: text.id, type: text.type },
}}
> >
取消发布 配置首页
</a> </Link>
)} <Link
<Link to={{
to={{ pathname:
pathname: "/" +
"/" + func.companyCode +
func.companyCode + "/" +
"/" + func.siteCode +
func.siteCode + (record.action.type !== 1
(record.action.type !== 1 ? "/index/manager/site/door/loginpage"
? "/index/manager/site/door/previewindexpage" : "/index/manager/site/door/pcLogin"),
: "/index/manager/site/door/pcIndex"), search: `?{id:${text.id}&type:${text.type}}`, //bug-12548-liyuan
// query: { id: text.id, type: text.type, lookState: true }, state: { id: text.id, type: text.type },
state: { id: text.id, type: text.type, lookState: true }, }}
search: `?id=${text.id}&type=${text.type}&lookState=true`, >
}} 配置登录页
> </Link>
预览 </Permission>
</Link>
<Link
to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
(record.action.type !== 1
? "/index/manager/site/door/indexpage"
: "/index/manager/site/door/pcIndex"),
// query: { id: text.id, type: text.type },
search: `?{id:${text.id}&type:${text.type}}`,
state: { id: text.id, type: text.type },
}}
>
配置首页
</Link>
<Link
to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
(record.action.type !== 1
? "/index/manager/site/door/loginpage"
: "/index/manager/site/door/pcLogin"),
search: `?{id:${text.id}&type:${text.type}}`, //bug-12548-liyuan
state: { id: text.id, type: text.type },
}}
>
配置登录页
</Link>
</div> </div>
), ),
}, },
......
...@@ -23,6 +23,7 @@ import { ...@@ -23,6 +23,7 @@ import {
message, message,
} from "antd"; } from "antd";
import Breadcrumb from "@/common/Breadcrumb"; import Breadcrumb from "@/common/Breadcrumb";
import Permission from "@/common/permissions/Permission";
const TabPane = Tabs.TabPane; const TabPane = Tabs.TabPane;
import styles from "./style/index.less"; import styles from "./style/index.less";
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
...@@ -317,96 +318,106 @@ class Survey extends Component { ...@@ -317,96 +318,106 @@ class Survey extends Component {
key: "action", key: "action",
render: (text, record) => ( render: (text, record) => (
<div className={styles.survey_list_btns}> <div className={styles.survey_list_btns}>
{key == 1 ? ( <Permission
<Link permission={[
to={`/${companyCode}/${siteCode}/index/tool/question/question-management/details/${record.id}/2`} "edu_party_member:two",
> "edu_party_member:three",
<span "edu_site_admin",
className={styles.survey_list_btn} ]}
style={{ marginRight: 10 }} mode="or"
> fallback={<span>-</span>}
{action1} >
</span> {key == 1 ? (
</Link> <Link
) : key == 2 ? ( to={`/${companyCode}/${siteCode}/index/tool/question/question-management/details/${record.id}/2`}
<Link
// to={`/${companyCode}/${siteCode}/index/tool/question/question-management/create/${record.id}`}
to={`/${companyCode}/${siteCode}/index/tool/question/question-management/details/${record.id}/1`}
>
<span
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
> >
{action1} <span
</span> className={styles.survey_list_btn}
</Link> style={{ marginRight: 10 }}
) : ( >
<Link {action1}
to={`/${companyCode}/${siteCode}/index/tool/question/question-management/create/${record.id}`} </span>
> </Link>
<span ) : key == 2 ? (
className={styles.survey_list_btn} <Link
style={{ marginRight: 10 }} // to={`/${companyCode}/${siteCode}/index/tool/question/question-management/create/${record.id}`}
to={`/${companyCode}/${siteCode}/index/tool/question/question-management/details/${record.id}/1`}
> >
{action1} <span
</span> className={styles.survey_list_btn}
</Link> style={{ marginRight: 10 }}
)} >
<Popconfirm {action1}
title="确定执行此操作?" </span>
okText="确定" </Link>
cancelText="取消" ) : (
onConfirm={ <Link
action2 === "上架" to={`/${companyCode}/${siteCode}/index/tool/question/question-management/create/${record.id}`}
? () => this.handleUp(record.id)
: () => this.handleDown(record.id)
}
>
<a
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
href="#"
>
{action2}
</a>
</Popconfirm>
{key == 2 ? (
<div>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.del(record.id)}
> >
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/} <span
<a
className={styles.survey_list_btn} className={styles.survey_list_btn}
style={{ marginRight: 10 }} style={{ marginRight: 10 }}
href="#"
> >
删除 {action1}
</a> </span>
</Popconfirm> </Link>
</div> )}
) : null} <Popconfirm
{key == 1 || key == 2 ? ( title="确定执行此操作?"
<div> okText="确定"
<div cancelText="取消"
onConfirm={
action2 === "上架"
? () => this.handleUp(record.id)
: () => this.handleDown(record.id)
}
>
<a
className={styles.survey_list_btn} className={styles.survey_list_btn}
style={{ cursor: "pointer", color: "#1890FF" }} style={{ marginRight: 10 }}
onClick={() => this.detil(record.id, 1)} href="#"
> >
调研明细导出 {action2}
</a>
</Popconfirm>
{key == 2 ? (
<div>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.del(record.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
href="#"
>
删除
</a>
</Popconfirm>
</div> </div>
{/* <div ) : null}
{key == 1 || key == 2 ? (
<div>
<div
className={styles.survey_list_btn}
style={{ cursor: "pointer", color: "#1890FF" }}
onClick={() => this.detil(record.id, 1)}
>
调研明细导出
</div>
{/* <div
className={styles.survey_list_btn} className={styles.survey_list_btn}
style={{ cursor: "pointer", color: "#1890FF" }} style={{ cursor: "pointer", color: "#1890FF" }}
onClick={() => this.detil(record.id, 2)} onClick={() => this.detil(record.id, 2)}
> >
调研分析导出 调研分析导出
</div> */} </div> */}
</div> </div>
) : null} ) : null}
</Permission>
</div> </div>
), ),
}, },
...@@ -449,27 +460,36 @@ class Survey extends Component { ...@@ -449,27 +460,36 @@ class Survey extends Component {
> >
查询 查询
</Button> </Button>
<Link <Permission
to={ permission={[
"/" + "edu_party_member:two",
companyCode + "edu_party_member:three",
"/" + "edu_site_admin",
siteCode + ]}
"/index/tool/question/question-management/create" mode="or"
}
> >
<Button type="primary" className={styles.survey_new}> <Link
新建问卷 to={
"/" +
companyCode +
"/" +
siteCode +
"/index/tool/question/question-management/create"
}
>
<Button type="primary" className={styles.survey_new}>
新建问卷
</Button>
</Link>
<Button
type="primary"
className={styles.survey_list_delete}
style={{ display: deleteBtn ? "none" : "inline-block" }}
onClick={this.handleDelete}
>
删除
</Button> </Button>
</Link> </Permission>
<Button
type="primary"
className={styles.survey_list_delete}
style={{ display: deleteBtn ? "none" : "inline-block" }}
onClick={this.handleDelete}
>
删除
</Button>
</div> </div>
<Tabs <Tabs
className={styles.survey_tabs} className={styles.survey_tabs}
......
...@@ -27,6 +27,7 @@ const TabPane = Tabs.TabPane; ...@@ -27,6 +27,7 @@ const TabPane = Tabs.TabPane;
import styles from "./style/index.less"; import styles from "./style/index.less";
// 在import部分添加 // 在import部分添加
import { withRouter } from "react-router-dom"; import { withRouter } from "react-router-dom";
import Permission from "@/common/permissions/Permission";
var companyCode = location.pathname.split("/")[1]; var companyCode = location.pathname.split("/")[1];
var siteCode = location.pathname.split("/")[2]; var siteCode = location.pathname.split("/")[2];
...@@ -297,8 +298,8 @@ class Survey extends Component { ...@@ -297,8 +298,8 @@ class Survey extends Component {
key === 1 key === 1
? record.releaseTime ? record.releaseTime
: key === 2 : key === 2
? record.unReleaseTime ? record.unReleaseTime
: record.createTime : record.createTime
).format("YYYY-MM-DD HH:mm")} ).format("YYYY-MM-DD HH:mm")}
</span> </span>
), ),
...@@ -309,89 +310,99 @@ class Survey extends Component { ...@@ -309,89 +310,99 @@ class Survey extends Component {
key: "action", key: "action",
render: (text, record) => ( render: (text, record) => (
<div className={styles.survey_list_btns}> <div className={styles.survey_list_btns}>
{key == 1 ? ( <Permission
<Link permission={[
to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/details/${record.id}/2`} "edu_party_member:two",
> "edu_party_member:three",
<span "edu_site_admin",
className={styles.survey_list_btn} ]}
style={{ marginRight: 10 }} mode="or"
> fallback={<span>-</span>}
{action1} >
</span> {key == 1 ? (
</Link> <Link
) : key == 2 ? ( to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/details/${record.id}/2`}
<Link
to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/details/${record.id}/1`}
// to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/create/${record.id}`}
>
<span
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
> >
{action1} <span
</span> className={styles.survey_list_btn}
</Link> style={{ marginRight: 10 }}
) : ( >
<Link {action1}
to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/create/${record.id}`} </span>
> </Link>
<span ) : key == 2 ? (
className={styles.survey_list_btn} <Link
style={{ marginRight: 10 }} to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/details/${record.id}/1`}
// to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/create/${record.id}`}
> >
{action1} <span
</span> className={styles.survey_list_btn}
</Link> style={{ marginRight: 10 }}
)} >
<Popconfirm {action1}
title="确定执行此操作?" </span>
okText="确定" </Link>
cancelText="取消" ) : (
onConfirm={ <Link
action2 === "上架" to={`/${companyCode}/${siteCode}/index/tool/survey/survey-management/create/${record.id}`}
? () => this.handleUp(record.id)
: () => this.handleDown(record.id)
}
>
<a
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
href="#"
>
{action2}
</a>
</Popconfirm>
{key == 2 || key == 0 ? (
<div>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.del(record.id)}
> >
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/} <span
<a
className={styles.survey_list_btn} className={styles.survey_list_btn}
style={{ marginRight: 10 }} style={{ marginRight: 10 }}
href="#"
> >
删除 {action1}
</a> </span>
</Popconfirm> </Link>
</div> )}
) : null} <Popconfirm
{key == 1 || key == 2 ? ( title="确定执行此操作?"
<div> okText="确定"
<div cancelText="取消"
onConfirm={
action2 === "上架"
? () => this.handleUp(record.id)
: () => this.handleDown(record.id)
}
>
<a
className={styles.survey_list_btn} className={styles.survey_list_btn}
style={{ cursor: "pointer", color: "#1890FF" }} style={{ marginRight: 10 }}
onClick={() => this.detil(record.id, 1)} href="#"
> >
投票明细导出 {action2}
</a>
</Popconfirm>
{key == 2 || key == 0 ? (
<div>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.del(record.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a
className={styles.survey_list_btn}
style={{ marginRight: 10 }}
href="#"
>
删除
</a>
</Popconfirm>
</div>
) : null}
{key == 1 || key == 2 ? (
<div>
<div
className={styles.survey_list_btn}
style={{ cursor: "pointer", color: "#1890FF" }}
onClick={() => this.detil(record.id, 1)}
>
投票明细导出
</div>
</div> </div>
</div> ) : null}
) : null} </Permission>
</div> </div>
), ),
}, },
...@@ -434,27 +445,36 @@ class Survey extends Component { ...@@ -434,27 +445,36 @@ class Survey extends Component {
> >
查询 查询
</Button> </Button>
<Link <Permission
to={ permission={[
"/" + "edu_party_member:two",
companyCode + "edu_party_member:three",
"/" + "edu_site_admin",
siteCode + ]}
"/index/tool/survey/survey-management/create" mode="or"
}
> >
<Button type="primary" className={styles.survey_new}> <Link
新建投票 to={
"/" +
companyCode +
"/" +
siteCode +
"/index/tool/survey/survey-management/create"
}
>
<Button type="primary" className={styles.survey_new}>
新建投票
</Button>
</Link>
<Button
type="primary"
className={styles.survey_list_delete}
style={{ display: deleteBtn ? "none" : "inline-block" }}
onClick={this.handleDelete}
>
删除
</Button> </Button>
</Link> </Permission>
<Button
type="primary"
className={styles.survey_list_delete}
style={{ display: deleteBtn ? "none" : "inline-block" }}
onClick={this.handleDelete}
>
删除
</Button>
</div> </div>
<Tabs <Tabs
className={styles.survey_tabs} className={styles.survey_tabs}
......
...@@ -16,6 +16,7 @@ import { Link } from "react-router-dom"; ...@@ -16,6 +16,7 @@ import { Link } from "react-router-dom";
import "./style/examCheck.less"; import "./style/examCheck.less";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { getExamList, downTxt } from "./redux/actions"; import { getExamList, downTxt } from "./redux/actions";
import Permission from "@/common/permissions/Permission";
import api from "./api.js"; import api from "./api.js";
// import fetch from "@/util/fetch.js"; // import fetch from "@/util/fetch.js";
import request from "@/util/request.js"; import request from "@/util/request.js";
...@@ -135,29 +136,39 @@ class ExamCheck extends Component { ...@@ -135,29 +136,39 @@ class ExamCheck extends Component {
dataIndex: "action", dataIndex: "action",
render: (text, record) => ( render: (text, record) => (
<div className="operation" style={{ width: 154 }}> <div className="operation" style={{ width: 154 }}>
<Link <Permission
to={{ permission={[
pathname: "edu_party_member:two",
"/" + "edu_party_member:three",
func.companyCode + "edu_site_admin",
"/" + ]}
func.siteCode + mode="or"
`/index/tool/test/check-management/check`, fallback={<span>-</span>}
search: `?id=${text.id}`,
state: { id: text.id },
}}
>
阅卷
</Link>
<Divider type="vertical" />
<Popconfirm
title="确认导出?"
okText="确定"
cancelText="取消"
onConfirm={() => this.downTxt(text.id)}
> >
<a href="#">导出考试结果</a> <Link
</Popconfirm> to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
`/index/tool/test/check-management/check`,
search: `?id=${text.id}`,
state: { id: text.id },
}}
>
阅卷
</Link>
<Divider type="vertical" />
<Popconfirm
title="确认导出?"
okText="确定"
cancelText="取消"
onConfirm={() => this.downTxt(text.id)}
>
<a href="#">导出考试结果</a>
</Popconfirm>
</Permission>
</div> </div>
), ),
}, },
......
...@@ -21,6 +21,7 @@ import func from "@/util/commonFunc.js"; ...@@ -21,6 +21,7 @@ import func from "@/util/commonFunc.js";
import styles from "./Style/questionBank.less"; import styles from "./Style/questionBank.less";
const Option = Select.Option; const Option = Select.Option;
import { connect } from "react-redux"; import { connect } from "react-redux";
import Permission from "@/common/permissions/Permission";
import { import {
getQuestionBankList, getQuestionBankList,
getId, getId,
...@@ -147,44 +148,56 @@ class QuestionBank extends Component { ...@@ -147,44 +148,56 @@ class QuestionBank extends Component {
<a href="javascript:void(0)" onClick={() => self.look(text.id)}> <a href="javascript:void(0)" onClick={() => self.look(text.id)}>
查看 查看
</a> </a>
<Divider type="vertical" /> <Permission
permission={[
<a href="javascript:void(0)" onClick={() => self.change(text.id)}> "edu_party_member:two",
修改 "edu_party_member:three",
</a> "edu_site_admin",
]}
mode="or"
>
<Divider type="vertical" />
<Divider type="vertical" />
{text.des == "1" ? (
<a href="javascript:void(0)" style={{ color: "#ccc" }}>
删除
</a>
) : (
<a <a
href="javascript:void(0)" href="javascript:void(0)"
onClick={() => self.deleteQuestionBank("single", text.id)} onClick={() => self.change(text.id)}
> >
删除 修改
</a> </a>
)}
<Divider type="vertical" /> <Divider type="vertical" />
<ImportBtn {text.des == "1" ? (
libraryId={text.id} <a href="javascript:void(0)" style={{ color: "#ccc" }}>
search={() => this.search()} 删除
pagesize={this.state.pagesize} </a>
getQuestionBankList={this.props.getQuestionBankList} ) : (
/> <a
<Divider type="vertical" /> href="javascript:void(0)"
<a onClick={() => self.deleteQuestionBank("single", text.id)}
onClick={() => >
this.setState({ 删除
exportState: true, </a>
exportId: text.id, )}
subjectNum: text.total, <Divider type="vertical" />
}) <ImportBtn
} libraryId={text.id}
> search={() => this.search()}
导出试题 pagesize={this.state.pagesize}
</a> getQuestionBankList={this.props.getQuestionBankList}
/>
<Divider type="vertical" />
<a
onClick={() =>
this.setState({
exportState: true,
exportId: text.id,
subjectNum: text.total,
})
}
>
导出试题
</a>
</Permission>
</div> </div>
), ),
}, },
...@@ -552,13 +565,22 @@ class QuestionBank extends Component { ...@@ -552,13 +565,22 @@ class QuestionBank extends Component {
> >
重置 重置
</Button> </Button>
<Button <Permission
type="primary" permission={[
onClick={() => this.open("questionBank")} "edu_party_member:two",
style={{ marginRight: 10 }} "edu_party_member:three",
"edu_site_admin",
]}
mode="or"
> >
新建题库 <Button
</Button> type="primary"
onClick={() => this.open("questionBank")}
style={{ marginRight: 10 }}
>
新建题库
</Button>
</Permission>
{/*<Button type="primary" onClick={()=>this.deleteQuestionBank("multi")} style={{marginRight: 10}}>删除</Button>*/} {/*<Button type="primary" onClick={()=>this.deleteQuestionBank("multi")} style={{marginRight: 10}}>删除</Button>*/}
</div> </div>
</div> </div>
......
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