hejianhao
2025-02-27 b79e8a63a1ab322dc948b74eb2cf9e91676a3792
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
4个文件已修改
2个文件已添加
604 ■■■■ 已修改文件
.vscode/settings.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/config/env.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/components/addAndEdit.jsx 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/components/addUnit.jsx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/index.jsx 345 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/src/pages/setting/user/service.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/settings.json
New file
@@ -0,0 +1,6 @@
{
    "marscode.codeCompletionPro": {
        "enableCodeCompletionPro": true
    },
    "marscode.enableInlineCommand": true
}
management/config/env.ts
@@ -1,6 +1,7 @@
export default {
  dev: {
    SERVER_URL: 'http://192.168.110.188:6194',
    // SERVER_URL: 'https://huacheng.psciio.com',
  },
  test: {
    SERVER_URL: '',
management/src/pages/setting/user/components/addAndEdit.jsx
@@ -1,7 +1,7 @@
import { Form, Input, Modal, Tree, Button, Spin, Row, Col, Select, Radio } from 'antd';
import { forwardRef, useImperativeHandle, useState } from 'react';
import { useEffect } from 'react';
import { getDepartmentList } from '../service';
import { getDepartmentList, systemPostList, systemRoleList, getSystemUserInfo, getCityList, addSystemUserInfo, editSystemUserInfo } from '../service';
import { Color } from 'antd/es/color-picker';
const formItemLayout = {
    labelCol: { span: 8 },
@@ -30,42 +30,54 @@
    const [levelList, setLevelList] = useState([{ name: '市级账号', value: 1 }, { name: '区县账号', value: 2 }, { name: '街道账号', value: 3 }, { name: '社区账号', value: 4 }, { name: '党员账号', value: 5 }])
    //所属区县
    const [countyList, setCountyList] = useState([])
    const [activeCounty, setActiveCounty] = useState('')
    //所属街道
    const [streetList, setStreetList] = useState([])
    const [activeStreet, setActiveStreet] = useState('')
    //所属社区
    const [communityList, setCommunityList] = useState([])
    // const [activeCommunity, setActiveCommunity] = useState({})
    useEffect(() => {
        // 获取单位
        getDepartmentList(1).then(res => {
            setOneCompanyList(() => res.data)
        })
        getDepartmentList(2).then(res => {
            setTwoCompanyList(() => res.data)
        })
        getDepartmentList(3).then(res => {
            setThreeCompanyList(() => res.data)
        })
        getDepartmentList(4).then(res => {
            setThreeCompanyList(() => res.data)
        })
        setTimeout(() => {
            getDepartmentList(1).then(res => {
                setOneCompanyList(() => res.data)
            })
            getDepartmentList(2).then(res => {
                setTwoCompanyList(() => res.data)
            })
        }, 2000);
        setTimeout(() => {
            getDepartmentList(3).then(res => {
                setThreeCompanyList(() => res.data)
            })
            getDepartmentList(4).then(res => {
                setThreeCompanyList(() => res.data)
            })
        }, 4000);
    }, [])
    useImperativeHandle(ref, () => {
        return {
            refreshData: (data, type) => {
                setDetailType(type || false)
                getCountyList()
                systemPostList({ pageNum: 1, pageSize: 10000 }).then(res => {
                    setPositionList(() => res.data.records)
                })
                systemRoleList({ pageNum: 1, pageSize: 10000 }).then(res => {
                    setRoleList(() => res.data.records)
                })
                if (data.id) {
                    // 获取角色的权限树
                    getTree(data.id).then(res => {
                        setTreeSeletKeys(res.data.systemMenuIds || []);
                    })
                    getInfo(data.id)
                }
                setData(data)
                form.setFieldsValue(data);
            },
            clean: () => {
                setSpinning(false)
@@ -76,9 +88,7 @@
    // 保存
    const okHandle = () => {
        form.validateFields().then((values) => {
            setSpinning(true)
            values.menuIds = treeSeletKeys
            delete values.tree
            console.log('value',values)
            if (data.id) {
                values.id = data.id
                onUpdate(values)
@@ -87,7 +97,41 @@
            }
        });
    };
    const getCountyList = (id) => {
        getCityList({ id: '510400', tier: 2 }).then(res => {
            setCountyList(() => res.data)
        })
    }
    const getStreetList = (id) => {
        getCityList({ id: id, tier: 3 }).then(res => {
            setStreetList(() => res.data)
        })
    }
    const getcommunityList = (id) => {
        getCityList({ id: id, tier: 4 }).then(res => {
            setCommunityList(() => res.data)
        })
    }
    const changeCountry = (value, label) => {
        console.log('区县', value,'11111111',label);
        setActiveCounty(value)
        getStreetList(value)
    }
    const changeStreet = (value) => {
        console.log('街道', value);
        setActiveStreet(value)
        getcommunityList(value)
    }
    const changeCommunity = (value) => {
        console.log('社区', value);
        // setActiveCommunity(value)
    }
    const getInfo = (id) => {
        getSystemUserInfo(id).then(res => {
        })
    }
    return (
        <Modal
@@ -277,51 +321,62 @@
                <Row>
                    <Col span={8}>
                        <Form.Item
                            name="districts"
                            name="districtsCode"
                            label="所属区县"
                            rules={[{ required: true, message: '请选择所属区县' }]}
                        >
                            {/* <Select
                                // onChange={changeCountry}
                                // value={activeCounty}
                                placeholder="请选择"
                                options={levelList}
                                fieldNames={{ label: 'name', value: 'id' }}
                            >
                            </Select > */}
                            <Select
                                key="searchSelect"
                                allowClear
                                onChange={changeCountry}
                                value={activeCounty}
                                placeholder="请选择"
                                options={oneCompanyList}
                                options={countyList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            // filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="street"
                            name="streetId"
                            label="所属街道"
                            rules={[{ required: true, message: '请选择所属街道' }]}
                        >
                            <Select
                                onChange={changeStreet}
                                disabled={!activeCounty}
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                options={twoCompanyList}
                                options={streetList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
                    </Col>
                    <Col span={8}>
                        <Form.Item
                            name="community"
                            name="communityId"
                            label="所属社区"
                            rules={[{ required: true, message: '请选择所属社区' }]}
                        >
                            <Select
                                disabled={!activeStreet}
                                key="searchSelect"
                                allowClear
                                placeholder="请选择"
                                options={threeCompanyList}
                                options={communityList}
                                fieldNames={{ label: 'name', value: 'id' }}
                                filterOption={false}
                            >
                            </Select >
                        </Form.Item>
management/src/pages/setting/user/components/addUnit.jsx
New file
@@ -0,0 +1,80 @@
import { Button, Form, Input, Modal } from 'antd';
import { forwardRef, useImperativeHandle, useState } from 'react';
const formItemLayout = {
  labelCol: { span: 7 },
  wrapperCol: { span: 12 },
};
const AddEditView = ({ visible, onSave, onUpdate, onCancel }, ref) => {
  const [form] = Form.useForm();
  const [editData, setEditData] = useState({});
  const [rolesList, setRolesList] = useState();
  /**
   * 确定按钮事件
   */
  const okHandle = () => {
    form.validateFields().then((values) => {
      if (editData.id && editData.type === 'edit') {
        values.id = editData.id;
        if (editData.pid) {
          values.pid = editData.pid;
        }
        onUpdate(values);
      } else {
        if (editData.type === 'add') {
          values.pid = editData.id;
        }
        onSave(values);
      }
    });
  };
  useImperativeHandle(ref, () => {
    return {
      refreshData: (data) => {
        form.resetFields();
        if (data.id && data.type === 'edit') {
          form.setFieldsValue(data);
        }
        setEditData(data);
      },
      clean: () => {
        form.resetFields();
      },
    };
  });
  return (
    <Modal
      getContainer={false}
      width="25%"
      destroyOnClose
      title={editData.type === 'edit' ? '编辑单位' : '添加单位'}
      open={visible}
      onCancel={() => onCancel(false)}
      footer={[
        <Button key="back" onClick={() => onCancel(false)}>
          关闭
        </Button>,
        <Button key="submit" type="primary" onClick={okHandle}>
          确认
        </Button>,
      ]}
    >
      <Form layout="horizontal" {...formItemLayout} form={form} initialValues={{ isAuctioneer: 1 }}>
        <Form.Item
          name="name"
          required
          label="单位名称"
          rules={[{ required: true, message: '请输入单位名称' }]}
        >
          <Input placeholder="请输入单位名称" />
        </Form.Item>
      </Form>
    </Modal>
  );
};
export default forwardRef(AddEditView);
management/src/pages/setting/user/index.jsx
@@ -1,82 +1,225 @@
import { sendRequest, showDelConfirm } from '@/utils/antdUtils';
import { buildProTableDataSource, sendRequest, showDelConfirm } from '@/utils/antdUtils';
import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons';
import { PageContainer, ProFormText, ProTable, QueryFilter } from '@ant-design/pro-components';
import { Button, Col, Menu, Row, Space } from 'antd';
import { Button, Cascader, Col, Menu, Row, Space } from 'antd';
import { useEffect, useRef, useState } from 'react';
import { Access, useAccess } from 'umi';
import AddAndEdit from './components/addAndEdit';
import { add, del, edit, getUnitList } from './service';
import AddUnit from './components/addUnit';
import { add, addUnit, del, delUnit, edit, editUnit, getList, getUnitList ,editSystemUserInfo,addSystemUserInfo} from './service';
const Role = () => {
  const actionRef = useRef();
  const addViewRef = useRef();
  const addViewRef1 = useRef();
  const [modalVisible, handleModalVisibles] = useState(false);
  const [modalVisible1, handleModalVisibles1] = useState(false);
  const [unitId, setUnitId] = useState('');
  const access = useAccess();
  const [items, setItems] = useState([
    {
      key: '1',
      icon: (
        <div
          style={{
            display: 'flex',
            alignItems: 'center',
            justifyContent: 'space-between',
            width: '100%',
          }}
        >
          <span>组织部</span>
          <div>
  const [items, setItems] = useState([]);
  const { SubMenu } = Menu;
  useEffect(() => {
    fetchUnit();
  }, []);
  const node = (item) => {
    return (
      <div
        style={{
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'space-between',
          width: '100%',
        }}
      >
        <span>{item.name}</span>
        <div>
          {item.tier < 4 && (
            <PlusOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
                addViewRef1.current.refreshData({ ...item, type: 'add' });
                handleModalVisibles1(true);
              }}
            />
            <EditOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
              }}
            />
            <DeleteOutlined
              onClick={(e) => {
                e.stopPropagation();
                console.log(e);
              }}
            />
          </div>
          )}
          <EditOutlined
            onClick={(e) => {
              e.stopPropagation();
              addViewRef1.current.refreshData({ ...item, type: 'edit' });
              handleModalVisibles1(true);
            }}
          />
          <DeleteOutlined
            onClick={(e) => {
              e.stopPropagation();
              showDelConfirm(async () => {
                let status = await sendRequest(delUnit, item.id);
                if (status) {
                  fetchUnit();
                }
              }, '确认删除该单位吗?');
            }}
          />
        </div>
      ),
      children: [
        {
          key: '11',
          label: 'Option 1',
        },
        {
          key: '12',
          label: 'Option 2',
        },
        {
          key: '13',
          label: 'Option 3',
        },
        {
          key: '14',
          label: 'Option 4',
        },
      ],
    },
  ]);
  useEffect(() => {
    getUnitList().then((res) => {
      console.log(res);
      </div>
    );
  };
  const renderMenuItems = (items) => {
    return items.map((item) => {
      if (item.children && item.children.length > 0) {
        return (
          <SubMenu
            key={item.key}
            title={node(item)}
            onTitleClick={(item) => {
              setUnitId(item.key);
              actionRef.current.reload();
            }}
          >
            {renderMenuItems(item.children)}
          </SubMenu>
        );
      }
      return (
        <Menu.Item
          onClick={(item) => {
            setUnitId(item.key);
            actionRef.current.reload();
          }}
          key={item.key}
        >
          {node(item)}
        </Menu.Item>
      );
    });
    console.log(items);
  }, []);
  };
  const fetchUnit = () => {
    getUnitList().then((res) => {
      if (res.code == 200 && res.data) {
        const traverseItems = (items) => {
          return items.map((item) => {
            item.key = item.id;
            item.title = '1';
            if (item.child && item.child.length > 0) {
              item.children = traverseItems(item.child);
            }
            return item;
          });
        };
        setItems(traverseItems(res.data));
      }
    });
  };
  const columns = [
    {
      title: '角色名称',
      title: '姓名',
      dataIndex: 'name',
    },
    {
      title: '联系方式',
      dataIndex: 'phone',
    },
    {
      title: '所在单位',
      dataIndex: 'departmentName',
      hideInSearch: true,
      renderFormItem: () => {
        return (
          <Cascader
            options={items}
            fieldNames={{ value: 'key', label: 'name' }}
            placeholder="请选择"
            displayRender={(label) => label[label.length - 1]}
            changeOnSelect={true}
          />
        );
      },
    },
    {
      hideInTable: true,
      title: '所在单位',
      dataIndex: 'departmentId',
      renderFormItem: () => {
        return (
          <Cascader
            options={items}
            fieldNames={{ value: 'key', label: 'name' }}
            placeholder="请选择"
            displayRender={(label) => label[label.length - 1]}
            changeOnSelect={true}
          />
        );
      },
    },
    {
      title: '所属职位',
      dataIndex: 'systemPostName',
      hideInSearch: true,
    },
    {
      title: '所属角色',
      dataIndex: 'systemRoleName',
      hideInSearch: true,
    },
    {
      title: '所属角色',
      dataIndex:'systemRoleId',
      hideInTable: true,
    },
    {
      title: '账号层级',
      dataIndex: 'accountLevel',
      // (1=市级账号,2=区县账号,3=街道账号,4=社区账号)
      render: (text, record) => {
        let role = '';
        switch (record.accountLevel) {
          case 1:
            role = '市';
            break;
          case 2:
            role = '区县';
            break;
          case 3:
            role = '街道';
            break;
          case 4:
            role = '社区';
            break;
          case 5:
            role = '党员';
            break;
          default:
            role = '';
        }
        return role;
      },
      valueEnum: {
        1: '市',
        2: '区县',
        3: '街道',
        4: '社区',
        5: '党员',
      },
    },
    {
      title: '状态',
      dataIndex: 'status',
      // (1=使用中,2=已冻结)
      hideInSearch: true,
      render: (text, record) => {
        let status = '';
        switch (record.status) {
          case 1:
            status = '使用中';
            break;
          case 2:
            status = '已冻结';
            break;
          default:
            status = '';
        }
        return status;
      },
    },
    {
      title: '操作',
@@ -86,21 +229,19 @@
          <Space>
            {record.roleId != 1 && (
              <Access accessible={access['/system_setting/people_management/edit']}>
                <Button
                  type="link"
                <a
                  onClick={() => {
                    addViewRef.current.refreshData(record);
                    handleModalVisibles(true);
                  }}
                >
                  编辑
                </Button>
                </a>
              </Access>
            )}
            {record.roleId != 1 && (
              <Access accessible={access['/system_setting/people_management/del']}>
                <Button
                  type="link"
                <a
                  onClick={() => {
                    showDelConfirm(async () => {
                      let status = await sendRequest(del, record.id);
@@ -111,19 +252,28 @@
                  }}
                >
                  删除
                </Button>
                </a>
              </Access>
            )}
            <Access accessible={access['/system_setting/people_management/detail'] || false}>
              <Button
                type="link"
              <a
                onClick={() => {
                  addViewRef.current.refreshData(record, true);
                  handleModalVisibles(true);
                }}
              >
                查看详情
              </Button>
              </a>
            </Access>
            <Access accessible={access['/system_setting/role_management/edit'] || false}>
              <a
                onClick={() => {
                  addViewRef.current.refreshData(record, true);
                  handleModalVisibles(true);
                }}
              >
                冻结
              </a>
            </Access>
          </Space>
        );
@@ -145,17 +295,19 @@
      <Row style={{ marginTop: 20, background: '#fff' }}>
        <Col span={4}>
          <Space style={{ margin: '10px 0' }}>
            <span style={{ margin: '0 27px'}}>单位管理</span>
            <Button type="primary">添加</Button>
            <span style={{ margin: '0 27px' }}>单位管理</span>
            <Button
              type="primary"
              onClick={() => {
                addViewRef1.current.refreshData({});
                handleModalVisibles1(true);
              }}
            >
              添加
            </Button>
          </Space>
          <Menu
            mode="inline"
            defaultSelectedKeys={['231']}
            style={{
              //   width: 256,
            }}
            items={items}
          />
          <Menu mode="inline">{renderMenuItems(items)}</Menu>
        </Col>
        <Col span={20} style={{ minHeight: 650 }}>
          <ProTable
@@ -167,7 +319,21 @@
              showQuickJumper: true,
              defaultPageSize: 10,
            }}
            // request={(params) => buildProTableDataSource(getList, params)}
            search={{
              labelWidth: 'auto',
              span: 6,
              defaultCollapsed: false, // 默认是否收起
            }}
            request={(params) => {
              let obj = { ...params };
              if (unitId) {
                obj.departmentId = unitId;
              }
              if (params.departmentId) {
                obj.departmentId = params.departmentId[params.departmentId.length - 1];
              }
              return buildProTableDataSource(getList, obj);
            }}
            toolBarRender={(action, selectRows) => [
              <Access accessible={access['/system_setting/people_management/add']}>
                <Space>
@@ -191,7 +357,7 @@
        ref={addViewRef}
        visible={modalVisible}
        onSave={async (fileds) => {
          let success = await sendRequest(add, fileds);
          let success = await sendRequest(addSystemUserInfo, fileds);
          if (success) {
            handleModalVisibles(false);
            actionRef.current.reload();
@@ -199,7 +365,7 @@
          addViewRef.current.clean();
        }}
        onUpdate={async (fileds) => {
          let success = await sendRequest(edit, fileds);
          let success = await sendRequest(editSystemUserInfo, fileds);
          if (success) {
            handleModalVisibles(false);
            actionRef.current.reload();
@@ -208,6 +374,25 @@
        }}
        onCancel={() => handleModalVisibles(false)}
      />
      <AddUnit
        ref={addViewRef1}
        visible={modalVisible1}
        onSave={async (fileds) => {
          let success = await sendRequest(addUnit, fileds);
          if (success) {
            handleModalVisibles1(false);
            fetchUnit();
          }
        }}
        onUpdate={async (fileds) => {
          let success = await sendRequest(editUnit, fileds);
          if (success) {
            handleModalVisibles1(false);
            fetchUnit();
          }
        }}
        onCancel={() => handleModalVisibles1(false)}
      />
    </PageContainer>
  );
};
management/src/pages/setting/user/service.js
@@ -2,7 +2,7 @@
// 列表
export const getList = async (params) => {
    return request(`/api/huacheng-sangeshenbian/systemRole/list`, {
    return request(`/api/huacheng-sangeshenbian/systemUser/list`, {
        method: 'GET',
        params
    });
@@ -39,6 +39,22 @@
    });
}
// 新增单位
export const addUnit = async (data) => {
    return request('/api/huacheng-sangeshenbian/department/add', {
        method: 'POST',
        data,
    });
}
// 编辑单位
export const editUnit = async (data) => {
    return request('/api/huacheng-sangeshenbian/department/edit', {
        method: 'POST',
        data,
    });
}
// 编辑
export const edit = async (data) => {
    return request('/api/huacheng-sangeshenbian/systemRole/edit', {
@@ -54,6 +70,13 @@
    });
}
// 删除单位
export const delUnit = async (id) => {
    return request(`/api/huacheng-sangeshenbian/department/delete/${id}`, {
        method: 'DELETE',
    });
}
// 根据单位层级查询单位数据
export const getDepartmentList = async (tier) => {
    return request(`/api/huacheng-sangeshenbian/department/getDepartmentList/${tier}`, {
@@ -61,15 +84,41 @@
    });
}
// 获取职位列表数据
export const systemPostList = async (tier) => {
export const systemPostList = async (params) => {
    return request(`/api/huacheng-sangeshenbian/systemPost/list`, {
        method: 'GET',
        method: 'GET',params
    });
}
// 获取角色列表数据
export const systemRoleList = async (tier) => {
export const systemRoleList = async (params) => {
    return request(`/api/huacheng-sangeshenbian/systemRole/list`, {
        method: 'GET',params
    });
}
// 获取人员详情数据
export const getSystemUserInfo = async (id) => {
    return request(`/api/huacheng-sangeshenbian/systemUser/getSystemUserInfo/${id}`, {
        method: 'GET',
    });
}// 添加人员数据
export const addSystemUserInfo = async (data) => {
    return request(`/api/huacheng-sangeshenbian/systemUser/add`, {
        method: 'POST',
        data
    });
}
// 编辑人员数据
export const editSystemUserInfo = async (data) => {
    return request(`/api/huacheng-sangeshenbian/systemUser/edit`, {
        method: 'POST',
        data
    });
}
// 获取省市区
export const getCityList = async (data) => {
    return request(`/api/huacheng-sangeshenbian/systemUser/getAdministrativeDivision/${data.id}/${data.tier}`, {
        method: 'GET',
    });
}