Commit d80e9769 authored by 李腾's avatar 李腾

feat: 新增权限控制配置文件

parent b18d88a7
...@@ -2,19 +2,19 @@ const isProduction = process.env.NODE_ENV === 'production'; ...@@ -2,19 +2,19 @@ const isProduction = process.env.NODE_ENV === 'production';
const isPre = process.env.PRE_ENV === 'pre'; const isPre = process.env.PRE_ENV === 'pre';
const envAPi = { const envAPi = {
api: 'https://security-xyqb.liangkebang.net', api: 'https://security-sc.liangkebang.net',
kdspOpApi: 'https://sc-merchant-api-xyqb.liangkebang.net', kdspOpApi: 'https://sc-merchant-api-sc.liangkebang.net',
kdspApi: 'https://sc-merchant-api-xyqb.liangkebang.net', kdspApi: 'https://sc-merchant-api-sc.liangkebang.net',
goodsApi: 'https://sc-merchant-api-xyqb.liangkebang.net', goodsApi: 'https://sc-merchant-api-sc.liangkebang.net',
// kdspOpApi: 'https://kdsp-operation-xyqb.liangkebang.net', // kdspOpApi: 'https://kdsp-operation-xyqb.liangkebang.net',
// kdspApi: 'https://sc-op-api-xyqb.liangkebang.net', // kdspApi: 'https://sc-op-api-xyqb.liangkebang.net',
// goodsApi: 'https://sc-op-api-xyqb.liangkebang.net', // goodsApi: 'https://sc-op-api-xyqb.liangkebang.net',
querysApi: 'https://sc-settlement-api-xyqb.liangkebang.net', querysApi: 'https://sc-settlement-api-sc.liangkebang.net',
// goodsApi: '//192.168.188.111:7000', // goodsApi: '//192.168.188.111:7000',
prologueDomain: 'https://mall-xyqb.liangkebang.net', prologueDomain: 'https://mall-sc.liangkebang.net',
// qiniuHost: 'https://appsync.lkbang.net', // qiniuHost: 'https://appsync.lkbang.net',
qiniuHost: 'https://kdspstatic.q-gp.com/', qiniuHost: 'https://kdspstatic.q-gp.com/',
opapiHost: 'https://opapi-xyqb.liangkebang.net', opapiHost: 'https://opapi-sc.liangkebang.net',
}; };
const prodApi = { const prodApi = {
......
...@@ -25,6 +25,19 @@ export const ROLE_MANAGE = { ...@@ -25,6 +25,19 @@ export const ROLE_MANAGE = {
export const LOG_MANAGE = {}; export const LOG_MANAGE = {};
/** @name 商品管理 */ /** @name 商品管理 */
// 商品库
export const GOOD_MANAGE = {
LIST: {
name: '商品列表',
id: '020101',
},
EDITABLE: {
name: '新增/修改',
id: '020101',
},
};
// 配送区域
/** @name 订单管理 */ /** @name 订单管理 */
......
...@@ -28,8 +28,11 @@ import SearchForm from './SearchForm'; ...@@ -28,8 +28,11 @@ import SearchForm from './SearchForm';
import TempleatModal from './TempleatModal'; import TempleatModal from './TempleatModal';
import ServiceGoods from '../ServiceGoods'; import ServiceGoods from '../ServiceGoods';
@connect(({ goodsManage }) => ({ import { GOOD_MANAGE } from '@/../config/permission.config';
@connect(({ goodsManage, menu }) => ({
goodsManage, goodsManage,
permissions: menu.permissions,
})) }))
class goodsManage extends Component { class goodsManage extends Component {
state = { state = {
...@@ -63,8 +66,11 @@ class goodsManage extends Component { ...@@ -63,8 +66,11 @@ class goodsManage extends Component {
shopList = []; shopList = [];
canEditable = false;
componentDidMount() { componentDidMount() {
this.props.goodsManage.tableData = {}; this.props.goodsManage.tableData = {};
this.canEditable = this.props.permissions[GOOD_MANAGE.EDITABLE.id];
this.categoryList(); this.categoryList();
this.getVirtualCategory(); this.getVirtualCategory();
this.specList(); this.specList();
...@@ -394,13 +400,17 @@ class goodsManage extends Component { ...@@ -394,13 +400,17 @@ class goodsManage extends Component {
return ( return (
<PageHeaderWrapper> <PageHeaderWrapper>
<Spin spinning={this.state.createloading}> <Spin spinning={this.state.createloading}>
<Button {this.canEditable ? (
type="primary" <Button
className={styles.button} type="primary"
onClick={() => this.setState({ createVisible: true, initData: {} })} className={styles.button}
> onClick={() => this.setState({ createVisible: true, initData: {} })}
新增商品 >
</Button> 新增商品
</Button>
) : (
''
)}
<Button <Button
type="primary" type="primary"
className={styles.button} className={styles.button}
......
...@@ -3,7 +3,7 @@ import { Input, Checkbox, Radio, Button, notification, Spin } from 'antd'; ...@@ -3,7 +3,7 @@ import { Input, Checkbox, Radio, Button, notification, Spin } from 'antd';
import { Form } from '@ant-design/compatible'; import { Form } from '@ant-design/compatible';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import RolePermissionsModal from '../components/RolePermissionsModal'; import RolePermissionsModal from '../components/RolePermissionsModal';
import { getRoleList, addUser, getUserDetail } from '../../service'; import { getRoleList, addUser, getUserDetail, updateUser } from '../../service';
import { shopGetBySupplierId } from '@/pages/ServiceGoods/service'; import { shopGetBySupplierId } from '@/pages/ServiceGoods/service';
import UUID from '@/utils/uuid'; import UUID from '@/utils/uuid';
...@@ -94,13 +94,12 @@ const AddUser = props => { ...@@ -94,13 +94,12 @@ const AddUser = props => {
} }
console.log(res); console.log(res);
setDetailInfo(res.data); setDetailInfo(res.data);
const { account, name, password } = res.data; const { account, name, roleId, organization } = res.data;
setFieldsValue({ setFieldsValue({
account, account,
name, name,
password, organizationId: organization.id,
confirmPassword: password, roleId,
roleId: [],
}); });
}; };
...@@ -120,8 +119,14 @@ const AddUser = props => { ...@@ -120,8 +119,14 @@ const AddUser = props => {
)); ));
// 选择门店多选框 // 选择门店多选框
const selectSupplierCheckbox = () => const selectSupplierCheckbox = () => {
supplierList.map(item => <Radio value={item.orgId}> {item.name}</Radio>); let list = supplierList;
const filterData = supplierList.filter(item => item.orgId === userInfo.orgId);
if (filterData.length) {
list = filterData;
}
return list.map(item => <Radio value={item.orgId}> {item.name}</Radio>);
};
// 表单验证辅助函数 // 表单验证辅助函数
const rulesHandler = (field, initialValue = '') => ({ const rulesHandler = (field, initialValue = '') => ({
...@@ -138,19 +143,25 @@ const AddUser = props => { ...@@ -138,19 +143,25 @@ const AddUser = props => {
} }
// 提交 // 提交
console.log(fieldsValue); console.log(fieldsValue);
const { organizationId } = fieldsValue; const { organizationId, email } = fieldsValue;
const { orgId } = userInfo; const { orgId } = userInfo;
const code = UUID.createUUID(); const code = UUID.createUUID();
const params = { const params = {
...fieldsValue, ...fieldsValue,
code, code,
email: `${code}@stms.quantgroup.cn`, email: email || `${code}@stms.quantgroup.cn`,
organization: { organization: {
id: organizationId || orgId, id: organizationId || orgId,
}, },
}; };
delete params.organizationId; delete params.organizationId;
const res = await addUser(params); let api = addUser;
if (id) {
console.log(id, 222444);
params.id = id;
api = updateUser;
}
const res = await api(params);
if (res.code !== 2000) { if (res.code !== 2000) {
notification.warning({ notification.warning({
message: res.detail || res.msg, message: res.detail || res.msg,
...@@ -215,26 +226,30 @@ const AddUser = props => { ...@@ -215,26 +226,30 @@ const AddUser = props => {
<Input placeholder="请输入用户姓名" />, <Input placeholder="请输入用户姓名" />,
)} )}
</Form.Item> </Form.Item>
<Form.Item label="初始密码" extra="限13-18字符,包含大小写字母、数字和特殊字符"> {id ? (
{getFieldDecorator('password', rulesHandler('password'))( ''
<Input ) : (
disabled={!!id} <>
type={inputType} <Form.Item label="初始密码" extra="限13-18字符,包含大小写字母、数字和特殊字符">
onChange={e => handlePasswordChange(e, setInputType)} {getFieldDecorator('password', rulesHandler('password'))(
placeholder="请设置登录密码" <Input
/>, type={inputType}
)} onChange={e => handlePasswordChange(e, setInputType)}
</Form.Item> placeholder="请设置登录密码"
<Form.Item label="确认密码"> />,
{getFieldDecorator('confirmPassword', rulesHandler('confirmPassword'))( )}
<Input </Form.Item>
disabled={!!id} <Form.Item label="确认密码">
type={confirmInputType} {getFieldDecorator('confirmPassword', rulesHandler('confirmPassword'))(
onChange={e => handlePasswordChange(e, setConfirmInputType)} <Input
placeholder="请确认登录密码" type={confirmInputType}
/>, onChange={e => handlePasswordChange(e, setConfirmInputType)}
)} placeholder="请确认登录密码"
</Form.Item> />,
)}
</Form.Item>
</>
)}
<Form.Item label="选择门店" extra="仅限POP商家设置"> <Form.Item label="选择门店" extra="仅限POP商家设置">
{getFieldDecorator('organizationId', rulesHandler('organizationId', []))( {getFieldDecorator('organizationId', rulesHandler('organizationId', []))(
supplierList.length ? ( supplierList.length ? (
......
...@@ -10,10 +10,6 @@ export const getColumns = props => { ...@@ -10,10 +10,6 @@ export const getColumns = props => {
canAddEdit, canAddEdit,
} = props; } = props;
return [ return [
{
title: '用户ID',
dataIndex: 'id',
},
{ {
title: '用户名', title: '用户名',
dataIndex: 'account', dataIndex: 'account',
...@@ -29,13 +25,22 @@ export const getColumns = props => { ...@@ -29,13 +25,22 @@ export const getColumns = props => {
}, },
{ {
title: '最后一次登录时间', title: '最后一次登录时间',
dataIndex: 'updateTime', dataIndex: 'lastLogin',
hideInSearch: true, hideInSearch: true,
}, },
{ {
title: '角色', title: '角色',
dataIndex: 'creator', dataIndex: 'creator',
render: (value, record) => <a onClick={() => openRolePermissionsModal(record)}>{value}</a>, render: (value, record) => {
const { roles } = record;
const roleElement = roles.map((role, index) => (
<>
<a onClick={() => openRolePermissionsModal(role)}>{role.name}</a>
{roles.length - 1 !== index ? '' : ''}
</>
));
return roleElement;
},
}, },
{ {
title: '状态', title: '状态',
......
...@@ -123,8 +123,6 @@ const Account = props => { ...@@ -123,8 +123,6 @@ const Account = props => {
); );
}; };
// export default Account;
export default connect(({ menu }) => ({ export default connect(({ menu }) => ({
permissions: menu.permissions, permissions: menu.permissions,
}))(Account); }))(Account);
...@@ -90,7 +90,7 @@ const RoleInfo = props => { ...@@ -90,7 +90,7 @@ const RoleInfo = props => {
console.log('params :>>', params); console.log('params :>>', params);
const res = await addResource(params); const res = await addResource(params);
console.log(res);
if (res.code !== 2000) { if (res.code !== 2000) {
notification.warning({ notification.warning({
message: `${res.msg}:${res.detail}`, message: `${res.msg}:${res.detail}`,
......
...@@ -2,7 +2,7 @@ import React from 'react'; ...@@ -2,7 +2,7 @@ import React from 'react';
import { Divider, Popconfirm } from 'antd'; import { Divider, Popconfirm } from 'antd';
export const getColumns = props => { export const getColumns = props => {
const { onDeleteRole, toRoleInfo } = props; const { onDeleteRole, toRoleInfo, canAddEdit } = props;
return [ return [
{ {
title: '角色ID', title: '角色ID',
...@@ -25,7 +25,7 @@ export const getColumns = props => { ...@@ -25,7 +25,7 @@ export const getColumns = props => {
}, },
{ {
title: '关联账号', title: '关联账号',
dataIndex: 'account', dataIndex: 'userCount',
hideInSearch: true, hideInSearch: true,
}, },
{ {
...@@ -43,17 +43,21 @@ export const getColumns = props => { ...@@ -43,17 +43,21 @@ export const getColumns = props => {
key: 'action', key: 'action',
render: (value, record) => ( render: (value, record) => (
<> <>
<a onClick={() => toRoleInfo(record)}>编辑</a> {canAddEdit ? <a onClick={() => toRoleInfo(record)}>编辑</a> : ''}
<Divider type="vertical" /> {canAddEdit && record.userCount !== 0 ? <Divider type="vertical" /> : ''}
<Popconfirm {record.userCount === 0 ? (
placement="top" <Popconfirm
title="确定删除该角色吗?" placement="top"
onConfirm={() => onDeleteRole(record)} title="确定删除该角色吗?"
okText="确定" onConfirm={() => onDeleteRole(record)}
cancelText="取消" okText="确定"
> cancelText="取消"
<a>删除</a> >
</Popconfirm> <a>删除</a>
</Popconfirm>
) : (
''
)}
</> </>
), ),
}, },
......
...@@ -4,16 +4,21 @@ import { Button, notification } from 'antd'; ...@@ -4,16 +4,21 @@ import { Button, notification } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import { connect } from 'umi'; import { connect } from 'umi';
import { ROLE_MANAGE } from '@/../config/permission.config';
import { deleteRole, getRoleList } from '../service'; import { deleteRole, getRoleList } from '../service';
// data // data
import { getColumns } from './data'; import { getColumns } from './data';
const Role = props => { const Role = props => {
const { permissions } = props;
const actionRef = useRef(); const actionRef = useRef();
const formRef = useRef(); const formRef = useRef();
const history = useHistory(); const history = useHistory();
// 权限控制
const canAddEdit = permissions[ROLE_MANAGE.EDITABLE.id];
const toRoleInfo = ({ id = null } = {}) => { const toRoleInfo = ({ id = null } = {}) => {
const query = id ? { id } : {}; const query = id ? { id } : {};
history.push({ history.push({
...@@ -39,6 +44,7 @@ const Role = props => { ...@@ -39,6 +44,7 @@ const Role = props => {
const columns = getColumns({ const columns = getColumns({
onDeleteRole, onDeleteRole,
toRoleInfo, toRoleInfo,
canAddEdit,
}); });
// 表格属性 // 表格属性
...@@ -57,9 +63,13 @@ const Role = props => { ...@@ -57,9 +63,13 @@ const Role = props => {
}; };
}, },
toolBarRender: () => [ toolBarRender: () => [
<Button type="primary" onClick={() => toRoleInfo()}> canAddEdit ? (
新增角色 <Button type="primary" onClick={() => toRoleInfo()}>
</Button>, 新增角色
</Button>
) : (
<></>
),
], ],
}; };
// 搜索属性 // 搜索属性
......
...@@ -37,6 +37,16 @@ export function addUser(params) { ...@@ -37,6 +37,16 @@ export function addUser(params) {
}); });
} }
/**
* @name 修改子账号
* @see http://yapi.quantgroups.com/project/509/interface/api/43344
*/
export function updateUser(params) {
return request.post('/v2/user/update', {
data: params,
});
}
/** /**
* @name 用户禁用 * @name 用户禁用
* @param {Object} params * @param {Object} params
......
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