You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

252 lines
7.0 KiB
TypeScript

/* eslint-disable no-param-reassign */
import { PlusOutlined } from '@ant-design/icons';
import { ActionType, ProColumns, ProTable } from '@ant-design/pro-components';
import { PageContainer } from '@ant-design/pro-layout';
import { Button, Image, message, Popconfirm, Switch } from 'antd';
import React, { useRef, useState } from 'react';
import { Access, useAccess } from 'umi';
import UpdateForm from './components/UpdateForm';
import { addOrUpdateScreenAdvertisementUsingPost, changeAdStateUsingGet, getScreenAdPageUsingPost, removeAdUsingPost } from '@/services/pop-b2b2c/pbcScreenAdvertisementController';
/**
* 查询表格
* @param param0
*/
const fetchData = async (params: API.PbcScreenAdvertisement) => {
const msg = await getScreenAdPageUsingPost(params);
return {
data: msg.data?.records,
total: msg.data?.total,
success: msg.retcode,
} as any;
};
/**
* 更新节点
* @param fields
*/
const handleUpdate = async (fields: API.PbcScreenAdvertisement) => {
const hide = message.loading('正在保存');
try {
const msg = await addOrUpdateScreenAdvertisementUsingPost(fields);
hide();
if (msg.retcode) {
message.success(!fields.pbcId ? '添加成功' : '保存成功');
return true;
}
message.error(msg.retmsg);
return false;
} catch (error) {
hide();
message.error(!fields.pbcId ? '添加失败' : '保存失败');
return false;
}
};
const handleUpdateState = async (id: number, state: number) => {
const hide = message.loading('正在保存');
if (!id) return false;
try {
const msg = await changeAdStateUsingGet({ pbcId: id, pbcBusinessState: state });
hide();
if (msg.retcode) {
message.success(!id ? '新增成功!' : '保存成功!');
return true;
}
message.error(msg.retmsg);
return false;
} catch (error) {
hide();
message.error(!id ? '新增失败,请重试!' : '保存失败,请重试!');
return false;
}
};
/**
* 删除节点
* @param id
*/
const handleRemove = async (id?: number) => {
const hide = message.loading('正在删除');
if (!id) return false;
try {
const msg = await removeAdUsingPost({
pbcId: id,
});
hide();
if (msg.retcode) {
message.success('删除成功,即将刷新');
} else {
message.error(msg.retmsg ?? '删除失败,请重试');
}
return true;
} catch (error) {
hide();
message.error('删除失败,请重试');
return false;
}
};
// eslint-disable-next-line @typescript-eslint/ban-types
const TableList: React.FC<{}> = () => {
const access: any = useAccess();
const actionRef = useRef<ActionType>();
const [stepFormValues, setStepFormValues] = useState({});
const [updateModalVisible, handleUpdateModalVisible] = useState<boolean>(false);
const columns: ProColumns<API.PbcScreenAdvertisement>[] = [
{
title: '标题',
dataIndex: 'pbcTitle',
},
{
title: '预览',
dataIndex: 'pbcAdvertisement',
search: false,
render: (text) => {
const str = text?.toString()
if (str?.substring(str.lastIndexOf('.')) === '.mp4') {
return <video onClick={() => window.open(str)} style={{ objectFit: 'contain' }} src={str} width={200} height={200} />
} else {
return <Image style={{ objectFit: 'contain' }} src={str} width={200} height={200} />
}
}
},
{
title: '创建时间',
dataIndex: 'pbcCreateAt',
valueType: 'dateTime',
search: false,
},
{
title: '操作',
fixed: 'right',
valueType: 'option',
render: (text, record) => (
<span>
<Access key="config" accessible={access.adScreenUpdate}>
<Switch
checked={record.pbcBusinessState === 1}
onChange={async (value) => {
const success = await handleUpdateState(record.pbcId || 0, value ? 1 : 0);
if (success) {
if (actionRef.current) {
actionRef.current.reload();
}
}
}}
/>
</Access>
<Access key="config" accessible={access.adScreenAdd}>
<Button
type="link"
onClick={() => {
handleUpdateModalVisible(true);
setStepFormValues(record);
}}
>
</Button>
</Access>
<Access key="remove" accessible={access.adScreenDelete}>
<Popconfirm
title="确定删除该开屏广告?"
onConfirm={async () => {
const success = await handleRemove(record.pbcId);
if (success) {
actionRef.current?.reload();
}
}}
>
<Button type="link" danger>
</Button>
</Popconfirm>
</Access>
</span>
),
},
];
return (
<PageContainer
header={{
title: '',
breadcrumb: {},
}}
>
<ProTable<API.PbcScreenAdvertisement>
columns={columns}
actionRef={actionRef}
request={fetchData}
rowKey="pbcId"
size="small"
bordered
search={{
labelWidth: 'auto',
span: 6,
optionRender: ({ searchText }, { form }) => {
return [
<Button
key="button"
type="primary"
onClick={() => {
form?.submit();
}}
>
{searchText}
</Button>,
<Access key="add" accessible={access.adScreenAdd}>
<Button
icon={<PlusOutlined />}
type="primary"
onClick={() => {
handleUpdateModalVisible(true);
setStepFormValues({ id: undefined });
}}
>
</Button>
</Access>,
];
},
}}
pagination={{
defaultPageSize: 20,
showSizeChanger: true,
}}
scroll={{
y: 'calc(100vh - 320px)',
}}
dateFormatter="string"
options={false}
toolBarRender={() => []}
/>
{stepFormValues && Object.keys(stepFormValues).length ? (
<UpdateForm
onSubmit={async (value: any) => {
const success = await handleUpdate(value);
if (success) {
handleUpdateModalVisible(false);
setStepFormValues({});
actionRef.current?.reload();
}
}}
onCancel={() => {
message.destroy();
handleUpdateModalVisible(false);
}}
afterClose={() => {
setStepFormValues({});
}}
updateModalVisible={updateModalVisible}
values={stepFormValues}
/>
) : null}
</PageContainer>
);
};
export default TableList;