zy-asrs-flow/src/pages/system/role/components/scope.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-flow/src/pages/system/role/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-framework/src/main/resources/templates/react/Index.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/RoleController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/UserController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-asrs-flow/src/pages/system/role/components/scope.jsx
New file @@ -0,0 +1,125 @@ import React, { useState, useRef, useEffect } from 'react'; import { ProForm, ProFormDigit, ProFormText, ProFormSelect, } from '@ant-design/pro-components'; import { Col, Form, Modal, Row, Checkbox, Skeleton, Tree } from 'antd'; import Http from '@/utils/http'; import { transformTreeData, getTreeAllKeys } from '@/utils/tree-util' const Scope = (props) => { const [form] = Form.useForm(); const { } = props; const [menuTreeLoading, setMenuTreeLoading] = useState(false); const [menuTreeData, setMenuTreeData] = useState([]); const loadMenuTree = (param) => { setMenuTreeLoading(true); Http.doPostPromise('/api/menu/tree', param, (res) => { setMenuTreeLoading(false); const rootMenu = { id: 0, name: '全部', value: 0, children: [] }; rootMenu.children = res.data; // const treeData = transformTreeData([rootMenu]); const treeData = transformTreeData(res.data); setMenuTreeData(treeData); // const treeAllKeys = getTreeAllKeys(treeData); // setDeptExpandedKeys(treeAllKeys); }).catch((err) => { console.error(err); setMenuTreeLoading(false); }) } useEffect(() => { form.resetFields(); form.setFieldsValue({ ...props.values }) loadMenuTree(); }, [form, props]) const handleCancel = () => { props.onCancel(); }; const handleOk = () => { form.submit(); } const handleFinish = async (values) => { props.onSubmit({ ...values }); } return ( <> <Modal title="Scope" width={640} forceRender destroyOnClose open={props.open} onCancel={handleCancel} onOk={handleOk} > <ProForm form={form} submitter={false} onFinish={handleFinish} layout="horizontal" grid={true} > <ProFormDigit name="id" disabled hidden={true} /> <ProForm.Item name="deptIds" label="菜单权限" colProps={{ md: 24, xl: 24 }} > <Row gutter={[16, 16]}> <Col md={24}> <Checkbox.Group options={[ { label: '展开/折叠', value: 'deptExpand' }, { label: '全选/全不选', value: 'deptNodeAll' }, ]} onChange={(checkedValue) => { console.log(checkedValue); }} /> </Col> <Col md={24}> {menuTreeLoading ? ( <Skeleton active /> ) : ( <Tree checkable onExpand={(expandedKeys, { expanded, node }) => { }} // expandedKeys={expandedKeys} // autoExpandParent={autoExpandParent} // onCheck={onCheck} // checkedKeys={checkedKeys} // onSelect={onSelect} // selectedKeys={selectedKeys} treeData={menuTreeData} /> )} </Col> </Row> </ProForm.Item> </ProForm> </Modal> </> ) } export default Scope; zy-asrs-flow/src/pages/system/role/index.jsx
@@ -10,6 +10,7 @@ import { PlusOutlined, ExportOutlined } from '@ant-design/icons'; import Http from '@/utils/http'; import Edit from './components/edit' import Scope from './components/scope' import { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter } from '@/components/TableSearch' import { statusMap } from '@/utils/enum-util' @@ -87,6 +88,24 @@ } }; const handleScope = async (val) => { const hide = message.loading('正在分配'); try { const resp = await Http.doPost('api/role/scope', val); if (resp.code === 200) { message.success('分配成功'); return true; } else { message.error(resp.msg); return false; } } catch (error) { message.error('分配失败请重试!'); return false; } finally { hide(); } }; const Main = () => { const formTableRef = useRef(); @@ -95,6 +114,8 @@ const [modalVisible, setModalVisible] = useState(false); const [currentRow, setCurrentRow] = useState(); const [searchParam, setSearchParam] = useState({}); const [scopeModalVisible, setScopeModalVisible] = useState(false); useEffect(() => { @@ -180,6 +201,16 @@ width: 140, valueType: 'option', render: (_, record) => [ <Button type="link" key="scope" onClick={() => { setScopeModalVisible(true); setCurrentRow(record); }} > 分配权限 </Button>, <Button type="link" key="edit" @@ -356,6 +387,30 @@ } } /> <Scope open={scopeModalVisible} values={currentRow || {}} onCancel={ () => { setScopeModalVisible(false); setCurrentRow(undefined); } } onSubmit={async (values) => { let ok = false; if (values.id) { ok = await handleScope({ ...values }) } if (ok) { setScopeModalVisible(false); setCurrentRow(undefined); if (actionRef.current) { actionRef.current.reload(); } } }} /> </PageContainer> ); }; zy-asrs-framework/src/main/resources/templates/react/Index.txt
@@ -287,8 +287,7 @@ actionRef.current.reload(); } } } } }} /> </PageContainer> ); zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/RoleController.java
@@ -4,22 +4,23 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.common.annotation.OperationLog; import com.zy.asrs.wcs.common.domain.BaseParam; import com.zy.asrs.wcs.common.domain.KeyValVo; import com.zy.asrs.wcs.common.domain.PageParam; import com.zy.asrs.wcs.system.entity.Role; import com.zy.asrs.wcs.system.entity.RoleMenu; import com.zy.asrs.wcs.system.service.RoleMenuService; import com.zy.asrs.wcs.system.service.RoleService; import com.zy.asrs.wcs.utils.ExcelUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.*; /** * Created by vincent on 2/13/2024 @@ -30,6 +31,8 @@ @Autowired private RoleService roleService; @Autowired private RoleMenuService roleMenuService; @PreAuthorize("hasAuthority('system:role:list')") @PostMapping("/role/page") @@ -63,6 +66,8 @@ && roleService.count(new LambdaQueryWrapper<Role>().eq(Role::getCode, role.getCode())) > 0) { return R.error("角色标识已存在"); } role.setCreateTime(new Date()); role.setUpdateTime(new Date()); if (!roleService.save(role)) { return R.error("添加失败"); } @@ -83,6 +88,7 @@ .ne(Role::getId, role.getId())) > 0) { return R.error("角色名称已存在"); } role.setUpdateTime(new Date()); if (!roleService.updateById(role)) { return R.error("修改失败"); } @@ -92,9 +98,15 @@ @PreAuthorize("hasAuthority('system:role:remove')") @OperationLog("删除角色") @PostMapping("/role/remove/{ids}") @Transactional public R remove(@PathVariable Long[] ids) { if (!roleService.removeByIds(Arrays.asList(ids))) { return R.error("删除失败"); for (Long roleId : ids) { if (!roleService.removeById(roleId)) { throw new CoolException("服务器内部错误"); } if (!roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().eq(RoleMenu::getRoleId, roleId))) { throw new CoolException("服务器内部错误"); } } return R.ok("删除成功"); } @@ -119,4 +131,14 @@ ExcelUtil.build(ExcelUtil.create(roleService.list(), Role.class), response); } @PreAuthorize("hasAuthority('system:role:update')") @OperationLog("分配权限") @PostMapping("/role/scope") public R scope(@RequestBody Role role) { return R.ok("分配成功"); } } zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/system/controller/UserController.java
@@ -4,15 +4,19 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.common.annotation.OperationLog; import com.zy.asrs.wcs.common.domain.BaseParam; import com.zy.asrs.wcs.common.domain.KeyValVo; import com.zy.asrs.wcs.common.domain.PageParam; import com.zy.asrs.wcs.system.entity.User; import com.zy.asrs.wcs.system.entity.UserRole; import com.zy.asrs.wcs.system.service.UserRoleService; import com.zy.asrs.wcs.system.service.UserService; import com.zy.asrs.wcs.utils.ExcelUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -26,6 +30,8 @@ @Autowired private UserService userService; @Autowired private UserRoleService userRoleService; @PreAuthorize("hasAuthority('system:user:list')") @PostMapping("/user/page") @@ -121,9 +127,15 @@ @PreAuthorize("hasAuthority('system:user:remove')") @OperationLog("删除用户") @PostMapping("/user/remove/{ids}") @Transactional public R remove(@PathVariable Long[] ids) { if (!userService.removeByIds(Arrays.asList(ids))) { return R.error("删除失败"); for (Long userId : ids) { if (!userService.removeById(userId)) { throw new CoolException("服务器内部错误"); } if (!userRoleService.remove(new LambdaQueryWrapper<UserRole>().eq(UserRole::getUserId, userId))) { throw new CoolException("服务器内部错误"); } } return R.ok("删除成功"); }