Commit c9a263f8701bea0ad0eaac3d251f9e35cad5aa64
0 parents
init
Showing
7 changed files
with
232 additions
and
0 deletions
api.ts
0 → 100644
1 | +++ a/api.ts | |
1 | +import type { http } from "@/typing/http"; | |
2 | +import { ARCHIVES_HOST } from "@/utils/host"; | |
3 | +import request from "@/utils/request"; | |
4 | + | |
5 | +/** | |
6 | + * @description: 分页获取<feewee>替换name</feewee> | |
7 | + * @param {<feewee>替换name</feewee>.QueryParams} params | |
8 | + * @return {http.PromisePageResp<<feewee>替换name</feewee>.ListVO>} | |
9 | + */ | |
10 | +export function get<feewee>替换name</feewee>ListApi(params: <feewee>替换name</feewee>.QueryParams): http.PromisePageResp<<feewee>替换name</feewee>.ListVO> { | |
11 | + return request.get(`API url`, { params }); | |
12 | +} | |
13 | + | |
14 | +/** | |
15 | + * @description: 保存<feewee>替换name</feewee> | |
16 | + * @param {<feewee>替换name</feewee>.ListVO} params | |
17 | + * @return {http.PromiseResp<string>} | |
18 | + */ | |
19 | +export function save<feewee>替换name</feewee>Api(params: <feewee>替换name</feewee>.ListVO): http.PromiseResp<string> { | |
20 | + return request.post(`API url`, params); | |
21 | +} | |
22 | + | |
23 | +/** | |
24 | + * @description: 删除<feewee>替换name</feewee> | |
25 | + * @param {number} id | |
26 | + * @return {http.PromiseResp<string>} | |
27 | + */ | |
28 | +export function delete<feewee>替换name</feewee>Api(id: number): http.PromiseResp<string> { | |
29 | + return request.get(`API url`, { params: { id } }); | |
30 | +} | ... | ... |
components/Filter.tsx
0 → 100644
1 | +++ a/components/Filter.tsx | |
1 | +import React from "react"; | |
2 | +import { Button, Row, Input } from "antd"; | |
3 | +import { PlusOutlined } from "@ant-design/icons"; | |
4 | +import { useStore } from "../index"; | |
5 | +import FeeweeFilterOption from "@/pages/notice/components/FeeweeFilterOption"; | |
6 | + | |
7 | +export default function Filter() { | |
8 | + const { pagination, setOpen } = useStore(); | |
9 | + | |
10 | + return ( | |
11 | + <Row justify="space-between" style={{ marginBottom: 10 }}> | |
12 | + <div | |
13 | + style={{ | |
14 | + display: "flex", | |
15 | + flex: 1, | |
16 | + justifyContent: "start", | |
17 | + flexWrap: "wrap", | |
18 | + gap: 10, | |
19 | + }} | |
20 | + > | |
21 | + <FeeweeFilterOption title="关键字"> | |
22 | + <Input.Search | |
23 | + style={{ minWidth: 260 }} | |
24 | + allowClear | |
25 | + placeholder="请输入关键字搜索" | |
26 | + value={pagination.innerParams.keyWords} | |
27 | + onChange={(e) => pagination.setParams({ keyWords: e.target.value })} | |
28 | + onSearch={() => pagination.setParams({ current: 1 }, true)} | |
29 | + /> | |
30 | + </FeeweeFilterOption> | |
31 | + </div> | |
32 | + <Button | |
33 | + icon={<PlusOutlined />} | |
34 | + type="primary" | |
35 | + onClick={() => { | |
36 | + setOpen(true); | |
37 | + }} | |
38 | + > | |
39 | + 新增 | |
40 | + </Button> | |
41 | + </Row> | |
42 | + ); | |
43 | +} | ... | ... |
components/List.tsx
0 → 100644
1 | +++ a/components/List.tsx | |
1 | +import React from "react"; | |
2 | +import { Divider, message, Popconfirm, Popover, Table } from "antd"; | |
3 | +import { delete<feewee>替换name</feewee>Api } from "../api"; | |
4 | +import { useStore } from "../index"; | |
5 | + | |
6 | +export default function List() { | |
7 | + const { pagination, setCurrent, setOpen } = useStore(); | |
8 | + | |
9 | + function editItem(item: <feewee>替换name</feewee>.ListVO) { | |
10 | + setCurrent(item); | |
11 | + setOpen(true); | |
12 | + } | |
13 | + | |
14 | + function deleteItem(id: number) { | |
15 | + const hide = message.loading('删除中,请稍后...', 0); | |
16 | + delete<feewee>替换name</feewee>Api(id) | |
17 | + .then((res) => { | |
18 | + hide(); | |
19 | + message.success(res.result); | |
20 | + pagination.setLoading(true); | |
21 | + }) | |
22 | + .catch((error) => { | |
23 | + hide(); | |
24 | + message.error(error.message); | |
25 | + }); | |
26 | + } | |
27 | + | |
28 | + return ( | |
29 | + <Table dataSource={pagination.list} rowKey="id" loading={pagination.loading} pagination={pagination.paginationConfig}> | |
30 | + <Table.Column title="name" align="left" dataIndex="name" /> | |
31 | + <Table.Column | |
32 | + title="操作" | |
33 | + align="left" | |
34 | + render={(record: <feewee>替换name</feewee>.ListVO) => ( | |
35 | + <> | |
36 | + <a>编辑</a> | |
37 | + <Divider type="vertical" /> | |
38 | + <Popconfirm title={<span>确定删除?</span>} onConfirm={() => deleteItem(record.id || -1)}> | |
39 | + <a style={{ color: 'red' }}>删除</a> | |
40 | + </Popconfirm> | |
41 | + </> | |
42 | + )} | |
43 | + /> | |
44 | + </Table> | |
45 | + ); | |
46 | +} | ... | ... |
components/Modal.tsx
0 → 100644
1 | +++ a/components/Modal.tsx | |
1 | +import React, { useEffect, useState } from "react"; | |
2 | +import { Form, Input, message, Modal as AntdModal, Spin } from "antd"; | |
3 | +import { save<feewee>替换name</feewee>Api } from "../api"; | |
4 | +import { useStore } from "../index"; | |
5 | + | |
6 | +export default function Modal() { | |
7 | + const { pagination, current, setCurrent, open, setOpen } = useStore(); | |
8 | + const [form] = Form.useForm(); | |
9 | + const [confirmLoading, setConfirmLoading] = useState(false); | |
10 | + | |
11 | + useEffect(() => { | |
12 | + if (open && current) { | |
13 | + form.setFieldsValue(current); | |
14 | + } else { | |
15 | + form.resetFields(); | |
16 | + } | |
17 | + }, [open, current]); | |
18 | + | |
19 | + function onOk(val: any) { | |
20 | + const hide = message.loading('提交中,请稍后...', 0); | |
21 | + setConfirmLoading(true); | |
22 | + const params: <feewee>替换name</feewee>.ListVO = { | |
23 | + ...val, | |
24 | + id: current?.id, | |
25 | + }; | |
26 | + save<feewee>替换name</feewee>Api(params) | |
27 | + .then((res) => { | |
28 | + hide(); | |
29 | + setConfirmLoading(false); | |
30 | + message.success(res.result); | |
31 | + onCancel(); | |
32 | + pagination.setLoading(true); | |
33 | + }) | |
34 | + .catch((error) => { | |
35 | + hide(); | |
36 | + setConfirmLoading(false); | |
37 | + message.error(error.message); | |
38 | + }); | |
39 | + } | |
40 | + | |
41 | + function onCancel() { | |
42 | + setCurrent(undefined); | |
43 | + setOpen(false); | |
44 | + } | |
45 | + | |
46 | + return ( | |
47 | + <AntdModal | |
48 | + title={`${current ? '编辑' : '添加'}<feewee>替换name</feewee>`} | |
49 | + open={open} | |
50 | + maskClosable={false} | |
51 | + onOk={form.submit} | |
52 | + confirmLoading={confirmLoading} | |
53 | + onCancel={onCancel} | |
54 | + > | |
55 | + <Spin spinning={confirmLoading}> | |
56 | + <Form form={form} onFinish={onOk}> | |
57 | + <Form.Item label="name" name="name" rules={[{ required: true, message: "请填写name" }]}> | |
58 | + <Input allowClear placeholder="请填写name" /> | |
59 | + </Form.Item> | |
60 | + </Form> | |
61 | + </Spin> | |
62 | + </AntdModal> | |
63 | + ); | |
64 | +} | ... | ... |
index.tsx
0 → 100644
1 | +++ a/index.tsx | |
1 | +import React from "react"; | |
2 | +import { ConfigProvider } from "antd"; | |
3 | +import zhCN from "antd/lib/locale-provider/zh_CN"; | |
4 | +import { PageHeaderWrapper } from "@ant-design/pro-layout"; | |
5 | +import { createStore } from "@/hooks/moz"; | |
6 | +import store from './store'; | |
7 | +import Filter from './components/Filter'; | |
8 | +import List from './components/List'; | |
9 | +import Modal from './components/Modal'; | |
10 | + | |
11 | +export const { Provider, useStore } = createStore(store); | |
12 | + | |
13 | +export default () => <Provider><<feewee>替换name</feewee> /></Provider>; | |
14 | + | |
15 | +function <feewee>替换name</feewee>() { | |
16 | + return ( | |
17 | + <PageHeaderWrapper title="不购买商业险白名单"> | |
18 | + <ConfigProvider locale={zhCN}> | |
19 | + <Card bordered={false}> | |
20 | + <Filter /> | |
21 | + <List /> | |
22 | + <Modal /> | |
23 | + </Card> | |
24 | + </ConfigProvider> | |
25 | + </PageHeaderWrapper> | |
26 | + ); | |
27 | +} | ... | ... |
interface.d.ts
0 → 100644
store.ts
0 → 100644
1 | +++ a/store.ts | |
1 | +import { useState } from 'react'; | |
2 | +import usePagination from "@/hooks/usePagination"; | |
3 | +import { get<feewee>替换name</feewee>ListApi } from "./api"; | |
4 | + | |
5 | +export default function useStore() { | |
6 | + const pagination = usePagination(get<feewee>替换name</feewee>ListApi); | |
7 | + const [open, setOpen] = useState(false); | |
8 | + const [current, setCurrent] = useState<<feewee>替换name</feewee>.ListVO>(); | |
9 | + | |
10 | + return { | |
11 | + pagination, | |
12 | + open, | |
13 | + setOpen, | |
14 | + current, | |
15 | + setCurrent, | |
16 | + }; | |
17 | +} | ... | ... |