196 lines
5.6 KiB
TypeScript
196 lines
5.6 KiB
TypeScript
import { PlusOutlined } from '@ant-design/icons';
|
|
import { ActionType, ProColumns, ProFormInstance, ProFormSelect, ProFormText } from '@ant-design/pro-components';
|
|
import { ModalForm, PageContainer, ProTable } from '@ant-design/pro-components';
|
|
import '@umijs/max';
|
|
import { Button, message } from 'antd';
|
|
import { Select } from 'antd';
|
|
import { createStyles } from 'antd-style';
|
|
import dayjs from 'dayjs';
|
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
|
import { CITY_OPTIONS } from '@/constants/city';
|
|
import { TIME_FORMAT } from '@/constants/global';
|
|
import { deleteCityOperator, getAllStaffList, getCityOpratorList, updateCityOperator } from '@/services/list';
|
|
|
|
const useStyles = createStyles(({ token }) => {
|
|
return {
|
|
img: {
|
|
width: 100,
|
|
height: 100,
|
|
},
|
|
delete: {
|
|
color: token.colorError,
|
|
},
|
|
button: {
|
|
marginRight: '8px',
|
|
},
|
|
};
|
|
});
|
|
|
|
const TableList: React.FC = () => {
|
|
const [updateModalOpen, handleUpdateModalOpen] = useState<boolean>(false);
|
|
const [currentRow, setCurrentRow] = useState<API.CityOperatorListItem>();
|
|
const actionRef = useRef<ActionType>();
|
|
const formRef = useRef<ProFormInstance>();
|
|
const [staffOptions, setStaffOptions] = useState<Array<{ label: string; value: number; isDefault: boolean }>>([]);
|
|
const defaultStaff = useMemo(() => {
|
|
return staffOptions.find(it => it.isDefault) || staffOptions[0];
|
|
}, [staffOptions]);
|
|
const { styles } = useStyles();
|
|
|
|
const getAllStaffOptions = async () => {
|
|
try {
|
|
const results = await getAllStaffList();
|
|
setStaffOptions(
|
|
results.map(it => ({
|
|
label: `${it.staffName}${it.isDefault ? ' (默认)' : ''}`,
|
|
isDefault: Boolean(it.isDefault),
|
|
value: it.id,
|
|
})),
|
|
);
|
|
} catch (e) {
|
|
} finally {
|
|
}
|
|
};
|
|
|
|
const handleDelete = async (id: number) => {
|
|
await deleteCityOperator(id);
|
|
message.success('操作成功');
|
|
actionRef.current?.reload();
|
|
};
|
|
|
|
useEffect(() => {
|
|
getAllStaffOptions();
|
|
}, []);
|
|
|
|
const columns: ProColumns<API.CityOperatorListItem>[] = [
|
|
{
|
|
title: '城市',
|
|
dataIndex: 'cityCode',
|
|
valueType: 'textarea',
|
|
render: (_text, record) => record.cityName,
|
|
renderFormItem() {
|
|
return (
|
|
<Select
|
|
showSearch
|
|
allowClear
|
|
options={CITY_OPTIONS}
|
|
filterOption={(input, option) => (option?.label ?? '').toLowerCase().includes(input.toLowerCase())}
|
|
/>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
title: '运营',
|
|
dataIndex: 'staffName',
|
|
valueType: 'textarea',
|
|
search: false,
|
|
},
|
|
{
|
|
title: '创建时间',
|
|
dataIndex: 'created',
|
|
valueType: 'dateTime',
|
|
renderText(created: string) {
|
|
return dayjs(created).format(TIME_FORMAT);
|
|
},
|
|
search: false,
|
|
},
|
|
{
|
|
title: '操作',
|
|
valueType: 'option',
|
|
render: (_, record) => (
|
|
<>
|
|
<a
|
|
key="config"
|
|
className={styles.button}
|
|
onClick={() => {
|
|
handleUpdateModalOpen(true);
|
|
setCurrentRow(record);
|
|
formRef.current?.setFieldsValue({
|
|
...record,
|
|
city: {
|
|
label: record.cityName,
|
|
value: record.cityCode,
|
|
},
|
|
});
|
|
}}
|
|
>
|
|
修改
|
|
</a>
|
|
<a key="delete" className={styles.delete} onClick={() => handleDelete(record.id)}>
|
|
删除
|
|
</a>
|
|
</>
|
|
),
|
|
},
|
|
];
|
|
return (
|
|
<PageContainer>
|
|
<ProTable<API.CityOperatorListItem, API.PageParams>
|
|
headerTitle="查询表格"
|
|
actionRef={actionRef}
|
|
rowKey="key"
|
|
search={{ labelWidth: 120, collapsed: false, collapseRender: false }}
|
|
request={getCityOpratorList}
|
|
columns={columns}
|
|
toolBarRender={() => [
|
|
<Button
|
|
type="primary"
|
|
key="add"
|
|
icon={<PlusOutlined />}
|
|
onClick={() => {
|
|
handleUpdateModalOpen(true);
|
|
setCurrentRow(undefined);
|
|
formRef.current?.resetFields();
|
|
}}
|
|
>
|
|
新增
|
|
</Button>,
|
|
]}
|
|
/>
|
|
<ModalForm
|
|
title={`${currentRow ? '修改' : '新增'}城市`}
|
|
width="400px"
|
|
formRef={formRef}
|
|
initialValues={{ staffId: defaultStaff?.value }}
|
|
open={updateModalOpen}
|
|
onOpenChange={handleUpdateModalOpen}
|
|
onFinish={async formData => {
|
|
const params: API.UpdateCityOperator = {
|
|
id: currentRow?.id,
|
|
staffId: formData.staffId,
|
|
cityCode: formData.city.value,
|
|
cityName: formData.city.label,
|
|
groupLink: formData.groupLink,
|
|
};
|
|
console.log('update confirm', formData, params);
|
|
try {
|
|
await updateCityOperator(params);
|
|
actionRef.current?.reload();
|
|
formRef.current?.resetFields();
|
|
} catch (e) {}
|
|
handleUpdateModalOpen(false);
|
|
}}
|
|
>
|
|
<ProFormSelect.SearchSelect
|
|
name="city"
|
|
mode="single"
|
|
label="所属城市"
|
|
options={CITY_OPTIONS}
|
|
rules={[{ required: true, message: '必填项' }]}
|
|
/>
|
|
<ProFormSelect
|
|
mode="single"
|
|
name="staffId"
|
|
showSearch
|
|
label="运营"
|
|
options={staffOptions}
|
|
rules={[{ required: true, message: '必填项' }]}
|
|
/>
|
|
<ProFormText name="groupLink" label="进群链接" rules={[{ message: '请输入链接', type: 'url' }]} />
|
|
</ModalForm>
|
|
</PageContainer>
|
|
);
|
|
};
|
|
export default TableList;
|