index.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. import React, { useState, useEffect } from 'react';
  2. import { Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
  3. import { PlusOutlined } from '@ant-design/icons';
  4. import '@common/common.less';
  5. import apiObj from '@api/index';
  6. import {filterIds } from '@utils/index';
  7. import DataContext from './data-context';
  8. import AddData from './AddData';
  9. const { post, api, xPost } = apiObj;
  10. const { Option } = Select;
  11. function DataManager() {
  12. useEffect(() => {
  13. getDataAuthPage();
  14. }, []);
  15. const [userList, setUserList] = useState([]);
  16. const [currentId, setCurrentId] = useState(""); //编辑数据的id
  17. const [modalType, setModalType] = useState("");
  18. const [msvisible, setMsvisible] = useState(false);
  19. const [operType, setOperType] = useState(""); //操作类型:1新增 3修改
  20. const [addVisible, setaddVisible] = useState(false);
  21. const [formData, setFormData] = useState(null);
  22. const [total, setTotal] = useState(0);
  23. const [authChecksArr, setAuthChecksArr] = useState({}); //选中数据
  24. const [originData,setOriginData] = useState({}); //编辑的原始数据
  25. const [tag, setTag] = useState([[]]);
  26. const [val, setVal] = useState([]);
  27. const [size, setSize] = useState(15);
  28. const [current, setCurrent] = useState(1);
  29. const [params, setParams] = useState({
  30. pages: 1,
  31. current: 1,
  32. size: 15
  33. });
  34. const [form] = Form.useForm();
  35. const tipText = {
  36. 1: '确定要删除该数据权限?',
  37. 2: '确定要禁用该数据权限?',
  38. };
  39. let data = {
  40. pages: 1,
  41. current: 1,
  42. size: size
  43. }
  44. const showModal = (flag, id) => {
  45. setOperType(flag)
  46. setCurrentId(id)
  47. //新增
  48. if (flag == 1) {
  49. setaddVisible(true)
  50. //新增时状态默认启用
  51. setFormData({
  52. status: '1'
  53. });
  54. setVal([])
  55. }
  56. //修改
  57. if (flag == 3) {
  58. getDataAuthById(id)
  59. }
  60. }
  61. //表格数据
  62. function getDataAuthPage(param) {
  63. //const param = filterData;
  64. post(api.getDataAuthPage, param || params).then((res) => {
  65. if (res.data.code === 200) {
  66. const data = res.data.data;
  67. setUserList(data.records);
  68. setTotal(data.total)
  69. }
  70. })
  71. }
  72. //禁用启用
  73. const disableAuth = (id, status) => {
  74. let params = {
  75. id: id,
  76. status: status
  77. }
  78. xPost(api.disableAuth, params).then((res) => {
  79. if (res.data.code === 200) {
  80. getDataAuthPage();
  81. setMsvisible(false);
  82. message.success((status ? '启用' : '禁用') + "成功");
  83. } else {
  84. message.warning(res.data.message || '操作失败');
  85. }
  86. })
  87. };
  88. //删除
  89. const deleteAuth = (id) => {
  90. let params = {
  91. id: id,
  92. }
  93. xPost(api.deleteAuth, params).then((res) => {
  94. if (res.data.code === 200) {
  95. getDataAuthPage();
  96. setMsvisible(false);
  97. message.success("操作成功");
  98. } else {
  99. message.warning(res.data.msg || '操作失败');
  100. }
  101. })
  102. };
  103. //查看
  104. function getDataAuthById(id) {
  105. xPost(api.getDataAuthById, { id: id }).then((res) => {
  106. if (res.data.code === 200) {
  107. const data = res.data.data;
  108. structEditData(data);
  109. }else{
  110. message.warning(res.data.msg || '详情获取失败');
  111. }
  112. })
  113. }
  114. //重组成提交需要的数据
  115. function structEditData(data){
  116. const {id,name,status,softwares} = data;
  117. let formObj = {
  118. id,
  119. name,
  120. status,
  121. softwareVOS:[]
  122. };
  123. setOriginData(softwares);
  124. let tempArr = [],authArr=[],checkedsObj={},arrVal=[]; //权限数据
  125. softwares.map((software,i)=>{
  126. const {id,name,roles,dataAuthDetail,dataType} = software;
  127. const {depts,doctors,hospitals} = dataAuthDetail||{};
  128. tempArr = [...depts||[],...doctors||[],...hospitals||[]];
  129. //arrVal =
  130. checkedsObj[i] = fullfillVals(tempArr);
  131. authArr[i] = {
  132. id,name,dataType:(dataType||'')+''||'7',roles:filterIds(roles||[]),dataAuthDetails:+dataType===7?arrVal:null
  133. };
  134. });
  135. formObj.softwareVOS = authArr;
  136. setAuthChecksArr(checkedsObj);
  137. setFormData(formObj) //表单数据
  138. setaddVisible(true);
  139. }
  140. function fullfillVals(data){
  141. if(!data) return null;
  142. return data.map((it)=>{
  143. return Object.assign(it,{dataType:'7',detailId:it.id});
  144. })
  145. }
  146. //保存
  147. function addData(formData) {
  148. let url = api.addAuth;
  149. delete formData.roles
  150. const arr = formData.softwareVOS.filter((it) => {
  151. if (Object.keys(it).length && it.id ) {
  152. return it;
  153. }
  154. });
  155. formData.softwareVOS = arr;
  156. let param = {
  157. addDataAuthVO: formData,
  158. }
  159. if (operType == 3) {
  160. url = api.updateAuth
  161. param = {
  162. updateDataAuthVO: {
  163. ...formData,
  164. id: currentId
  165. },
  166. }
  167. }
  168. post(url, param).then((res) => {
  169. if (res.data.code === 200) {
  170. getDataAuthPage();
  171. setaddVisible(false)
  172. setFormData(null)
  173. message.success("修改成功");
  174. } else {
  175. message.warning(res.data.msg || '操作失败');
  176. }
  177. }).catch(() => {
  178. message.error("接口出错");
  179. });
  180. }
  181. const onFinish = (value) => {
  182. const param = {
  183. ...value,
  184. ...params
  185. }
  186. setCurrent(1)
  187. setParams(param)
  188. getDataAuthPage(param);
  189. };
  190. const onReset = () => {
  191. setCurrent(1)
  192. setParams(data)
  193. form.resetFields();
  194. getDataAuthPage(data);
  195. };
  196. const messageBox = (type, id) => {
  197. setMsvisible(true)
  198. setCurrentId(id)
  199. setModalType(type)
  200. };
  201. const columns = [
  202. { title: '数据权限名称', dataIndex: 'name', key: 'index' },
  203. { title: '所属角色', dataIndex: 'roleName', key: 'index' },
  204. {
  205. title: '状态', dataIndex: 'status', key: 'status', render: (text, record) => (
  206. <Space size="middle">
  207. {record.status == 1 ?
  208. <span className="Enable">启用</span>
  209. :
  210. <span className="Disable">禁用</span>
  211. }
  212. </Space>
  213. )
  214. },
  215. {
  216. title: '操作', dataIndex: 'key', render: (text, record) => (
  217. <Space size="middle">
  218. <a onClick={e => showModal(3, record.id)}>修改</a>
  219. {record.status === '1' ? (<a className="disable" onClick={() => messageBox(2, record.id)}>禁用</a>) : (<a onClick={() => disableAuth(record.id, 1)}>启用</a>)}
  220. <a className="delete" onClick={() => messageBox(1, record.id)} >删除</a>
  221. </Space>
  222. )
  223. }
  224. ]
  225. function showAddData() {
  226. setaddVisible(true)
  227. }
  228. //提示框确认事件
  229. function handleOk() {
  230. if (modalType == 1) {
  231. deleteAuth(currentId, 0)
  232. } else if (modalType == 2) {
  233. disableAuth(currentId, 0)
  234. }
  235. }
  236. //提示框取消
  237. function handleCancel() {
  238. setMsvisible(false);
  239. }
  240. function goBack() {
  241. setaddVisible(false)
  242. setFormData(null)
  243. getDataAuthPage()
  244. }
  245. function onSizeChange(current, pageSize) {
  246. params.current = current
  247. params.size = pageSize
  248. setSize(pageSize)
  249. setCurrent(current)
  250. setParams(params)
  251. getDataAuthPage()
  252. }
  253. function changePage(page, pageSize) {
  254. params.current = page
  255. params.size = pageSize
  256. setCurrent(page)
  257. setParams(params)
  258. getDataAuthPage()
  259. }
  260. if (addVisible && formData) { //新增/修改界面
  261. return (
  262. <DataContext.Provider value={{ save: addData, formData,originData, operType,authChecksArr, val, tag }}>
  263. <AddData back={goBack} />
  264. </DataContext.Provider>
  265. )
  266. }
  267. return (
  268. <div className="wrapper">
  269. <div className="filter-box">
  270. <Form
  271. form={form}
  272. name="normal_login"
  273. onFinish={onFinish}
  274. initialValues={{ status: '' }}
  275. >
  276. <Row gutter={24}>
  277. <Col span={5} key={0}>
  278. <Form.Item label="数据权限名称" name="username">
  279. <Input placeholder="用户名" autoComplete='off'/>
  280. </Form.Item>
  281. </Col>
  282. <Col span={5} key={1}>
  283. <Form.Item label="所属角色" name="name">
  284. <Input placeholder="姓名" autoComplete='off'/>
  285. </Form.Item>
  286. </Col>
  287. <Col span={5} key={2}>
  288. <Form.Item label="当前状态" name="status">
  289. <Select
  290. placeholder="Select a person"
  291. >
  292. <Option value="">全部</Option>
  293. <Option value="1">启用</Option>
  294. <Option value="0" >禁用</Option>
  295. </Select>
  296. </Form.Item>
  297. </Col>
  298. <Col span={6} key={3}>
  299. <Form.Item>
  300. <Button type="primary" htmlType="submit">
  301. 查询
  302. </Button>
  303. <Button onClick={onReset}>
  304. 重置
  305. </Button>
  306. </Form.Item>
  307. </Col>
  308. </Row>
  309. </Form>
  310. </div>
  311. <div className="table">
  312. <div className="table-header">
  313. <h2 className="table-title">数据权限</h2>
  314. <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal(1)}>新增数据权限</Button>
  315. </div>
  316. <Table
  317. columns={columns}
  318. dataSource={userList}
  319. scroll={{ y: 'calc(100vh - 360px)'}}
  320. rowKey={record => record.id + record.roleName}
  321. pagination={{
  322. current: current,
  323. pageSize: size,
  324. size: 'small',
  325. showSizeChanger: true,
  326. pageSizeOptions: ['15', '30', '60', '120'],
  327. showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
  328. onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), // 改变每页数量时更新显示
  329. onChange: (page, pageSize) => changePage(page, pageSize),//点击页码事件
  330. total: total
  331. }} />
  332. </div>
  333. <Modal
  334. title="提示"
  335. okText='确定'
  336. cancelText='取消'
  337. width={400}
  338. visible={msvisible}
  339. onOk={handleOk}
  340. onCancel={handleCancel}
  341. maskClosable={false}
  342. >
  343. <p>{tipText[modalType]}</p>
  344. </Modal>
  345. </div >
  346. )
  347. }
  348. export default DataManager;