知与行后台管理端

addRole.jsx 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import React, { useState, useEffect } from 'react';
  2. import { Checkbox, Input, Card, Form, Button } from 'antd';
  3. import { connect } from 'dva';
  4. import XForm, { FieldTypes } from '../../../components/XForm';
  5. import request from '../../../utils/request';
  6. import channels from './channelList.less';
  7. import { resolve } from 'path';
  8. const { TextArea } = Input;
  9. /**
  10. *
  11. *
  12. * @param {*} props
  13. * @returns
  14. */
  15. const Poster = props => {
  16. console.log('props,props', props.user.currentUser)
  17. const userMenus = props.user.currentUser.menus;
  18. const userBtns = props.user.currentUser.buttons;
  19. // 获取当前所有菜单
  20. const [data, setData] = useState({ data: [] })
  21. const [buutonDate, setBuutonDate] = useState({ })
  22. useEffect(() => {
  23. localStorage.removeItem('value');
  24. menuList({ pageNum: 1, pageSize: 100 })
  25. buttonList({ pageNum: 1, pageSize: 100 })
  26. // buttonAndMenuList()
  27. }, [])
  28. function menuList(params) {
  29. request({
  30. url: '/api/admin/menuList',
  31. method: 'GET',
  32. params: { ...params },
  33. // eslint-disable-next-line no-shadow
  34. }).then(data => {
  35. console.log(data)
  36. setData(data)
  37. })
  38. }
  39. // 所有按钮
  40. function buttonList(params) {
  41. request({
  42. url: '/api/admin/buttonList',
  43. method: 'GET',
  44. params: { ...params },
  45. // eslint-disable-next-line no-shadow
  46. }).then(data => {
  47. console.log(data)
  48. setBuutonDate(data)
  49. })
  50. }
  51. // 根据角色id查询当前的菜单及其按钮
  52. function buttonAndMenuList(params) {
  53. request({
  54. url: `/api/admin/taRole/details/${2}`,
  55. method: 'GET',
  56. params: { ...params },
  57. // eslint-disable-next-line no-shadow
  58. }).then(data => {
  59. console.log(data)
  60. setData(data)
  61. })
  62. }
  63. // const [menus, setMenus] = useState([]);
  64. // 判断menus是否有值
  65. const [menus, setMenus] = useState([]);
  66. const addMenus = m => {
  67. const newMenus = [...menus, m]
  68. setMenus([...menus, m])
  69. };
  70. const delMenus = m => setMenus(menus.filter(x => x.menuId !== m.menuId));
  71. const handleMenuChange = m => e => {
  72. console.log('e', m)
  73. if (e.target.checked) {
  74. // setMenusData(m)
  75. addMenus(m)
  76. } else {
  77. delMenus(m)
  78. }
  79. }
  80. const [but, setBut] = useState([]);
  81. // 判断menus是否有值
  82. const addBut = m => setBut([...but, m]);
  83. const delBut = m => setBut(but.filter(x => x.menuId !== m.menuId));
  84. const handleButChange = m => e => {
  85. console.log('e', m)
  86. if (e.target.checked) {
  87. addBut(m)
  88. } else {
  89. delBut(m)
  90. }
  91. }
  92. const gridStyle1 = {
  93. width: '20%',
  94. textAlign: 'left',
  95. };
  96. const gridStyle2 = {
  97. width: '80%',
  98. textAlign: 'left',
  99. height: '69px',
  100. };
  101. function handleSubmit (e) {
  102. e.preventDefault();
  103. props.form.validateFields((err, values) => {
  104. request({
  105. url: '/api/admin/updateAuthMenu',
  106. method: 'PUT',
  107. data: { sysMenu: menus },
  108. // eslint-disable-next-line no-shadow
  109. }).then(data => {
  110. console.log(data)
  111. setData(data)
  112. })
  113. });
  114. }
  115. const { getFieldDecorator } = props.form;
  116. return (
  117. <>
  118. <div >
  119. <Form labelCol={{ span: 7 }} wrapperCol={{ span: 12 }} onSubmit={handleSubmit}>
  120. <Form.Item label="渠道名称">
  121. {getFieldDecorator('channelName', {
  122. rules: [{ required: true, message: '请输入渠道名称' }],
  123. })(<Input className={channels.inpuit} />)}
  124. </Form.Item>
  125. {userMenus.map(item => (
  126. (item.parentCode === '-1') &&
  127. <Card title={<Checkbox onChange={handleMenuChange(item)}>{item.name}</Checkbox>} bordered style={{ width: '100%', alignItems: 'center' }} >
  128. {
  129. userMenus.map(menu => (
  130. (item.menuId === menu.menuRoot && item.menuId !== menu.menuId) &&
  131. <>
  132. <Card.Grid style={gridStyle1} >
  133. <Checkbox onChange={handleMenuChange(menu)}>{menu.name}</Checkbox>
  134. </Card.Grid>
  135. <Card.Grid style={gridStyle2}>
  136. {buutonDate.length > 0 && buutonDate.map(btn => (
  137. <>
  138. {
  139. btn.menuId === menu.menuId &&
  140. <Checkbox onChange={handleButChange(btn)}>{btn.name}</Checkbox>
  141. }
  142. </>
  143. ))}
  144. </Card.Grid>
  145. </>
  146. ))
  147. }
  148. </Card>
  149. ))}
  150. <Form.Item wrapperCol={{ span: 15, offset: 7 }}>
  151. <Button type="primary" htmlType="submit">
  152. 保存
  153. </Button>
  154. <Button className={channels.formButton} type="primary" htmlType="submit">
  155. 取消
  156. </Button>
  157. </Form.Item>
  158. </Form>
  159. </div>
  160. </>
  161. )
  162. }
  163. const WrappedNormalLoginForm = Form.create({ name: 'Poster' })(Poster);
  164. export default connect(({ user }) => ({ user }))(WrappedNormalLoginForm);