知与行后台管理端

addRole.jsx 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. import React, { useState, useEffect } from 'react';
  2. import { Checkbox, Input, Card, Form, Button,Row,Col } 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, join } from 'path';
  8. import router from 'umi/router';
  9. import apis from '../../../services/apis';
  10. const { TextArea } = Input;
  11. /**
  12. *
  13. *
  14. * @param {*} props
  15. * @returns
  16. */
  17. const Poster = props => {
  18. const userMenus = props.user.currentUser.menus;
  19. const userBtns = props.user.currentUser.buttons;
  20. // 获取当前所有菜单
  21. const [data, setData] = useState({ data: [] })
  22. const [buutonDate, setBuutonDate] = useState({})
  23. // 展示要显示的菜单和按钮----(编辑)
  24. const [dataMenuId, setDataMenuId] = useState([])
  25. const [dataButtonId, setDataButtonId] = useState([])
  26. useEffect(() => {
  27. // 新增和编辑用一个页面
  28. if (props.location.query) {
  29. const { id } = props.location.query
  30. if (id) {
  31. buttonAndMenuList('', id)
  32. }
  33. }
  34. // menuList({ pageNum: 1, pageSize: 100 })
  35. buttonList({ pageNum: 1, pageSize: 100 })
  36. }, [])
  37. // 当前所有的菜单
  38. // function menuList(params) {
  39. // request({
  40. // url: '/api/admin/menuList',
  41. // method: 'GET',
  42. // params: { ...params },
  43. // // eslint-disable-next-line no-shadow
  44. // }).then(data => {
  45. // setData(data)
  46. // })
  47. // }
  48. function menuList(params) {
  49. request({ ...apis.role.menuList, params: { ...params } }).then((data) => {
  50. setData(data)
  51. }).catch((err) => {
  52. console.log(err)
  53. message.info(err.msg || err.message)
  54. })
  55. }
  56. // 所有按钮
  57. // function buttonList(params) {
  58. // request({
  59. // url: '/api/admin/buttonList',
  60. // method: 'GET',
  61. // params: { ...params },
  62. // // eslint-disable-next-line no-shadow
  63. // }).then(data => {
  64. // console.log(data)
  65. // setBuutonDate(data)
  66. // })
  67. // }
  68. function buttonList(params) {
  69. request({ ...apis.role.buttonList, params: { ...params } }).then((data) => {
  70. setBuutonDate(data)
  71. }).catch((err) => {
  72. console.log(err)
  73. })
  74. }
  75. // 根据角色id查询当前的菜单及其按钮
  76. // function buttonAndMenuList(params, id) {
  77. // console.log('id: ', id)
  78. // request({
  79. // url: `/api/admin/taRole/details/${id}`,
  80. // method: 'GET',
  81. // params: { ...params },
  82. // // eslint-disable-next-line no-shadow
  83. // }).then(data => {
  84. // console.log('data.roleName: ', data)
  85. // props.form.setFieldsValue({ roleName: data.roleName })
  86. // console.log(data)
  87. // setData(data)
  88. // // 获取所有的权限Id
  89. // if (data.sysMenuList) {
  90. // setDataMenuId(data.sysMenuList.map(item => item.menuId))
  91. // setDataButtonId((data.sysMenuList.map(item => item.sysButtonInMenu && item.sysButtonInMenu.map(btn => btn.btnId).join(',')).filter(f => f !== '').join(',').split(',')).map(a => parseInt(a)))
  92. // }
  93. // })
  94. // }
  95. function buttonAndMenuList(params, ids) {
  96. request({ ...apis.role.buttonAndMenuList, urlData: { id: ids }, params: { ...params } }).then(data => {
  97. props.form.setFieldsValue({ roleName: data.roleName })
  98. console.log(data)
  99. setData(data)
  100. // 获取所有的权限Id
  101. if (data.sysMenuList) {
  102. setDataMenuId(data.sysMenuList.map(item => item.menuId))
  103. setDataButtonId((data.sysMenuList.map(item => item.sysButtonInMenu && item.sysButtonInMenu.map(btn => btn.btnId).join(',')).filter(f => f !== '').join(',').split(',')).map(a => parseInt(a)))
  104. }
  105. }).catch((err) => {
  106. console.log(err)
  107. message.info(err.msg || err.message)
  108. })
  109. }
  110. // const [menus, setMenus] = useState([]);
  111. // 判断menus是否有值
  112. const [menus, setMenus] = useState([]);
  113. const addMenus = m => setMenus([...menus, m])
  114. const delMenus = m => setMenus(menus.filter(x => x.menuId !== m.menuId));
  115. const handleMenuChange = m => e => {
  116. if (e.target.checked) {
  117. setDataMenuId(dataMenuId.concat(m.menuId))
  118. addMenus(m)
  119. } else {
  120. setDataMenuId(dataMenuId.filter(item => item !== m.menuId));
  121. delMenus(m)
  122. }
  123. }
  124. const [but, setBut] = useState([]);
  125. // 判断menus是否有值
  126. const addBut = m => setBut([...but, m])
  127. const delBut = m => setBut(but.filter(x => x.menuId !== m.menuId));
  128. const handleButChange = m => e => {
  129. if (e.target.checked) {
  130. setDataButtonId(dataButtonId.concat(m.btnId))
  131. addBut(m)
  132. } else {
  133. setDataButtonId(dataButtonId.filter(item => item !== m.btnId));
  134. delBut(m)
  135. }
  136. }
  137. const gridStyle1 = {
  138. width: '16%',
  139. textAlign: 'left',
  140. height: '72px',
  141. padding:'24px 10px'
  142. };
  143. const gridStyle2 = {
  144. width: '84%',
  145. textAlign: 'left',
  146. height: '72px',
  147. };
  148. function toRoleList() {
  149. router.push({
  150. pathname: '/staff/RoleList',
  151. });
  152. }
  153. // function updateAuthMenu(params) {
  154. // request({
  155. // url: '/api/admin/updateAuthMenu',
  156. // method: 'POST',
  157. // data: { ...params },
  158. // // eslint-disable-next-line no-shadow
  159. // }).then(data => {
  160. // toRoleList()
  161. // })
  162. // }
  163. function updateAuthMenu(data) {
  164. request({ ...apis.role.updateAuthMenu, data: { ...data } }).then((data) => {
  165. toRoleList()
  166. }).catch((err) => {
  167. console.log(err)
  168. })
  169. }
  170. function handleSubmit(e) {
  171. e.preventDefault();
  172. props.form.validateFields((err, values) => {
  173. if (props.location.query.id !== undefined) {
  174. console.log('menus', menus)
  175. const sumitMenu = userMenus.filter(item => dataMenuId.includes(item.menuId))
  176. const sumitBtn = buutonDate.filter(item => dataButtonId.includes(item.btnId))
  177. // console.log('sumitMenu', sumitMenu)
  178. // console.log('sumitBtn', sumitBtn)
  179. // console.log('sumitMenu', sumitMenu)
  180. // const sumitBut = data.sysMenuList[0].sysButtonInMenu.concat(but)
  181. updateAuthMenu({ sysMenu: sumitMenu, name: values.roleName, id: props.location.query.id, sysButton: sumitBtn })
  182. } else {
  183. updateAuthMenu({ sysMenu: menus, name: values.roleName, id: props.location.query.id, sysButton: but })
  184. }
  185. });
  186. }
  187. const { getFieldDecorator } = props.form;
  188. return (
  189. <>
  190. <div>
  191. <Form labelCol={{ span: 6 }} wrapperCol={{ span: 12 }} onSubmit={handleSubmit}>
  192. <Form.Item label="角色名称">
  193. {getFieldDecorator('roleName', {
  194. rules: [{ required: true, message: '请输入角色名称' }],
  195. })(<Input className={channels.inpuit} />)}
  196. </Form.Item>
  197. {userMenus.map(item => (
  198. (item.parentCode === '-1') &&
  199. <Row >
  200. <Col span={6}>
  201. </Col>
  202. <Col span={18}>
  203. <Card title={<Checkbox checked={dataMenuId.includes(item.menuId)} onChange={handleMenuChange(item)}>{item.name}</Checkbox>} bordered style={{ width: '100%', alignItems: 'center',margin:'10px 0', boxShadow:'3px 3px 10px rgba(0,0,0,0.15)',borderRadius:'8px'}} >
  204. {
  205. userMenus.map(menu => (
  206. (item.menuId === menu.menuRoot && item.menuId !== menu.menuId) &&
  207. <>
  208. <Card.Grid style={gridStyle1} >
  209. <Checkbox checked={dataMenuId.includes(menu.menuId)} onChange={handleMenuChange(menu)}>{menu.name}</Checkbox>
  210. </Card.Grid>
  211. <Card.Grid style={gridStyle2}>
  212. {buutonDate.length > 0 && buutonDate.map(btn => (
  213. <>
  214. {
  215. btn.menuId === menu.menuId &&
  216. <Checkbox checked={dataButtonId.includes(btn.btnId)} onChange={handleButChange(btn)}>{btn.name}</Checkbox>
  217. }
  218. </>
  219. ))}
  220. </Card.Grid>
  221. </>
  222. ))
  223. }
  224. </Card>
  225. </Col>
  226. </Row>
  227. ))}
  228. <Form.Item wrapperCol={{ span: 15, offset: 7 }} style={{ marginTop: '10px' }}>
  229. <Button type="primary" htmlType="submit">
  230. 保存
  231. </Button>
  232. <Button className={channels.formButton} htmlType="submit" onChange = {toRoleList}>
  233. 取消
  234. </Button>
  235. </Form.Item>
  236. </Form>
  237. </div>
  238. </>
  239. )
  240. }
  241. const WrappedNormalLoginForm = Form.create({ name: 'Poster' })(Poster);
  242. export default connect(({ user }) => ({ user }))(WrappedNormalLoginForm);