import React, { Component } from 'react' import { Button, Card, Form, Input, message as Message, Popconfirm, Select } from 'antd' import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' import { api } from 'common/api' import auth from 'components/authorized/handler' import { isEqual } from 'lodash' import getDictData from 'util/dic' import { toCamelCase } from 'util/format' import FormBody from './form' /** * 注释段[\/**\/]为必须要改 */ /** * 配置页面所需接口函数 */ const apiAction = { page: api.sysNoticePage, add: api.sysNoticeAdd, edit: api.sysNoticeEdit, delete: api.sysNoticeDelete, status: api.sysNoticeChangeStatus, } /** * 用于弹窗标题 * [必要] */ const name = '通知公告' /** * 统一配置权限标识 * [必要] */ const authName = 'sysNotice' export default class index extends Component { state = { codes: { noticeStatus: [], noticeType: [], }, } // 表格实例 table = React.createRef() // 新增窗口实例 addForm = React.createRef() // 编辑窗口实例 editForm = React.createRef() columns = [ { title: '标题', dataIndex: 'title', width: 300, sorter: true, }, { title: '发布人', dataIndex: 'publicUserName', width: 120, sorter: true, }, { title: '发布时间', dataIndex: 'createdTime', width: 150, sorter: true, }, { title: '发布单位', dataIndex: 'publicOrgName', width: 150, sorter: true, }, { title: '类型', dataIndex: 'type', width: 120, sorter: true, render: text => this.bindCodeValue(text, 'notice_type'), }, { title: '状态', dataIndex: 'status', width: 120, render: text => this.bindCodeValue(text, 'notice_status'), }, ] /** * 构造函数,在渲染前动态添加操作字段等 * @param {*} props */ constructor(props) { super(props) const flag = auth({ [authName]: [['edit'], ['changeStatus']] }) if (flag) { this.columns.push({ title: '操作', width: 200, dataIndex: 'actions', render: (text, record) => ( {record.status === 1 ? ( this.onGoBack(record.id)} > 撤回 ) : ( [ this.onOpen(this.editForm, record.id)}> 编辑 , this.onPublish(record.id)} > 发布 , this.onDelete(record.id)} > 删除 , ] )} ), }) } } /** * 阻止外部组件引发的渲染,提升性能 * 可自行添加渲染条件 * [必要] * @param {*} props * @param {*} state * @returns */ shouldComponentUpdate(props, state) { return !isEqual(this.state, state) } /** * 加载字典数据,之后开始加载表格数据 * 如果必须要加载字典数据,可直接对表格设置autoLoad=true */ componentDidMount() { const { onLoading, onLoadData } = this.table.current onLoading() getDictData('notice_status', 'notice_type').then(codes => { this.setState({ codes }, () => { onLoadData() }) }) } subUniqueKey(text, index) { return text.substr(index, 5) } /** * 调用加载数据接口,可在调用前对query进行处理 * [异步,必要] * @param {*} params * @param {*} query * @returns */ loadData = async (params, query) => { const { data } = await apiAction.page({ ...params, ...query, }) return data } /** * 绑定字典数据 * @param {*} code * @param {*} name * @returns */ bindCodeValue(code, name) { name = toCamelCase(name) const codes = this.state.codes[name] if (codes) { const c = codes.find(p => p.code == code) if (c) { return c.value } } return null } /** * 打开新增/编辑弹窗 * @param {*} modal * @param {*} id */ onOpen(modal, id) { modal.current.open({ id, }) } /** * 对表格上的操作进行统一处理 * [异步] * @param {*} action * @param {*} successMessage */ async onAction(action, successMessage) { const { onLoading, onLoaded, onReloadData } = this.table.current onLoading() try { if (action) { await action } if (successMessage) { Message.success(successMessage) } onReloadData() } catch { onLoaded() } } /** * 删除 * @param {*} id */ onDelete(id) { this.onAction(apiAction.status({ id, status: 3 }), '删除成功') } /** * 发布 * @param {*} id */ onPublish(id) { this.onAction(apiAction.status({ id, status: 1 }), '发布成功') } /** * 撤回 * @param {*} id */ onGoBack(id) { this.onAction(apiAction.status({ id, status: 2 }), '撤回成功') } // render() { const { codes } = this.state return (
} operator={ record.id} auth={{ [authName]: 'add' }}> } /> ( ), }, ]} ref={this.addForm} onSuccess={() => this.table.current.onReloadData()} > this.table.current.onReloadData()} >
) } }