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 | +} | ... | ... |