提交 e79e1c55 作者: 龚洪江

功能:单位加盟联调完成

上级 73bff0fe
...@@ -11,6 +11,7 @@ export type BackEndLoginType = InterFunction< ...@@ -11,6 +11,7 @@ export type BackEndLoginType = InterFunction<
phoneNum: string; phoneNum: string;
userName: string; userName: string;
nickName: string; nickName: string;
appUserAccountId?: number;
companyInfoVO: { companyInfoVO: {
id: number; id: number;
companyType: number; companyType: number;
...@@ -23,6 +24,7 @@ export type BackEndLoginType = InterFunction< ...@@ -23,6 +24,7 @@ export type BackEndLoginType = InterFunction<
companyUserName: string; companyUserName: string;
phoneNum: string; phoneNum: string;
remark: string; remark: string;
leader: number;
}; };
roleInfo: { roleInfo: {
id: number; id: number;
......
...@@ -249,6 +249,16 @@ export type bindingCompanyMemberType = InterFunction< ...@@ -249,6 +249,16 @@ export type bindingCompanyMemberType = InterFunction<
{ companyInfoId: number; userAccountId: number }, { companyInfoId: number; userAccountId: number },
any any
>; >;
//单位-成员解绑
export type unbindCompanyMemberType = InterFunction<
{ companyInfoId: number; userAccountId: number },
any
>;
//单位-管理员转让
export type transferLeaderType = InterFunction<
{ companyInfoId: number; fromUserAccountId: number; toUserAccountId: number },
any
>;
//账号权限-列表 //账号权限-列表
export type listRoleInfoPageType = InterItemFunction< export type listRoleInfoPageType = InterItemFunction<
......
...@@ -15,6 +15,8 @@ import { ...@@ -15,6 +15,8 @@ import {
listRoleInfoPageType, listRoleInfoPageType,
listRoleMenuInfoType, listRoleMenuInfoType,
removeBAccountType, removeBAccountType,
transferLeaderType,
unbindCompanyMemberType,
updateBAccountType, updateBAccountType,
updatePasswordType, updatePasswordType,
updateRoleInfoType, updateRoleInfoType,
...@@ -74,6 +76,12 @@ export class SystemManageAPI { ...@@ -74,6 +76,12 @@ export class SystemManageAPI {
//单位-成员绑定 //单位-成员绑定
static bindingCompanyMember: bindingCompanyMemberType = (params) => static bindingCompanyMember: bindingCompanyMemberType = (params) =>
axios.get('/userapp/company/bindingCompanyMember', { params }); axios.get('/userapp/company/bindingCompanyMember', { params });
//单位-成员解除绑定
static unbindCompanyMember: unbindCompanyMemberType = (params) =>
axios.get('/userapp/company/unbindCompanyMember', { params });
//单位-管理员转让
static transferLeader: transferLeaderType = (params) =>
axios.get('/userapp/company/transferLeader', { params });
//账号权限-列表 //账号权限-列表
static getListRoleInfoPage: listRoleInfoPageType = (data) => static getListRoleInfoPage: listRoleInfoPageType = (data) =>
......
...@@ -222,6 +222,7 @@ const CategoryList = () => { ...@@ -222,6 +222,7 @@ const CategoryList = () => {
pagination.pageNo -= 1; pagination.pageNo -= 1;
} }
getCategoryList(); getCategoryList();
getCategoryList({ pageNo: 1, pageSize: 99999 }, true);
} }
}); });
}, },
......
import { Button, Popconfirm, Table, Tag } from 'antd'; import { Button, Popconfirm, Table, Tag } from 'antd';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { FC } from 'react'; import { FC, useState } from 'react';
import { InterDataType, InterReqType } from '~/api/interface'; import { InterDataType, InterReqType, PaginationProps } from '~/api/interface';
import { addMallGoodsType, skuUnitType } from '~/api/interface/goodsType'; import { addMallGoodsType, skuUnitType } from '~/api/interface/goodsType';
//商品sku规格类型 //商品sku规格类型
...@@ -89,6 +89,16 @@ const SkuInfo: FC<selfProps> = ({ ...@@ -89,6 +89,16 @@ const SkuInfo: FC<selfProps> = ({
), ),
}, },
]; ];
const [pagination, setPagination] = useState<PaginationProps>({
pageNo: 1,
pageSize: 10,
});
//分页
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
setPagination({ ...pagination });
};
return ( return (
<div className='sku-info'> <div className='sku-info'>
...@@ -101,7 +111,24 @@ const SkuInfo: FC<selfProps> = ({ ...@@ -101,7 +111,24 @@ const SkuInfo: FC<selfProps> = ({
添加规格 添加规格
</Button> </Button>
</div> </div>
<Table bordered columns={tableColumns} dataSource={skuTableData} rowKey='id' /> <Table
bordered
columns={tableColumns}
dataSource={skuTableData.slice(
(pagination.pageNo - 1) * pagination.pageSize,
pagination.pageNo * pagination.pageSize,
)}
rowKey='id'
pagination={{
total: skuTableData.length,
pageSize: pagination.pageSize,
current: pagination.pageNo,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
</div> </div>
); );
}; };
......
...@@ -147,6 +147,7 @@ const GoodsList = () => { ...@@ -147,6 +147,7 @@ const GoodsList = () => {
const paginationChange = (pageNo: number, pageSize: number) => { const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo; pagination.pageNo = pageNo;
pagination.pageSize = pageSize; pagination.pageSize = pageSize;
setSelectedRowKeys([]);
setSearchParams( setSearchParams(
qs.stringify({ qs.stringify({
pageNo: pageNo, pageNo: pageNo,
......
import { Form, message, Modal, ModalProps, Select } from 'antd';
import { FC, useEffect, useState } from 'react';
import { SystemManageAPI } from '~/api';
import { InterDataType } from '~/api/interface';
import { listCompanyMembersType } from '~/api/interface/systemManageType';
//单位-成员列表返回类型
type companyMembersType = InterDataType<listCompanyMembersType>['list'];
interface selfProps {
onOk: () => void;
companyInfoId: number;
currentCompanyMembers: companyMembersType[0] | undefined;
}
const TransferLeaderModal: FC<ModalProps & selfProps> = ({
open,
onOk,
onCancel,
companyInfoId,
currentCompanyMembers,
}) => {
const [form] = Form.useForm<{ toUserAccountId: number }>();
const [listCompanyMembers, setListCompanyMembers] = useState<companyMembersType>([]);
const handleOk = () => {
form.validateFields().then((values) => {
if (currentCompanyMembers) {
SystemManageAPI.transferLeader({
companyInfoId,
fromUserAccountId: currentCompanyMembers.id,
...values,
}).then(({ code }) => {
if (code === '200') {
message.success('转让成功');
onOk();
}
});
}
});
};
//单位成员列表
const getListCompanyMembers = () => {
SystemManageAPI.getListCompanyMembers({
companyInfoId,
pageNo: 1,
pageSize: 999999,
}).then(({ result }) => {
setListCompanyMembers((result.list || []).filter((v) => !v.leader));
});
};
useEffect(() => {
if (currentCompanyMembers) {
getListCompanyMembers();
}
}, [currentCompanyMembers]);
return (
<Modal open={open} title='转让管理员' onCancel={onCancel} onOk={handleOk}>
<Form form={form}>
<Form.Item label='转让人' name='toUserAccountId'>
<Select
placeholder='请选择受让人'
filterOption={(input, option) =>
(option!.children as unknown as string).toLowerCase().includes(input.toLowerCase())
}
>
{listCompanyMembers.map((v) => (
<Select.Option key={v.id} value={v.id}>
{v.phoneNum}({v.uid})
</Select.Option>
))}
</Select>
</Form.Item>
</Form>
</Modal>
);
};
export default TransferLeaderModal;
...@@ -3,11 +3,13 @@ import { useEffect, useState } from 'react'; ...@@ -3,11 +3,13 @@ import { useEffect, useState } from 'react';
import { SystemManageAPI } from '~/api'; import { SystemManageAPI } from '~/api';
import { InterDataType, PaginationProps } from '~/api/interface'; import { InterDataType, PaginationProps } from '~/api/interface';
import { getCompanyInfoByIdType, listCompanyMembersType } from '~/api/interface/systemManageType'; import { getCompanyInfoByIdType, listCompanyMembersType } from '~/api/interface/systemManageType';
import { Button, Descriptions, Table } from 'antd'; import { Button, Descriptions, message, Modal, Table } from 'antd';
import './index.scss'; import './index.scss';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import AddPeopleModal from './components/addPeopleModal'; import AddPeopleModal from './components/addPeopleModal';
import { useSelector } from 'react-redux';
import TransferLeaderModal from '~/pages/systemManage/companyManage/companyDetail/components/transferLeaderModal';
//单位详情-返回类型 //单位详情-返回类型
type companyDetailType = InterDataType<getCompanyInfoByIdType>; type companyDetailType = InterDataType<getCompanyInfoByIdType>;
...@@ -16,6 +18,7 @@ type companyMembersType = InterDataType<listCompanyMembersType>['list']; ...@@ -16,6 +18,7 @@ type companyMembersType = InterDataType<listCompanyMembersType>['list'];
const CompanyDetail = () => { const CompanyDetail = () => {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const { userInfo } = useSelector((state: any) => state.UserInfo);
const tableColumns: ColumnsType<companyMembersType[0]> = [ const tableColumns: ColumnsType<companyMembersType[0]> = [
{ {
...@@ -29,18 +32,40 @@ const CompanyDetail = () => { ...@@ -29,18 +32,40 @@ const CompanyDetail = () => {
dataIndex: 'userName', dataIndex: 'userName',
}, },
{ {
title: '角色',
align: 'center',
dataIndex: 'leader',
render: (text: number) => (text ? '单位管理员' : '普通员工'),
},
{
title: '手机号', title: '手机号',
align: 'center', align: 'center',
dataIndex: 'phoneNum', dataIndex: 'phoneNum',
}, },
{ {
title: '操作', title: '操作',
align: 'center',
width: '15%', width: '15%',
render: () => ( onHeaderCell: () => ({
style: {
textAlign: 'center',
},
}),
render: (_text: string, record) => (
<> <>
<Button type='link'>转让</Button> <Button
<Button type='link'>解绑</Button> type='link'
disabled={!userInfo.companyInfoVO.leader || !record.leader}
onClick={() => transferLeaderClick(record)}
>
转让
</Button>
<Button
type='link'
disabled={!userInfo.companyInfoVO.leader || !!record.leader}
onClick={() => unbindCompanyClick(record)}
>
解绑
</Button>
</> </>
), ),
}, },
...@@ -53,8 +78,10 @@ const CompanyDetail = () => { ...@@ -53,8 +78,10 @@ const CompanyDetail = () => {
pageSize: 10, pageSize: 10,
totalCount: 0, totalCount: 0,
}); });
const [listCompanyMembers, setListCompanyMembers] = useState<companyMembersType>(); const [listCompanyMembers, setListCompanyMembers] = useState<companyMembersType>([]);
const [currentCompanyMembers, setCurrentCompanyMembers] = useState<companyMembersType[0]>();
const [addPeopleModalShow, setAddPeopleModalShow] = useState<boolean>(false); const [addPeopleModalShow, setAddPeopleModalShow] = useState<boolean>(false);
const [transferLeaderModalShow, setTransferLeaderModalShow] = useState<boolean>(false);
//单位详情 //单位详情
const getCompanyDetailInfo = (id: number) => { const getCompanyDetailInfo = (id: number) => {
...@@ -85,11 +112,45 @@ const CompanyDetail = () => { ...@@ -85,11 +112,45 @@ const CompanyDetail = () => {
setAddPeopleModalShow(true); setAddPeopleModalShow(true);
}; };
const addPeopleModalOk = () => { const addPeopleModalOk = () => {
getListCompanyMembers(companyId);
setAddPeopleModalShow(false); setAddPeopleModalShow(false);
}; };
const addPeopleModalCancel = () => { const addPeopleModalCancel = () => {
setAddPeopleModalShow(false); setAddPeopleModalShow(false);
}; };
//转让管理员弹窗
const transferLeaderClick = (record: companyMembersType[0]) => {
setCurrentCompanyMembers(record);
setTransferLeaderModalShow(true);
};
const transferLeaderModalCancel = () => {
setTransferLeaderModalShow(false);
};
const transferLeaderModalOk = () => {
setTransferLeaderModalShow(false);
getListCompanyMembers(companyId);
};
//接触绑定
const unbindCompanyClick = (record: companyMembersType[0]) => {
Modal.confirm({
title: '提示',
content: '确认解除绑定该成员?',
onOk: () => {
SystemManageAPI.unbindCompanyMember({
userAccountId: record.id,
companyInfoId: companyId,
}).then(({ code }) => {
if (code === '200') {
message.success('解除成功');
if (pagination.pageNo !== 1 && listCompanyMembers?.length === 1) {
pagination.pageNo -= 1;
}
getListCompanyMembers(companyId);
}
});
},
});
};
useEffect(() => { useEffect(() => {
setCompanyId(Number(searchParams.get('id'))); setCompanyId(Number(searchParams.get('id')));
...@@ -112,7 +173,12 @@ const CompanyDetail = () => { ...@@ -112,7 +173,12 @@ const CompanyDetail = () => {
<div className='company-detail-people'> <div className='company-detail-people'>
<div className='company-detail-people-title'>成员信息</div> <div className='company-detail-people-title'>成员信息</div>
<div className='company-detail-people-operate'> <div className='company-detail-people-operate'>
<Button type='primary' icon={<PlusOutlined></PlusOutlined>} onClick={addPeopleClick}> <Button
type='primary'
icon={<PlusOutlined></PlusOutlined>}
onClick={addPeopleClick}
disabled={!userInfo.companyInfoVO.leader}
>
添加成员 添加成员
</Button> </Button>
</div> </div>
...@@ -134,12 +200,21 @@ const CompanyDetail = () => { ...@@ -134,12 +200,21 @@ const CompanyDetail = () => {
<div className='company-detail-operate'> <div className='company-detail-operate'>
<Button type='primary'>返回</Button> <Button type='primary'>返回</Button>
</div> </div>
{/*添加成员*/}
<AddPeopleModal <AddPeopleModal
open={addPeopleModalShow} open={addPeopleModalShow}
onCancel={addPeopleModalCancel} onCancel={addPeopleModalCancel}
onOk={addPeopleModalOk} onOk={addPeopleModalOk}
companyInfoId={companyId} companyInfoId={companyId}
/> />
{/*转让管理员*/}
<TransferLeaderModal
open={transferLeaderModalShow}
onCancel={transferLeaderModalCancel}
onOk={transferLeaderModalOk}
companyInfoId={companyId}
currentCompanyMembers={currentCompanyMembers}
/>
</div> </div>
); );
}; };
......
import React, { useEffect, useState } from 'react'; import React, { useEffect } from 'react';
import { InterListType, InterReqType } from '~/api/interface'; import { InterListType, InterReqType } from '~/api/interface';
import { listCompanyAdd, listCompanyPage } from '~/api/interface/systemManageType'; import { listCompanyAdd, listCompanyPage } from '~/api/interface/systemManageType';
import { Cascader, Form, Input, message, Modal } from 'antd'; import { Form, Input, message, Modal } from 'antd';
import { SystemManageAPI } from '~/api'; import { SystemManageAPI } from '~/api';
import DistrictData from '~/assets/json/district.json';
// 列表的类型 // 列表的类型
type TableType = InterListType<listCompanyPage>; type TableType = InterListType<listCompanyPage>;
...@@ -21,14 +20,6 @@ const AddEditModal: React.FC<propType> = (props) => { ...@@ -21,14 +20,6 @@ const AddEditModal: React.FC<propType> = (props) => {
const { title, open, closed, data } = props; const { title, open, closed, data } = props;
/// 表单钩子 /// 表单钩子
const [form] = Form.useForm<ReqType>(); const [form] = Form.useForm<ReqType>();
// 地区
const [localList, setLocalList] = useState<
{
childInfo: any[];
id: number;
name: string;
}[]
>();
// 关闭弹窗 // 关闭弹窗
const handleCancel = () => { const handleCancel = () => {
form.resetFields(); form.resetFields();
...@@ -66,14 +57,9 @@ const AddEditModal: React.FC<propType> = (props) => { ...@@ -66,14 +57,9 @@ const AddEditModal: React.FC<propType> = (props) => {
handleCancel(); handleCancel();
} }
}; };
// 获取地区信息
const getSecondDistrictInfo = async () => {
setLocalList(DistrictData || []);
};
// componentDidMount // componentDidMount
useEffect(() => { useEffect(() => {
if (!open) return; if (!open) return;
getSecondDistrictInfo().then();
if (!data) return; if (!data) return;
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
...@@ -100,29 +86,29 @@ const AddEditModal: React.FC<propType> = (props) => { ...@@ -100,29 +86,29 @@ const AddEditModal: React.FC<propType> = (props) => {
> >
<Input placeholder={'请输入单位名称'} maxLength={25} allowClear /> <Input placeholder={'请输入单位名称'} maxLength={25} allowClear />
</Form.Item> </Form.Item>
<Form.Item {/*<Form.Item*/}
label='单位全称' {/* label='单位全称'*/}
rules={[{ required: false, message: '请输入单位全称' }]} {/* rules={[{ required: false, message: '请输入单位全称' }]}*/}
name='fullName' {/* name='fullName'*/}
> {/*>*/}
<Input placeholder={'请输入单位全称'} maxLength={50} allowClear /> {/* <Input placeholder={'请输入单位全称'} maxLength={50} allowClear />*/}
</Form.Item> {/*</Form.Item>*/}
<Form.Item {/*<Form.Item*/}
label='行政区划' {/* label='行政区划'*/}
name='area' {/* name='area'*/}
rules={[{ required: true, message: '请选择行政区划' }]} {/* rules={[{ required: true, message: '请选择行政区划' }]}*/}
> {/*>*/}
<Cascader {/* <Cascader*/}
options={localList} {/* options={localList}*/}
placeholder='请选择行政区划' {/* placeholder='请选择行政区划'*/}
allowClear {/* allowClear*/}
fieldNames={{ {/* fieldNames={{*/}
label: 'name', {/* label: 'name',*/}
value: 'name', {/* value: 'name',*/}
children: 'childInfo', {/* children: 'childInfo',*/}
}} {/* }}*/}
/> {/* />*/}
</Form.Item> {/*</Form.Item>*/}
<Form.Item <Form.Item
label='详细地址' label='详细地址'
name='address' name='address'
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论