Commit d29fc66b by Lichen

添加角色权限管控

parent 883f1a63
/**
* @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}
......
...@@ -29,6 +29,7 @@ import UpdateTree from "../UpdateTree/UpdateTree"; ...@@ -29,6 +29,7 @@ import UpdateTree from "../UpdateTree/UpdateTree";
import ImportAccount from "../ImportAccount/ImportAccount"; import ImportAccount from "../ImportAccount/ImportAccount";
import ImportStopAccountModal from "../ImportStopAccountModal/ImportStopAccountModal"; import ImportStopAccountModal from "../ImportStopAccountModal/ImportStopAccountModal";
import Style from "./ImportOrganization.less"; import Style from "./ImportOrganization.less";
import Permission from "@/common/permissions/Permission";
const { Search } = Input; const { Search } = Input;
const confirm = Modal.confirm; const confirm = Modal.confirm;
...@@ -438,9 +439,11 @@ class ImportOrganization extends Component { ...@@ -438,9 +439,11 @@ class ImportOrganization extends Component {
style={{ display: !window.orgId ? "none" : "block" }} style={{ display: !window.orgId ? "none" : "block" }}
onConfirm={this.importerAccount} onConfirm={this.importerAccount}
> >
<a onClick={eve =>{ <a
eve.stopPropagation() onClick={eve => {
}}> eve.stopPropagation();
}}
>
导出用户 导出用户
</a> </a>
</Popconfirm> </Popconfirm>
...@@ -452,9 +455,11 @@ class ImportOrganization extends Component { ...@@ -452,9 +455,11 @@ class ImportOrganization extends Component {
style={{ display: !window.orgId ? "none" : "block" }} style={{ display: !window.orgId ? "none" : "block" }}
onConfirm={this.importerOrganization} onConfirm={this.importerOrganization}
> >
<a onClick={eve =>{ <a
eve.stopPropagation() onClick={eve => {
}}> eve.stopPropagation();
}}
>
导出组织架构 导出组织架构
</a> </a>
</Popconfirm> </Popconfirm>
...@@ -463,9 +468,14 @@ class ImportOrganization extends Component { ...@@ -463,9 +468,14 @@ class ImportOrganization extends Component {
</a> */} </a> */}
</Menu.Item> </Menu.Item>
<Menu.Item> <Menu.Item>
<a onClick={() => this.ImportAccountModal("导入组织并联用户")}> <Permission
导入组织并关联用户 permission={["edu_party_member:three", "edu_site_admin"]}
</a> mode="or"
>
<a onClick={() => this.ImportAccountModal("导入组织并联用户")}>
导入组织并关联用户
</a>
</Permission>
</Menu.Item> </Menu.Item>
</Menu> </Menu>
); );
...@@ -489,7 +499,13 @@ class ImportOrganization extends Component { ...@@ -489,7 +499,13 @@ class ImportOrganization extends Component {
{/*<Button type="primary" style={{marginRight:10,backgroundColor:"#00BCD4",borderColor:"#00BCD4"}}>导出组织架构</Button>*/} {/*<Button type="primary" style={{marginRight:10,backgroundColor:"#00BCD4",borderColor:"#00BCD4"}}>导出组织架构</Button>*/}
{/*<Button type="primary" style={{marginRight:10,backgroundColor:"#00BCD4",borderColor:"#00BCD4"}}>导出组织用户</Button>*/} {/*<Button type="primary" style={{marginRight:10,backgroundColor:"#00BCD4",borderColor:"#00BCD4"}}>导出组织用户</Button>*/}
<Search onChange={this.handleGetValue} className={Style.searchInput} placeholder="请输入用户名/姓名/手机号/工号" onSearch={() => this.handleSearch()} style={{ width: "300px" }} /> <Search
onChange={this.handleGetValue}
className={Style.searchInput}
placeholder="请输入用户名/姓名/手机号/工号"
onSearch={() => this.handleSearch()}
style={{ width: "300px" }}
/>
<Dropdown <Dropdown
visible={this.state.higherSearch} visible={this.state.higherSearch}
...@@ -497,7 +513,7 @@ class ImportOrganization extends Component { ...@@ -497,7 +513,7 @@ class ImportOrganization extends Component {
trigger={["click"]} trigger={["click"]}
onVisibleChange={visible => onVisibleChange={visible =>
this.setState({ this.setState({
higherSearch: visible higherSearch: visible,
}) })
} }
overlay={ overlay={
...@@ -548,111 +564,106 @@ class ImportOrganization extends Component { ...@@ -548,111 +564,106 @@ class ImportOrganization extends Component {
/> />
</Modal> */} </Modal> */}
{ {
// this.props.isShowBtn ? ( <div className={Style.tabBarLeft}>
// <> <Permission
<div className={Style.tabBarLeft}> permission={["edu_party_member:three", "edu_site_admin"]}
{ mode="or"
this.props.isShowBtn ? ( >
<Link {this.props.isShowBtn ? (
to={{ <Link
pathname: "/" + to={{
companyCode + pathname:
"/" + "/" +
siteCode + companyCode +
"/index/manager/system/organization/adduser", "/" +
state: { siteCode +
departmentTree: departmentTree, "/index/manager/system/organization/adduser",
companyCode: companyCode, state: {
siteCode: siteCode departmentTree: departmentTree,
} companyCode: companyCode,
} siteCode: siteCode,
} },
> }}
<Button >
type="primary" <Button
style={{ marginRight: 10 }} type="primary"
// onClick={() => this.showModal("用户信息",companyCode,siteCode)} style={{ marginRight: 10 }}
> // onClick={() => this.showModal("用户信息",companyCode,siteCode)}
新增用户 >
新增用户
</Button> </Button>
</Link> </Link>
) : null ) : null}
} {this.state.visible && (
{ <Modal
this.state.visible && ( title={this.state.title}
<Modal visible={this.state.visible}
title={this.state.title} onOk={this.onCreate}
visible={this.state.visible} width={800}
onOk={this.onCreate} onCancel={() => {
width={800} this.handleCancel(false);
onCancel={() => { }}
this.handleCancel(false); footer={false}
}} // key={Math.random()}
footer={false} destroyOnClose={1}
// key={Math.random()} >
destroyOnClose={1} {/*<PlusUser onCancel={this.handleCancel} departmentTree={departmentTree} insertUser={this.props.insertUser} />*/}
> {/*新建用户*/}
{/*<PlusUser onCancel={this.handleCancel} departmentTree={departmentTree} insertUser={this.props.insertUser} />*/} {this.state.insertModal ? (
{/*新建用户*/} <PlusUser
{this.state.insertModal ? ( onCancel={this.handleCancel}
<PlusUser insertUser={this.props.insertUser}
onCancel={this.handleCancel} handleSearch={() => this.PlusUserSearch()} //bug-12527-liyuan
insertUser={this.props.insertUser} />
handleSearch={() => this.PlusUserSearch()} //bug-12527-liyuan ) : null}
/> {/*导入组织架构*/}
) : null} {this.state.updateModal ? (
{/*导入组织架构*/} <UpdateDepartment handleCancel={this.handleCancel} />
{this.state.updateModal ? ( ) : null}
<UpdateDepartment handleCancel={this.handleCancel} /> {/*导入更新组织架构 6月1 不上*/}
) : null} {/*{this.state.updateTreeModal?<UpdateTree handleCancel={this.handleCancel}/>:null}*/}
{/*导入更新组织架构 6月1 不上*/} {/*导入组织并联用户*/}
{/*{this.state.updateTreeModal?<UpdateTree handleCancel={this.handleCancel}/>:null}*/} {this.state.ImportAccountModal ? (
{/*导入组织并联用户*/} <ImportAccount
{this.state.ImportAccountModal ? ( handleCancel={this.handleCancel}
<ImportAccount // downUrl={"http://fulan-test.oss-cn-hangzhou.aliyuncs.com/account_import_template.xlsx"}
handleCancel={this.handleCancel} downUrl={
// downUrl={"http://fulan-test.oss-cn-hangzhou.aliyuncs.com/account_import_template.xlsx"} "https://cloud-wmy-oss.kmelearning.com/model-import/account_import_template.xlsx"
downUrl={ }
"https://cloud-wmy-oss.kmelearning.com/model-import/account_import_template.xlsx" />
} ) : null}
/> {/*导入组织解除用户 6月1 不上*/}
) : null} {/*{this.state.ImportStopAccountModal?<ImportStopAccountModal handleCancel={this.handleCancel}/>:null}*/}
{/*导入组织解除用户 6月1 不上*/} </Modal>
{/*{this.state.ImportStopAccountModal?<ImportStopAccountModal handleCancel={this.handleCancel}/>:null}*/} )}
</Modal> {/*批量操作解绑*/}
) <div style={{ display: "inline-block" }}>
} <Batch
{/*批量操作解绑*/} departmentTree={departmentTree}
<div style={{ display: "inline-block" }}> records={records}
<Batch allNameSearch={this.props.allNameSearch}
departmentTree={departmentTree} getUser={this.props.getUser}
records={records} updateBatch={this.props.updateBatch}
allNameSearch={this.props.allNameSearch} updateWeiChatBatch={this.props.updateWeiChatBatch}
getUser={this.props.getUser} getUserList={this.props.getUserList}
updateBatch={this.props.updateBatch} disableBatch={this.props.disableBatch}
updateWeiChatBatch={this.props.updateWeiChatBatch} />
getUserList={this.props.getUserList}
disableBatch={this.props.disableBatch}
/>
</div>
{
this.props.isShowBtn ? (
<Dropdown
overlay={menu}
trigger={['click']}
overlayStyle={{zIndex:9}}
className={Style.selectMore}>
<Button>
更多操作
<Icon type="down" />
</Button>
</Dropdown>
) : null
}
</div> </div>
// </> </Permission>
// ) : null {this.props.isShowBtn ? (
<Dropdown
overlay={menu}
trigger={["click"]}
overlayStyle={{ zIndex: 9 }}
className={Style.selectMore}
>
<Button>
更多操作
<Icon type="down" />
</Button>
</Dropdown>
) : null}
</div>
} }
</div> </div>
<div className="marketing-table" style={{ marginRight: "20px" }}> <div className="marketing-table" style={{ marginRight: "20px" }}>
...@@ -685,7 +696,7 @@ class ImportOrganization extends Component { ...@@ -685,7 +696,7 @@ class ImportOrganization extends Component {
getAccountList={this.props.getAccountList} getAccountList={this.props.getAccountList}
accountClose={this.props.accountClose} accountClose={this.props.accountClose}
accountOpen={this.props.accountOpen} accountOpen={this.props.accountOpen}
// handleSearch={()=>this.search()} //bug-9855-ly // handleSearch={()=>this.search()} //bug-9855-ly
/> />
{/*<UserTable*/} {/*<UserTable*/}
......
...@@ -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>
), ),
}, },
......
...@@ -78,6 +78,7 @@ import Comment from "./Comment.jsx"; ...@@ -78,6 +78,7 @@ import Comment from "./Comment.jsx";
import CourseResourceView from "../../OnLine/CourseBank/CourseManagement/resource/index.jsx"; import CourseResourceView from "../../OnLine/CourseBank/CourseManagement/resource/index.jsx";
import ResourceListView from "../../OnLine/CourseBank/CourseManagement/resource/resourceList.jsx"; import ResourceListView from "../../OnLine/CourseBank/CourseManagement/resource/resourceList.jsx";
import Permission from "@/common/permissions/Permission";
import styles from "./index.less"; import styles from "./index.less";
...@@ -419,26 +420,44 @@ class TreeItem extends Component { ...@@ -419,26 +420,44 @@ class TreeItem extends Component {
<span className={styles.itemTitle}>{data.key}</span> <span className={styles.itemTitle}>{data.key}</span>
{(show && ( {(show && (
<span style={{ float: "right" }}> <span style={{ float: "right" }}>
<Icon <Permission
style={{ marginRight: "10px" }} permission={[
type="edit" "edu_party_member:two",
className={styles.pm_edit_icon} "edu_party_member:three",
onClick={() => this.showModal("2")} "edu_site_admin",
/> ]}
<Icon mode="or"
type="delete" >
className={styles.pm_edit_icon} <Icon
onClick={() => this.onDelete()} style={{ marginRight: "10px" }}
/> type="edit"
className={styles.pm_edit_icon}
onClick={() => this.showModal("2")}
/>
<Icon
type="delete"
className={styles.pm_edit_icon}
onClick={() => this.onDelete()}
/>
</Permission>
</span> </span>
)) || )) ||
(addshow && ( (addshow && (
<span style={{ float: "right" }}> <span style={{ float: "right" }}>
<Icon <Permission
type="plus" permission={[
className={styles.pm_edit_icon} "edu_party_member:two",
onClick={() => this.showModal("1")} "edu_party_member:three",
/> "edu_site_admin",
]}
mode="or"
>
<Icon
type="plus"
className={styles.pm_edit_icon}
onClick={() => this.showModal("1")}
/>
</Permission>
</span> </span>
))} ))}
</p> </p>
...@@ -2956,97 +2975,116 @@ class NewTP extends Component { ...@@ -2956,97 +2975,116 @@ class NewTP extends Component {
key: "operation", key: "operation",
render: (text, record) => ( render: (text, record) => (
<div> <div>
{record.state === "草稿" ? ( <Permission
<div> permission={[
<a "edu_party_member:two",
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} "edu_party_member:three",
onClick={() => this.onChangeTrainFirst(record)} "edu_site_admin",
> ]}
修改 mode="or"
</a> fallback={<span>-</span>}
<Popconfirm >
title="确定要上架吗?" {record.state === "草稿" ? (
okText="上架" <div>
cancelText="取消" <a
onConfirm={() => this.onUp(record)} style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
> onClick={() => this.onChangeTrainFirst(record)}
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}> >
上架 修改
</a> </a>
</Popconfirm> <Popconfirm
<Popconfirm title="确定要上架吗?"
title="确定要删除吗?" okText="上架"
okText="删除" cancelText="取消"
cancelText="取消" onConfirm={() => this.onUp(record)}
onConfirm={() => this.onDelete(record)} >
> <a
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}> style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
删除 >
上架
</a>
</Popconfirm>
<Popconfirm
title="确定要删除吗?"
okText="删除"
cancelText="取消"
onConfirm={() => this.onDelete(record)}
>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
>
删除
</a>
</Popconfirm>
</div>
) : record.state === "上架" ? (
<div>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.onTrainFirst(record)}
>
查看
</a> </a>
</Popconfirm> <Popconfirm
</div> title="确定要下架吗?"
) : record.state === "上架" ? ( okText="下架"
<div> cancelText="取消"
<a onConfirm={() => this.onDown(record)}
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} >
onClick={() => this.onTrainFirst(record)} <a
> style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
查看 >
</a> 下架
<Popconfirm </a>
title="确定要下架吗?" </Popconfirm>
okText="下架" <a
cancelText="取消" style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onConfirm={() => this.onDown(record)} onClick={() => this.showComment(record.id, record.name)}
> >
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}> 评论管理
下架
</a> </a>
</Popconfirm> </div>
<a ) : (
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} <div>
onClick={() => this.showComment(record.id, record.name)} <a
> style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
评论管理 onClick={() => this.onChangeTrainFirst(record)}
</a> >
</div> 修改
) : (
<div>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.onChangeTrainFirst(record)}
>
修改
</a>
<Popconfirm
title="确定要上架吗?"
okText="上架"
cancelText="取消"
onConfirm={() => this.onUp(record)}
>
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}>
上架
</a> </a>
</Popconfirm> <Popconfirm
<Popconfirm title="确定要上架吗?"
title="确定要删除吗?" okText="上架"
okText="删除" cancelText="取消"
cancelText="取消" onConfirm={() => this.onUp(record)}
onConfirm={() => this.onDelete(record)} >
> <a
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}> style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
删除 >
上架
</a>
</Popconfirm>
<Popconfirm
title="确定要删除吗?"
okText="删除"
cancelText="取消"
onConfirm={() => this.onDelete(record)}
>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
>
删除
</a>
</Popconfirm>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.showComment(record.id, record.name)}
>
评论管理
</a> </a>
</Popconfirm> </div>
<a )}
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} {/* <div>
onClick={() => this.showComment(record.id, record.name)}
>
评论管理
</a>
</div>
)}
{/* <div>
<a <a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.openResource(record.id)} onClick={() => this.openResource(record.id)}
...@@ -3055,18 +3093,18 @@ class NewTP extends Component { ...@@ -3055,18 +3093,18 @@ class NewTP extends Component {
</a> </a>
</div> */} </div> */}
{/*修改可见范围*/} {/*修改可见范围*/}
{/*<a href="#4" style={{marginLeft:"10px",color:"#00CCFF"}}>项目范围</a>*/} {/*<a href="#4" style={{marginLeft:"10px",color:"#00CCFF"}}>项目范围</a>*/}
{record.visibleRange === 0 ? ( {record.visibleRange === 0 ? (
<a <a
onClick={() => this.open("range", record.id)} onClick={() => this.open("range", record.id)}
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
> >
指定用户 指定用户
</a> </a>
) : null} ) : null}
{/* {record.visibleRange === 0 ? ( {/* {record.visibleRange === 0 ? (
<div style={{ marginLeft: "10px" }}> <div style={{ marginLeft: "10px" }}>
<ImportUsers <ImportUsers
urlParameter="trainingProject" urlParameter="trainingProject"
...@@ -3075,55 +3113,57 @@ class NewTP extends Component { ...@@ -3075,55 +3113,57 @@ class NewTP extends Component {
<ExportBtn urlParameter="trainingProject" scopeId={record.id} /> <ExportBtn urlParameter="trainingProject" scopeId={record.id} />
</div> </div>
) : null} */} ) : null} */}
{record.enablePosition === 1 ? ( {record.enablePosition === 1 ? (
<div> <div>
<Popconfirm <Popconfirm
title="确认导出?" title="确认导出?"
okText="确定" okText="确定"
cancelText="取消" cancelText="取消"
onConfirm={() => this.onDownQdcode(record)} onConfirm={() => this.onDownQdcode(record)}
> >
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.onQdcode(record)}
>
导出签到二维码
</a>
</Popconfirm>
</div>
) : (
""
)}
{record.sign === 1 ? (
<div>
<Popconfirm
title="确认导出?"
okText="确定"
cancelText="取消"
onConfirm={() => this.downTxt(record.id)}
>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
>
导出签到记录
</a>
</Popconfirm>
</div>
) : (
""
)}
{record.enroll === 1 ? (
<div>
<a <a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }} style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.onQdcode(record)} onClick={() => this.onEnrollManag(record)}
> >
导出签到二维码 报名管理
</a>
</Popconfirm>
</div>
) : (
""
)}
{record.sign === 1 ? (
<div>
<Popconfirm
title="确认导出?"
okText="确定"
cancelText="取消"
onConfirm={() => this.downTxt(record.id)}
>
<a style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}>
导出签到记录
</a> </a>
</Popconfirm> </div>
</div> ) : (
) : ( ""
"" )}
)}
{record.enroll === 1 ? (
<div>
<a
style={{ marginLeft: "10px", color: "rgb(24, 144, 255)" }}
onClick={() => this.onEnrollManag(record)}
>
报名管理
</a>
</div>
) : (
""
)}
{/* <div> {/* <div>
<Popconfirm <Popconfirm
title="确认导出?" title="确认导出?"
okText="确定" okText="确定"
...@@ -3135,6 +3175,7 @@ class NewTP extends Component { ...@@ -3135,6 +3175,7 @@ class NewTP extends Component {
</a> </a>
</Popconfirm> </Popconfirm>
</div> */} </div> */}
</Permission>
</div> </div>
), ),
}, },
...@@ -3298,13 +3339,22 @@ class NewTP extends Component { ...@@ -3298,13 +3339,22 @@ class NewTP extends Component {
> >
查询 查询
</Button> </Button>
<Button <Permission
type="primary" permission={[
style={{ marginLeft: 60 }} "edu_party_member:two",
onClick={this.handleNew} "edu_party_member:three",
"edu_site_admin",
]}
mode="or"
> >
新建项目 <Button
</Button> type="primary"
style={{ marginLeft: 60 }}
onClick={this.handleNew}
>
新建项目
</Button>
</Permission>
</div> </div>
<div className={styles.listDiv}> <div className={styles.listDiv}>
......
...@@ -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}
......
...@@ -21,6 +21,7 @@ const dic = { ...@@ -21,6 +21,7 @@ const dic = {
}; };
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { connect } from "react-redux"; import { connect } from "react-redux";
import Permission from "@/common/permissions/Permission";
import { import {
getExamList, getExamList,
...@@ -131,33 +132,46 @@ class Exam extends Component { ...@@ -131,33 +132,46 @@ class Exam extends Component {
dataIndex: "action", dataIndex: "action",
render: (text, record) => ( render: (text, record) => (
<div className="operation"> <div className="operation">
<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/test-management/look`, fallback={<span>-</span>}
search: `?id=${text.id}`,
state: { id: text.id },
}}
> >
<a style={{ marginRight: 16 }} href="javascript:void(0)"> <Link
查看 to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
`/index/tool/test/test-management/look`,
search: `?id=${text.id}`,
state: { id: text.id },
}}
>
<a style={{ marginRight: 16 }} href="javascript:void(0)">
查看
</a>
</Link>
<a
style={{ marginRight: 16 }}
href="javascript:void(0)"
onClick={() => self.examDown(text.id)}
>
下架
</a> </a>
</Link> <a
<a href="javascript:void(0)"
style={{ marginRight: 16 }} onClick={() => self.examCopy(text.id)}
href="javascript:void(0)" >
onClick={() => self.examDown(text.id)} 复制
> </a>
下架 {text.visibleRange === 2 ? <Divider type="vertical" /> : null}
</a> </Permission>
<a href="javascript:void(0)" onClick={() => self.examCopy(text.id)}>
复制
</a>
{text.visibleRange === 2 ? <Divider type="vertical" /> : null}
</div> </div>
), ),
}, },
...@@ -213,52 +227,59 @@ class Exam extends Component { ...@@ -213,52 +227,59 @@ class Exam extends Component {
dataIndex: "action", dataIndex: "action",
render: (text, record) => ( render: (text, record) => (
<div className="operation"> <div className="operation">
<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/test-management/edit`, fallback={<span>-</span>}
search: `?id=${text.id}`,
state: { id: text.id },
}}
> >
<a href="javascript:void(0)" style={{ marginRight: 16 }}> <Link
修改 to={{
pathname:
"/" +
func.companyCode +
"/" +
func.siteCode +
`/index/tool/test/test-management/edit`,
search: `?id=${text.id}`,
state: { id: text.id },
}}
>
<a href="javascript:void(0)" style={{ marginRight: 16 }}>
修改
</a>
</Link>
<a
href="javascript:void(0)"
style={{ marginRight: 16 }}
onClick={() => self.examUp(text.id)}
>
上架
</a> </a>
</Link>
<a
href="javascript:void(0)"
style={{ marginRight: 16 }}
onClick={() => self.examUp(text.id)}
>
上架
</a>
<a
href="javascript:void(0)"
style={{ marginRight: 16 }}
onClick={() => self.examCopy(text.id)}
>
复制
</a>
<Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.deleteExam(text.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a <a
href="javascript:void(0)" href="javascript:void(0)"
style={{ marginLeft: 10 }} style={{ marginRight: 16 }}
onClick={() => self.examCopy(text.id)}
> >
删除 复制
</a> </a>
</Popconfirm> <Popconfirm
title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.deleteExam(text.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a href="javascript:void(0)" style={{ marginLeft: 10 }}>
删除
</a>
</Popconfirm>
{text.visibleRange === 2 ? <Divider type="vertical" /> : null} {text.visibleRange === 2 ? <Divider type="vertical" /> : null}
</Permission>
</div> </div>
), ),
}, },
...@@ -314,44 +335,51 @@ class Exam extends Component { ...@@ -314,44 +335,51 @@ class Exam extends Component {
dataIndex: "action", dataIndex: "action",
render: (text, record) => ( render: (text, record) => (
<div className="operation"> <div className="operation">
<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/test-management/edit`, fallback={<span>-</span>}
search: `?id=${text.id}`,
state: { id: text.id },
}}
> >
<a href="javascript:void(0)" style={{ marginRight: 16 }}> <Link
修改 to={{
</a> pathname:
</Link> "/" +
<a func.companyCode +
href="javascript:void(0)" "/" +
style={{ marginRight: 16 }} func.siteCode +
onClick={() => self.examUp(text.id)} `/index/tool/test/test-management/edit`,
> search: `?id=${text.id}`,
上架 state: { id: text.id },
</a> }}
<Popconfirm >
title="确定要删除吗?" <a href="javascript:void(0)" style={{ marginRight: 16 }}>
okText="确定" 修改
cancelText="取消" </a>
onConfirm={() => this.deleteExam(text.id)} </Link>
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a <a
style={{ marginLeft: 10 }} href="javascript:void(0)"
href="#" style={{ marginRight: 16 }}
onClick={() => self.examUp(text.id)}
> >
删除 上架
</a> </a>
</Popconfirm> <Popconfirm
{text.visibleRange === 2 ? <Divider type="vertical" /> : null} title="确定要删除吗?"
okText="确定"
cancelText="取消"
onConfirm={() => this.deleteExam(text.id)}
>
{/*4月10号临时发布 后台没有发布生产接口 前端只能隐藏*/}
<a style={{ marginLeft: 10 }} href="#">
删除
</a>
</Popconfirm>
{text.visibleRange === 2 ? <Divider type="vertical" /> : null}
</Permission>
</div> </div>
), ),
}, },
...@@ -583,19 +611,31 @@ class Exam extends Component { ...@@ -583,19 +611,31 @@ class Exam extends Component {
> >
查询 查询
</Button> </Button>
<Link <Permission
to={ permission={[
"/" + "edu_party_member:two",
func.companyCode + "edu_party_member:three",
"/" + "edu_site_admin",
func.siteCode + ]}
"/index/tool/test/test-management/create" mode="or"
}
> >
<Button type="primary" style={{ marginLeft: 10, marginTop: 16 }}> <Link
新建考试 to={
</Button> "/" +
</Link> func.companyCode +
"/" +
func.siteCode +
"/index/tool/test/test-management/create"
}
>
<Button
type="primary"
style={{ marginLeft: 10, marginTop: 16 }}
>
新建考试
</Button>
</Link>
</Permission>
{/*<Button type="primary" onClick={this.deleteExam} style={{ marginLeft:10,display:this.state.tabsKey==1?'inline':'none'}}>删除</Button>*/} {/*<Button type="primary" onClick={this.deleteExam} style={{ marginLeft:10,display:this.state.tabsKey==1?'inline':'none'}}>删除</Button>*/}
</div> </div>
</div> </div>
......
...@@ -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