知与行后台管理端

ActivityList.jsx 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. import React, { useState, useEffect } from 'react';
  2. import { Form, Input, Button, Icon, Select, message, Table, Divider, Tag, Pagination, Modal, DatePicker } from 'antd';
  3. import { FormattedMessage } from 'umi-plugin-react/locale';
  4. import router from 'umi/router';
  5. import moment from 'moment';
  6. import styles from '../style/GoodsList.less';
  7. import SelectCity from '../../components/SelectButton/CitySelect'
  8. import BuildSelect from '../../components/SelectButton/BuildSelect'
  9. import apis from '../../services/apis';
  10. import request from '../../utils/request';
  11. import AuthButton from '@/components/AuthButton';
  12. const { Option } = Select;
  13. const { MonthPicker, RangePicker, WeekPicker } = DatePicker;
  14. const header = props => {
  15. // eslint-disable-next-line react-hooks/rules-of-hooks
  16. const [data, setData] = useState({ list: [], total: 0 })
  17. // const [page, changePage] = useState({})
  18. // 查询列表
  19. const getList = params => {
  20. request({ ...apis.activity.list, params: { ...params } }).then(data => {
  21. console.log(data)
  22. setData(data)
  23. })
  24. }
  25. // eslint-disable-next-line react-hooks/rules-of-hooks
  26. useEffect(() => {
  27. getList({ pageNum: 1, pageSize: 10 });
  28. }, [])
  29. // 跳转到编辑商品
  30. const toEditGoods = dynamicId => () => {
  31. router.push({
  32. pathname: '/activity/editActivity',
  33. query: {
  34. dynamicId,
  35. },
  36. });
  37. }
  38. const newQrcode = row => {
  39. const x = new XMLHttpRequest();
  40. const resourceUrl = row.qrCode
  41. x.open('GET', resourceUrl, true);
  42. x.responseType = 'blob';
  43. x.onload = function (e) {
  44. const url = window.URL.createObjectURL(x.response)
  45. const a = document.createElement('a');
  46. a.href = url;
  47. a.style.display = 'none'
  48. a.download = '活动二维码.png';
  49. a.click();
  50. }
  51. x.send();
  52. }
  53. /**
  54. *
  55. *
  56. * @param {*} props
  57. * @returns
  58. */
  59. const columns = [
  60. {
  61. title: '活动标题',
  62. dataIndex: 'title',
  63. key: 'title',
  64. align: 'center',
  65. // width: '15%',
  66. render: (x, row) => <><div style={{overflow: 'hidden',textOverflow: 'ellipsis',whiteSpace: 'nowrap', width: '201px',title:'content'}}>{row.title}</div></>,
  67. // width: '300px',
  68. // ellipsis:'true'overflow: hidden; /*溢出隐藏*/
  69. // text-overflow: ellipsis; /*以省略号...显示*/
  70. // white-space: nowrap;
  71. },
  72. {
  73. title: '活动时间',
  74. dataIndex: 'startDate',
  75. key: 'startDate',
  76. align: 'center',
  77. // width: '15%',
  78. // width: '20%',
  79. render: (x, row) => <><span>{`${moment(row.startDate).format('YYYY-MM-DD')} —— ${moment(row.endDate).format('YYYY-MM-DD')}`}</span></>,
  80. },
  81. {
  82. title: '已参加人数',
  83. dataIndex: 'count',
  84. key: 'count',
  85. align: 'center',
  86. // width: '10%',
  87. // width: '6%',
  88. },
  89. {
  90. title: '阅读量',
  91. dataIndex: 'pvNum',
  92. key: 'pvNum',
  93. align: 'center',
  94. // width: '10%',
  95. },
  96. {
  97. title: '转发量',
  98. dataIndex: 'shareNum',
  99. key: 'shareNum',
  100. align: 'center',
  101. // width: '10%',
  102. },
  103. {
  104. title: '收藏数',
  105. dataIndex: 'saveNum',
  106. key: 'saveNum',
  107. align: 'center',
  108. // width: '10%',
  109. },
  110. {
  111. title: '状态',
  112. dataIndex: 'activityStatus',
  113. key: 'activityStatus',
  114. align: 'center',
  115. // width: '10%',
  116. render: activityStatus => <><span>{activityStatus == 0 ? '进行中' : activityStatus == 1 ? '未开始' : '已结束'}</span></>,
  117. },
  118. {
  119. title: '操作',
  120. dataIndex: 'handle',
  121. key: 'handle',
  122. align: 'center',
  123. render: (x, row) => (
  124. <>
  125. <AuthButton name="admin.SignList.get" noRight={null}>
  126. <span style={{ color: '#1990FF',marginRight: '20px', cursor: 'pointer' }} onClick={getSignList.bind(this, row.dynamicId)}>{row.isEnlist == '1' || row.isEnlist == '2' ? '报名记录' : ''}{ (row.isEnlist==1||row.isEnlist==2) && <Icon type="snippets" className={styles.shoppingCart} />}</span>
  127. </AuthButton>
  128. <AuthButton name="admin.buildingDynamic.send.dynamicId.put" noRight={null}>
  129. {row.activityStatus != 0 && <span style={{ color: '#1990FF',marginRight: '20px', cursor: 'pointer' }} onClick={sendOrPublicDynamic.bind(this, row)}>{row.status === 1 ? '取消发布' : '发布'}<Icon type="close-circle" className={styles.edit} /></span>}
  130. </AuthButton>
  131. <AuthButton name="admin.buildingDynamic.finish.put" noRight={null}>
  132. {row.activityStatus != 2 && <span style={{ color: '#1990FF',marginRight: '20px', cursor: 'pointer' }} onClick={finishDynamic.bind(this, row)}>结束活动<Icon type="poweroff" className={styles.edit} /></span>}
  133. </AuthButton>
  134. <AuthButton name="admin.buildingDynamic.update.put" noRight={null}>
  135. <span style={{ color: '#1990FF', marginRight: '20px', cursor: 'pointer' }} onClick={topDynamic(row)}>{row.weight === 1 ? '取消置顶' : '置顶'}<Icon type="vertical-align-top" className={styles.edit} /></span>
  136. {row.activityStatus != 2 && <span style={{ color: '#FF925C',marginRight: '20px', cursor: 'pointer' }} onClick={toEditGoods(row.dynamicId)}>编辑<Icon type="form" className={styles.edit} /></span>}
  137. </AuthButton>
  138. {row.status === 1 &&<span style={{ color: '#1990FF', marginRight: '20px', cursor: 'pointer' }} onClick={newQrcode.bind(this, row)}>{row.isEnlist === 1 && '下载二维码'} {row.isEnlist === 1 && <Icon type="qrcode" className={styles.shoppingCart} />}</span>}
  139. </>
  140. ),
  141. },
  142. ];
  143. const getSignList = dynamicId => {
  144. router.push({
  145. pathname: '/activity/SignList',
  146. query: {
  147. dynamicId,
  148. },
  149. });
  150. }
  151. const finishDynamic = row => {
  152. Modal.confirm({
  153. title: '结束以后将无法编辑, 是否继续?',
  154. okText: '确定',
  155. cancelText: '取消',
  156. onOk () {
  157. request({ ...apis.activity.finish, data: { dynamicId: row.dynamicId, top: '' } }).then(data => {
  158. console.log(data)
  159. message.info('操作成功!')
  160. getList({ pageNum: 1, pageSize: 10, ...props.form.getFieldsValue() })
  161. }).catch(err => {
  162. console.log(err)
  163. message.info(err.msg || err.message)
  164. })
  165. },
  166. });
  167. }
  168. // 置顶
  169. const topDynamic = row => () => {
  170. const weight = Math.abs(row.weight - 1)
  171. request({ ...apis.activity.weight, params: { dynamicId: row.dynamicId, weight } }).then(data => {
  172. console.log(data)
  173. message.info('操作成功!')
  174. getList({ pageNum: 1, pageSize: 10, ...props.form.getFieldsValue() })
  175. }).catch(err => {
  176. console.log(err)
  177. message.info(err.msg || err.message)
  178. })
  179. }
  180. const sendOrPublicDynamic = row => {
  181. if (row.status === 1) {
  182. cancelDynamic(row)
  183. } else {
  184. sendDynamic(row)
  185. }
  186. }
  187. // 取消活动
  188. const cancelDynamic = row => {
  189. request({ ...apis.activity.cancel, urlData: { id: row.dynamicId } }).then(data => {
  190. message.info('操作成功!')
  191. getList({ pageNum: 1, pageSize: 10, ...props.form.getFieldsValue() })
  192. }).catch(err => {
  193. console.log(err)
  194. message.info(err.msg || err.message)
  195. })
  196. }
  197. // 发布活动
  198. const sendDynamic = row => {
  199. request({ ...apis.activity.send, urlData: { id: row.dynamicId } }).then(data => {
  200. message.info('操作成功!')
  201. getList({ pageNum: 1, pageSize: 10, ...props.form.getFieldsValue() });
  202. }).catch(err => {
  203. console.log(err)
  204. message.info(err.msg || err.message)
  205. })
  206. }
  207. const changePageNum = pageNumber => {
  208. getList({ pageNum: pageNumber, pageSize: 10, ...props.form.getFieldsValue() })
  209. }
  210. // 提交事件
  211. const handleSubmit = (e, props) => {
  212. e.preventDefault();
  213. props.form.validateFields((err, values) => {
  214. if (!err) {
  215. console.log('提交数据: ', values)
  216. getList({ pageNum: 1, pageSize: 10, ...values })
  217. }
  218. });
  219. }
  220. // 重置搜索
  221. function handleReset () {
  222. props.form.resetFields();
  223. getList({ pageNum: 1, pageSize: 10 })
  224. }
  225. const { getFieldDecorator } = props.form
  226. return (
  227. <>
  228. {/* style={{ display: 'none' }} */}
  229. <div id="qrcode"></div>
  230. <Form layout="inline" onSubmit={e => handleSubmit(e, props)}>
  231. <Form.Item>
  232. {getFieldDecorator('cityId')(
  233. <SelectCity />,
  234. )}
  235. </Form.Item>
  236. <Form.Item>
  237. {getFieldDecorator('buildingId')(
  238. <BuildSelect />,
  239. )}
  240. </Form.Item>
  241. <Form.Item>
  242. {getFieldDecorator('title')(
  243. <Input
  244. prefix={<Icon type="text" style={{ color: 'rgba(0,0,0,.25)' }} />}
  245. placeholder="请输入标题"
  246. />,
  247. )}
  248. </Form.Item>
  249. <Form.Item>
  250. {getFieldDecorator('time')(
  251. <DatePicker />,
  252. )}
  253. </Form.Item>
  254. <Form.Item>
  255. {getFieldDecorator('isEnlist')(
  256. <Select style={{ width: '180px' }} placeholder="是否报名">
  257. <Option value="1">已报名</Option>
  258. <Option value="0">未报名</Option>
  259. </Select>,
  260. )}
  261. </Form.Item>
  262. <Form.Item>
  263. <Button type="primary" htmlType="submit" className={styles.searchBtn}>
  264. 搜索
  265. </Button>
  266. <Button style={{ marginLeft: 8 }} onClick={handleReset}>
  267. 重置
  268. </Button>
  269. </Form.Item>
  270. </Form>
  271. <AuthButton name="admin.buildingDynamic.add.post" noRight={null}>
  272. <Button type="danger" className={styles.addBtn} onClick={toEditGoods()}>新增</Button>
  273. </AuthButton>
  274. <Table dataSource={data.list} columns={columns} pagination={false} rowKey="activityList" />
  275. <div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: '30px' }}>
  276. <Pagination showQuickJumper defaultCurrent={1} total={data.total} onChange={e => changePageNum(e)} current={data.current}/>
  277. </div>
  278. </>
  279. )
  280. }
  281. const WrappedHeader = Form.create({ name: 'header' })(header);
  282. export default WrappedHeader