Notice 再次提交

This commit is contained in:
Connor
2021-07-08 13:51:06 +08:00
parent ad50293249
commit 990e8cf295
7 changed files with 186 additions and 38 deletions

View File

@@ -139,7 +139,6 @@ export default class form extends Component {
*/
async getData() {
const form = this.form.current
console.log(this.record)
const valid = await form.validateFields()
if (valid) {
const postData = form.getFieldsValue()

View File

@@ -56,28 +56,38 @@ export default class index extends Component {
{
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: 200,
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'),
},
]
@@ -94,7 +104,7 @@ export default class index extends Component {
if (flag) {
this.columns.push({
title: '操作',
width: 150,
width: 200,
dataIndex: 'actions',
render: (text, record) => (
<QueryTableActions>
@@ -178,6 +188,7 @@ export default class index extends Component {
})
})
}
subUniqueKey(text, index) {
return text.substr(index, 5)
}
@@ -252,26 +263,23 @@ export default class index extends Component {
* @param {*} id
*/
onDelete(id) {
this.onAction(apiAction.Status({ id, Status: 3 }), '删除成功')
this.onAction(apiAction.Status({ id, status: 3 }), '删除成功')
}
/**
* 发布
* @param {*} id
*/
onPublish(id) {
this.onAction(apiAction.Status({ id, Status: 1 }), '发布成功')
this.onAction(apiAction.Status({ id, status: 1 }), '发布成功')
}
/**
* 撤回
* @param {*} id
*/
onGoBack(id) {
this.onAction(apiAction.Status({ id, Status: 2 }), '撤回成功')
this.onAction(apiAction.Status({ id, status: 2 }), '撤回成功')
} //
//#region 自定义方法
//#endregion
render() {
const { codes } = this.state
return (
@@ -280,7 +288,6 @@ export default class index extends Component {
<Card bordered={false}>
<QueryTable
ref={this.table}
rowkey={record => record.id}
autoLoad={false}
loadData={this.loadData}
columns={this.columns}

View File

@@ -1,15 +1,18 @@
import React, { Component } from 'react'
import { Spin, Divider, Modal, Row } from 'antd'
import { Spin, Divider, Modal, Row, Form, Upload } from 'antd'
import { api } from 'common/api'
import { AntIcon } from 'components'
import { BlobToBase64, GetFileName, PreviewFile } from 'util/file'
export default class form extends Component {
state = {
detailVisible: false,
detailLoading: false,
detailData: {},
fileValue: false,
}
filedu = React.createRef()
/**
* mount后回调
*/
@@ -20,12 +23,57 @@ export default class form extends Component {
async onOpenDetail(id) {
this.setState({ detailLoading: true, detailVisible: true })
const { data } = await api.sysNoticeDetail({ id })
this.setState({
detailLoading: false,
detailData: data,
fileValue: false,
})
if (data) {
const { attachments } = data
if (attachments) {
const fileValue = []
const fileList = attachments.split(',')
for (const fileId of fileList) {
try {
const file = await PreviewFile(fileId)
const base64 = await BlobToBase64(file)
fileValue.push({
uid: fileId,
response: fileId,
name: file.name,
url: base64,
status: 'done',
})
} catch {
const { data: file } = await api.sysFileInfoDetail({ id: fileId })
fileValue.push({
uid: fileId,
response: '文件已丢失',
name: file.fileOriginName,
status: 'error',
})
}
}
this.setState({
fileValue,
})
}
}
}
async onFileDownload(file) {
const { data, headers } = await api.sysFileInfoDownload({ id: file.response })
const url = window.URL.createObjectURL(data)
const fileName = GetFileName(headers['content-disposition'])
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
window.URL.revokeObjectURL(url)
a.remove()
}
render() {
const { detailLoading, detailVisible, detailData } = this.state
return (
@@ -43,6 +91,21 @@ export default class form extends Component {
dangerouslySetInnerHTML={{ __html: detailData.content }}
></div>
<Divider />
{this.state.fileValue && (
<Row>
<span>
查看附件
<Upload
fileList={this.state.fileValue}
showUploadList={{
showDownloadIcon: true,
}}
onDownload={file => this.onFileDownload(file)}
></Upload>
</span>
</Row>
)}
<Divider />
<Row justify="space-between" className="text-gray">
<span>发布人{detailData.publicUserName}</span>
<span>发布时间{detailData.publicTime} </span>

View File

@@ -20,6 +20,7 @@ export default class index extends Component {
codes: {
noticeStatus: [],
noticeType: [],
readStatus: [],
},
}
@@ -33,25 +34,39 @@ export default class index extends Component {
{
title: '标题',
dataIndex: 'title',
width: 300,
sorter: true,
},
{
title: '发布人',
dataIndex: 'publicUserName',
width: 150,
sorter: true,
},
{
title: '发布时间',
dataIndex: 'createdTime',
width: 200,
sorter: true,
},
{
title: '发布单位',
dataIndex: 'publicOrgName',
width: 200,
sorter: true,
},
{
title: '类型',
dataIndex: 'type',
width: 120,
render: text => this.bindCodeValue(text, 'notice_type'),
},
{
title: '已读未读',
dataIndex: 'readStatus',
width: 120,
render: text => this.bindCodeValue(text, 'read_status'),
},
]
/**
@@ -94,33 +109,13 @@ export default class index extends Component {
componentDidMount() {
const { onLoading, onLoadData } = this.table.current
onLoading()
getDictData('notice_status', 'notice_type').then(codes => {
getDictData('notice_status', 'notice_type', 'read_status').then(codes => {
this.setState({ codes }, () => {
onLoadData()
})
})
}
/**
* 对表格上的操作进行统一处理
* [异步]
* @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()
}
}
/**
* 调用加载数据接口,可在调用前对query进行处理
* [异步,必要]
@@ -134,6 +129,7 @@ export default class index extends Component {
queryType: {
type: QueryType.Equal,
title: QueryType.Like,
readStatus: QueryType.Equal,
},
})
@@ -200,6 +196,19 @@ export default class index extends Component {
))}
</Select>
</Form.Item>
<Form.Item label="已读未读" name="readStatus">
<Select
placeholder="请选择是否已读"
className="w-200"
allowClear
>
{codes.readStatus.map(item => (
<Select.Option key={item.code} value={item.code}>
{item.value}
</Select.Option>
))}
</Select>
</Form.Item>
</Auth>
}
/>

View File

@@ -1,8 +1,9 @@
import React, { Component } from 'react'
import { Badge, Button, Divider, List, Menu, Modal, Popover, Row, Spin } from 'antd'
import { Badge, Button, Divider, List, Menu, Modal, Popover, Row, Spin, Upload, Tag } from 'antd'
import { AntIcon, Image } from 'components'
import { api } from 'common/api'
import InfiniteScroll from 'react-infinite-scroller'
import { BlobToBase64, GetFileName, PreviewFile } from 'util/file'
import moment from 'moment'
export default class notice extends Component {
@@ -16,6 +17,7 @@ export default class notice extends Component {
detailVisible: false,
detailLoading: false,
detailData: {},
fileValue: false,
}
async componentDidMount() {
@@ -42,7 +44,6 @@ export default class notice extends Component {
sortField: 'createdTime',
sortOrder: 'descend',
})
if (!items.length) {
return this.finish()
}
@@ -59,7 +60,51 @@ export default class notice extends Component {
this.setState({
detailLoading: false,
detailData: data,
fileValue: false,
})
if (data) {
const { attachments } = data
if (attachments) {
const fileValue = []
const fileList = attachments.split(',')
for (const fileId of fileList) {
try {
const file = await PreviewFile(fileId)
const base64 = await BlobToBase64(file)
fileValue.push({
uid: fileId,
response: fileId,
name: file.name,
url: base64,
status: 'done',
})
} catch {
const { data: file } = await api.sysFileInfoDetail({ id: fileId })
fileValue.push({
uid: fileId,
response: '文件已丢失',
name: file.fileOriginName,
status: 'error',
})
}
}
this.setState({
fileValue,
})
}
}
}
async onFileDownload(file) {
const { data, headers } = await api.sysFileInfoDownload({ id: file.response })
const url = window.URL.createObjectURL(data)
const fileName = GetFileName(headers['content-disposition'])
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
window.URL.revokeObjectURL(url)
a.remove()
}
renderList() {
@@ -88,6 +133,13 @@ export default class notice extends Component {
</small>
</>
}
description={
item.readStatus == 0 ? (
<Tag color="#f50">未读</Tag>
) : (
<Tag color="#2db7f5">已读</Tag>
)
}
/>
<div className="ellipsis-3 text-gray">{item.content}</div>
</List.Item>
@@ -140,6 +192,21 @@ export default class notice extends Component {
dangerouslySetInnerHTML={{ __html: detailData.content }}
></div>
<Divider />
{this.state.fileValue && (
<Row className="text-gray">
<span>
查看附件
<Upload
fileList={this.state.fileValue}
showUploadList={{
showDownloadIcon: true,
}}
onDownload={file => this.onFileDownload(file)}
></Upload>
</span>
</Row>
)}
<Divider />
<Row justify="space-between" className="text-gray">
<span>发布人{detailData.publicUserName}</span>
<span>发布时间{detailData.publicTime} </span>