index.tsx 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. import { Card, Tabs, Checkbox, Affix, Button, message } from 'antd'
  2. import React, { useState } from 'react'
  3. import { queryRoleDetailByID, setRolePermission } from '@/services/permission'
  4. import { useRequest } from 'umi'
  5. import { RoleType } from '../RoleLeftMenu'
  6. import './index.less'
  7. const { TabPane } = Tabs
  8. type PermTabsProps = {
  9. currentPermData: {
  10. ID: string
  11. roleType: RoleType
  12. }
  13. }
  14. const PermTabs: React.FC<PermTabsProps> = ({ currentPermData: { ID, roleType } }) => {
  15. const [state, setState] = useState({
  16. frontPermission: [], // 前台权限
  17. backstagePermission: [] // 后台权限
  18. })
  19. useRequest(() => queryRoleDetailByID({ ID }), {
  20. refreshDeps: [ID],
  21. onSuccess: ({ frontPermission = [], backstagePermission = [] } = {}) => {
  22. setState({ ...state, frontPermission, backstagePermission })
  23. },
  24. onError: e => console.log(e)
  25. })
  26. const { run: trySetRolePermission } = useRequest(
  27. (params: API.SetRolePermissionParams) => setRolePermission(params),
  28. {
  29. manual: true,
  30. onSuccess: () => {
  31. message.success('设置成功')
  32. }
  33. }
  34. )
  35. const handleFrontOnchange = (checked: boolean, perm: string) => {
  36. if (checked) {
  37. setState({ ...state, frontPermission: [...state.frontPermission, perm] })
  38. } else {
  39. setState({ ...state, frontPermission: state.frontPermission.filter(item => item !== perm) })
  40. }
  41. }
  42. const handleBackOnchange = (checked: boolean, perm: string) => {
  43. if (checked) {
  44. setState({ ...state, backstagePermission: [...state.backstagePermission, perm] })
  45. } else {
  46. setState({
  47. ...state,
  48. backstagePermission: state.backstagePermission.filter(item => item !== perm)
  49. })
  50. }
  51. }
  52. const handleSubmit = () => {
  53. trySetRolePermission({
  54. ID,
  55. frontPermission: state.frontPermission,
  56. backstagePermission: state.backstagePermission
  57. })
  58. }
  59. return (
  60. <div>
  61. <Tabs type="card">
  62. <TabPane tab="前台" key="3" className="tab-height overflow-y-auto">
  63. <div className="shadow-md mb-4">
  64. <Card size="small" type="inner" title="待办列表">
  65. <div>
  66. {/* <h4>我的项目</h4> */}
  67. <div className="my-2">
  68. <Checkbox onChange={e => handleFrontOnchange(e.target.checked, 'todo')} disabled>
  69. 已办待办
  70. </Checkbox>
  71. </div>
  72. </div>
  73. </Card>
  74. </div>
  75. <div className="shadow-md mb-4">
  76. <Card size="small" type="inner" title="项目列表">
  77. <div>
  78. <h4>我的项目</h4>
  79. <div className="my-2">
  80. <Checkbox
  81. onChange={e => handleFrontOnchange(e.target.checked, 'viewProject')}
  82. checked={state.frontPermission.includes('viewProject')}
  83. disabled={roleType === RoleType.SYSTEM}>
  84. 查看项目
  85. </Checkbox>
  86. <Checkbox
  87. onChange={e => handleFrontOnchange(e.target.checked, 'addProject')}
  88. checked={state.frontPermission.includes('addProject')}
  89. disabled={roleType === RoleType.SYSTEM}>
  90. 新建项目
  91. </Checkbox>
  92. <Checkbox
  93. onChange={e => handleFrontOnchange(e.target.checked, 'report')}
  94. checked={state.frontPermission.includes('report')}
  95. disabled={roleType === RoleType.SYSTEM}>
  96. 项目上报
  97. </Checkbox>
  98. <Checkbox
  99. onChange={e => handleFrontOnchange(e.target.checked, 'editProject')}
  100. checked={state.frontPermission.includes('editProject')}
  101. disabled={roleType === RoleType.SYSTEM}>
  102. 编辑项目
  103. </Checkbox>
  104. <Checkbox
  105. onChange={e => handleFrontOnchange(e.target.checked, 'exportProject')}
  106. checked={state.frontPermission.includes('exportProject')}
  107. disabled={roleType === RoleType.SYSTEM}>
  108. 导出项目
  109. </Checkbox>
  110. <Checkbox
  111. onChange={e => handleFrontOnchange(e.target.checked, 'delProject')}
  112. checked={state.frontPermission.includes('delProject')}
  113. disabled={roleType === RoleType.SYSTEM}>
  114. 删除项目
  115. </Checkbox>
  116. </div>
  117. </div>
  118. <div>
  119. <h4 className="pt-3">我参与的项目</h4>
  120. <div className="my-2">
  121. <Checkbox
  122. disabled={roleType === RoleType.SYSTEM}
  123. checked={state.frontPermission.includes('viewParticipatingProject')}
  124. onChange={e =>
  125. handleFrontOnchange(e.target.checked, 'viewParticipatingProject')
  126. }>
  127. 查看项目
  128. </Checkbox>
  129. <Checkbox
  130. disabled={roleType === RoleType.SYSTEM}
  131. checked={state.frontPermission.includes('saveIndex')}
  132. onChange={e => handleFrontOnchange(e.target.checked, 'saveIndex')}>
  133. 指标入库
  134. </Checkbox>
  135. <Checkbox
  136. disabled={roleType === RoleType.SYSTEM}
  137. checked={state.frontPermission.includes('exportParticipatingProject')}
  138. onChange={e =>
  139. handleFrontOnchange(e.target.checked, 'exportParticipatingProject')
  140. }>
  141. 导出
  142. </Checkbox>
  143. </div>
  144. </div>
  145. <div>
  146. <h4 className="pt-3">全部项目</h4>
  147. <div className="my-2">
  148. <Checkbox
  149. onChange={e => handleFrontOnchange(e.target.checked, 'viewAllProjects')}
  150. checked={state.frontPermission.includes('viewAllProjects')}
  151. disabled={roleType === RoleType.SYSTEM}>
  152. 查看项目
  153. </Checkbox>
  154. <Checkbox
  155. disabled={roleType === RoleType.SYSTEM}
  156. checked={state.frontPermission.includes('saveIndexAll')}
  157. onChange={e => handleFrontOnchange(e.target.checked, 'saveIndexAll')}>
  158. 指标入库
  159. </Checkbox>
  160. </div>
  161. </div>
  162. <div>
  163. <h4 className="pt-3">指标库</h4>
  164. <div className="my-2">
  165. <Checkbox
  166. onChange={e => handleFrontOnchange(e.target.checked, 'section')}
  167. disabled>
  168. 区间对数
  169. </Checkbox>
  170. </div>
  171. </div>
  172. </Card>
  173. </div>
  174. <div className="shadow-md mb-4">
  175. <Card size="small" type="inner" title="个人设置">
  176. <div>
  177. <h4>基本设置</h4>
  178. <div className="my-2">
  179. <Checkbox onChange={e => handleFrontOnchange(e.target.checked, 'edit')} disabled>
  180. 编辑
  181. </Checkbox>
  182. </div>
  183. </div>
  184. <div>
  185. <h4 className="pt-3">企事业信息</h4>
  186. <div className="my-2">
  187. <Checkbox
  188. onChange={e => handleFrontOnchange(e.target.checked, 'access2')}
  189. disabled>
  190. 查看
  191. </Checkbox>
  192. </div>
  193. </div>
  194. <div>
  195. <h4 className="pt-3">安全设置</h4>
  196. <div className="my-2">
  197. <Checkbox onChange={e => handleFrontOnchange(e.target.checked, 'phone')} disabled>
  198. 手机绑定
  199. </Checkbox>
  200. <Checkbox
  201. onChange={e => handleFrontOnchange(e.target.checked, 'password')}
  202. disabled>
  203. 密码修改
  204. </Checkbox>
  205. </div>
  206. </div>
  207. </Card>
  208. </div>
  209. </TabPane>
  210. <TabPane tab="后台" key="4" className="tab-height overflow-y-auto">
  211. <div className="shadow-md mb-4">
  212. <Card size="small" type="inner" title="项目">
  213. <div>
  214. <h4>项目管理</h4>
  215. <div className="my-2">
  216. <Checkbox
  217. onChange={e => handleBackOnchange(e.target.checked, 'password')}
  218. checked={state.backstagePermission.includes('updatePsw')}
  219. disabled>
  220. 密码修改
  221. </Checkbox>
  222. <Checkbox
  223. onChange={e => handleBackOnchange(e.target.checked, 'addBa1')}
  224. checked={state.backstagePermission.includes('updatePsw')}
  225. disabled>
  226. 新建项目
  227. </Checkbox>
  228. <Checkbox
  229. onChange={e => handleBackOnchange(e.target.checked, 'editBa1')}
  230. checked={state.backstagePermission.includes('updatePsw')}
  231. disabled>
  232. 编辑项目
  233. </Checkbox>
  234. <Checkbox
  235. onChange={e => handleBackOnchange(e.target.checked, 'bindBa1')}
  236. checked={state.backstagePermission.includes('updatePsw')}
  237. disabled>
  238. 绑定角色
  239. </Checkbox>
  240. <Checkbox
  241. onChange={e => handleBackOnchange(e.target.checked, 'deployBa1')}
  242. checked={state.backstagePermission.includes('updatePsw')}
  243. disabled>
  244. 流程配置
  245. </Checkbox>
  246. </div>
  247. </div>
  248. <div>
  249. <h4 className="pt-3">审批流程模板</h4>
  250. <div className="my-2">
  251. <Checkbox
  252. onChange={e => handleBackOnchange(e.target.checked, 'accessBa2')}
  253. checked={state.backstagePermission.includes('updatePsw')}
  254. disabled>
  255. 查看流程
  256. </Checkbox>
  257. <Checkbox
  258. onChange={e => handleBackOnchange(e.target.checked, 'addBa2')}
  259. checked={state.backstagePermission.includes('updatePsw')}
  260. disabled>
  261. 新建流程
  262. </Checkbox>
  263. <Checkbox
  264. onChange={e => handleBackOnchange(e.target.checked, 'editBa2')}
  265. checked={state.backstagePermission.includes('updatePsw')}
  266. disabled>
  267. 编辑流程
  268. </Checkbox>
  269. </div>
  270. </div>
  271. <div>
  272. <h4 className="pt-3">项目创建人</h4>
  273. <div className="my-2">
  274. <Checkbox
  275. onChange={e => handleBackOnchange(e.target.checked, 'accessBa3')}
  276. checked={state.backstagePermission.includes('updatePsw')}
  277. disabled>
  278. 查看创建人
  279. </Checkbox>
  280. <Checkbox
  281. onChange={e => handleBackOnchange(e.target.checked, 'addBa3')}
  282. checked={state.backstagePermission.includes('updatePsw')}
  283. disabled>
  284. 新建创建人
  285. </Checkbox>
  286. <Checkbox
  287. onChange={e => handleBackOnchange(e.target.checked, 'deleteBa3')}
  288. checked={state.backstagePermission.includes('updatePsw')}
  289. disabled>
  290. 删除创建人
  291. </Checkbox>
  292. </div>
  293. </div>
  294. </Card>
  295. </div>
  296. <div className="shadow-md mb-4">
  297. <Card size="small" type="inner" title="企事业单位">
  298. <div>
  299. <h4>单位管理</h4>
  300. <div className="my-2">
  301. <Checkbox
  302. onChange={e => handleBackOnchange(e.target.checked, 'accessBa4')}
  303. checked={state.backstagePermission.includes('updatePsw')}
  304. disabled>
  305. 查看单位
  306. </Checkbox>
  307. <Checkbox
  308. onChange={e => handleBackOnchange(e.target.checked, 'addBa4')}
  309. checked={state.backstagePermission.includes('updatePsw')}
  310. disabled>
  311. 新建单位
  312. </Checkbox>
  313. <Checkbox
  314. onChange={e => handleBackOnchange(e.target.checked, 'staff')}
  315. checked={state.backstagePermission.includes('updatePsw')}
  316. disabled>
  317. 人员管理
  318. </Checkbox>
  319. <Checkbox
  320. onChange={e => handleBackOnchange(e.target.checked, 'organizational')}
  321. checked={state.backstagePermission.includes('updatePsw')}
  322. disabled>
  323. 组织管理
  324. </Checkbox>
  325. <Checkbox
  326. onChange={e => handleBackOnchange(e.target.checked, 'deploy')}
  327. checked={state.backstagePermission.includes('updatePsw')}
  328. disabled>
  329. 单位设置
  330. </Checkbox>
  331. </div>
  332. </div>
  333. <div>
  334. <h4 className="pt-3">人员管理</h4>
  335. <div className="my-2">
  336. <Checkbox
  337. onChange={e => handleBackOnchange(e.target.checked, 'accessBa5')}
  338. checked={state.backstagePermission.includes('updatePsw')}
  339. disabled>
  340. 查看人员
  341. </Checkbox>
  342. <Checkbox
  343. onChange={e => handleBackOnchange(e.target.checked, 'editBa5')}
  344. checked={state.backstagePermission.includes('updatePsw')}
  345. disabled>
  346. 编辑人员
  347. </Checkbox>
  348. </div>
  349. </div>
  350. </Card>
  351. </div>
  352. <div className="shadow-md mb-4">
  353. <Card size="small" type="inner" title="业务设置">
  354. <div>
  355. <h4>项目信息</h4>
  356. <div className="my-2">
  357. <Checkbox
  358. onChange={e => handleBackOnchange(e.target.checked, 'accessBa6')}
  359. checked={state.backstagePermission.includes('updatePsw')}
  360. disabled>
  361. 查看信息
  362. </Checkbox>
  363. <Checkbox
  364. onChange={e => handleBackOnchange(e.target.checked, 'editBa6')}
  365. checked={state.backstagePermission.includes('updatePsw')}
  366. disabled>
  367. 编辑信息
  368. </Checkbox>
  369. </div>
  370. </div>
  371. <div>
  372. <h4 className="pt-3">企事业单位信息</h4>
  373. <div className="my-2">
  374. <Checkbox
  375. onChange={e => handleBackOnchange(e.target.checked, 'accessBa7')}
  376. checked={state.backstagePermission.includes('updatePsw')}
  377. disabled>
  378. 查看信息
  379. </Checkbox>
  380. <Checkbox
  381. onChange={e => handleBackOnchange(e.target.checked, 'editBa7')}
  382. checked={state.backstagePermission.includes('updatePsw')}
  383. disabled>
  384. 编辑信息
  385. </Checkbox>
  386. </div>
  387. </div>
  388. <div>
  389. <h4 className="pt-3">人员信息</h4>
  390. <div className="my-2">
  391. <Checkbox
  392. onChange={e => handleBackOnchange(e.target.checked, 'accessBa8')}
  393. checked={state.backstagePermission.includes('updatePsw')}
  394. disabled>
  395. 查看信息
  396. </Checkbox>
  397. <Checkbox
  398. onChange={e => handleBackOnchange(e.target.checked, 'editBa8')}
  399. checked={state.backstagePermission.includes('updatePsw')}
  400. disabled>
  401. 编辑信息
  402. </Checkbox>
  403. </div>
  404. </div>
  405. </Card>
  406. </div>
  407. <div className="shadow-md mb-4">
  408. <Card size="small" type="inner" title="系统管理">
  409. <div>
  410. <h4>管理员设置</h4>
  411. <div className="my-2">
  412. <Checkbox
  413. onChange={e => handleBackOnchange(e.target.checked, 'accessBa9')}
  414. checked={state.backstagePermission.includes('updatePsw')}
  415. disabled>
  416. 查看信息
  417. </Checkbox>
  418. <Checkbox
  419. onChange={e => handleBackOnchange(e.target.checked, 'editBa9')}
  420. checked={state.backstagePermission.includes('updatePsw')}
  421. disabled>
  422. 编辑信息
  423. </Checkbox>
  424. </div>
  425. </div>
  426. </Card>
  427. </div>
  428. </TabPane>
  429. </Tabs>
  430. <Affix offsetBottom={10}>
  431. <Button type="primary" onClick={handleSubmit}>
  432. 提交
  433. </Button>
  434. </Affix>
  435. </div>
  436. )
  437. }
  438. export default PermTabs