index.jsx 8.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. import React, { useState, useEffect, useRef } from 'react';
  2. import {
  3. Form,
  4. Input,
  5. Button,
  6. Icon,
  7. Typography,
  8. message,
  9. Table,
  10. Pagination,
  11. Modal,
  12. DatePicker,
  13. Card,
  14. } from 'antd';
  15. import router from 'umi/router';
  16. import moment from 'moment';
  17. import AuthButton from '@/components/AuthButton';
  18. import withActions from '@/components/ActionList';
  19. import EditIcon from '@/components/EditIcon';
  20. import Navigate from '@/components/Navigate';
  21. import SelectCity from '@/components/SelectButton/CitySelect';
  22. import BuildSelect from '@/components/SelectButton/BuildSelect';
  23. import apis from '@/services/apis';
  24. import request from '@/utils/request';
  25. import QueryTable from '@/components/QueryTable';
  26. const LookHouseActivity = props => {
  27. const ref = useRef();
  28. const searchFields = [
  29. {
  30. name: 'cityId',
  31. label: '城市',
  32. placeholder: '请选择城市',
  33. render: () => <SelectCity style={{ width: 160 }} />,
  34. },
  35. {
  36. name: 'buildingId',
  37. label: '项目',
  38. placeholder: '请选择项目',
  39. render: () => <BuildSelect style={{ width: 160 }} />,
  40. },
  41. {
  42. name: 'title',
  43. label: '标题',
  44. placeholder: '请输入标题',
  45. },
  46. {
  47. name: 'time',
  48. label: '时间',
  49. placeholder: '请选择时间',
  50. type: 'datepicker',
  51. },
  52. ];
  53. const toLookHouseActivityDetail = dynamicId => () => {
  54. router.push({
  55. pathname: '/activity/lookHouseActivity/detail',
  56. query: {
  57. dynamicId,
  58. },
  59. });
  60. };
  61. // 跳转到编辑
  62. const toLookHouseActivityEdit = dynamicId => {
  63. router.push({
  64. pathname: '/activity/lookHouseActivity/edit',
  65. query: {
  66. dynamicId,
  67. },
  68. });
  69. };
  70. // 置顶
  71. const topDynamic = row => () => {
  72. const weight = Math.abs(row.weight - 1);
  73. request({ ...apis.activity.weight, params: { dynamicId: row.dynamicId, weight } })
  74. .then(data => {
  75. message.info('操作成功!');
  76. ref.current.reload();
  77. })
  78. .catch(err => {
  79. console.log(err);
  80. message.info(err.msg || err.message);
  81. });
  82. };
  83. // 推首页
  84. const homeDynamic = row => () => {
  85. const home = Math.abs(row.home - 1);
  86. request({ ...apis.activity.home, params: { dynamicId: row.dynamicId, home } })
  87. .then(data => {
  88. message.info('操作成功!');
  89. ref.current.reload();
  90. })
  91. .catch(err => {
  92. console.log(err);
  93. message.info(err.msg || err.message);
  94. });
  95. };
  96. //结束活动
  97. const finishDynamic = row => {
  98. Modal.confirm({
  99. title:
  100. '活动会被强制结束,小程序端无法再发起或参与此活动,如果不想让客户看到活动,请再点击取消发布按钮',
  101. okText: '确定',
  102. cancelText: '取消',
  103. onOk() {
  104. request({ ...apis.activity.finish, data: { dynamicId: row.dynamicId, top: '' } })
  105. .then(data => {
  106. message.info('操作成功!');
  107. ref.current.reload();
  108. })
  109. .catch(err => {
  110. console.log(err);
  111. message.info(err.msg || err.message);
  112. });
  113. },
  114. });
  115. };
  116. // 发布活动
  117. const sendDynamic = row => {
  118. Modal.confirm({
  119. title: '确定发布吗?',
  120. okText: '确认',
  121. cancelText: '取消',
  122. onOk() {
  123. request({ ...apis.activity.send, urlData: { id: row.dynamicId } })
  124. .then(data => {
  125. message.info('操作成功!');
  126. ref.current.reload();
  127. })
  128. .catch(err => {
  129. console.log(err);
  130. message.info(err.msg || err.message);
  131. });
  132. },
  133. });
  134. };
  135. // 取消活动
  136. const cancelDynamic = row => {
  137. Modal.confirm({
  138. title: '活动会在小程序端隐藏,后台可以继续编辑重新发布',
  139. okText: '确认',
  140. cancelText: '取消',
  141. onOk() {
  142. request({ ...apis.activity.cancel, urlData: { id: row.dynamicId } })
  143. .then(data => {
  144. message.info('操作成功!');
  145. ref.current.reload();
  146. })
  147. .catch(err => {
  148. console.log(err);
  149. message.info(err.msg || err.message);
  150. });
  151. },
  152. });
  153. };
  154. // 发布or取消发布
  155. const sendOrPublicDynamic = row => {
  156. if (row.status === 1) {
  157. cancelDynamic(row);
  158. } else {
  159. sendDynamic(row);
  160. }
  161. };
  162. const getJoinPeople = dynamicId => () => {
  163. router.push({
  164. pathname: '/activity/lookHouseActivity/registrationRecord',
  165. query: {
  166. dynamicId,
  167. },
  168. });
  169. };
  170. const columns = [
  171. {
  172. title: '活动标题',
  173. dataIndex: 'title',
  174. key: 'title',
  175. align: 'center',
  176. width: '20%',
  177. render: (x, row) => (
  178. <Navigate onClick={toLookHouseActivityDetail(row.dynamicId)}>
  179. <Typography.Text ellipsis>{row.title}</Typography.Text>
  180. </Navigate>
  181. ),
  182. },
  183. {
  184. title: '活动时间',
  185. dataIndex: 'startDate',
  186. key: 'startDate',
  187. align: 'center',
  188. width: '15%',
  189. // width: '20%',
  190. render: (x, row) => (
  191. <>
  192. <span>{`${moment(row.startDate).format('YYYY-MM-DD')} —— ${moment(row.endDate).format(
  193. 'YYYY-MM-DD',
  194. )}`}</span>
  195. </>
  196. ),
  197. },
  198. {
  199. title: '已参与人数',
  200. dataIndex: 'count',
  201. key: 'count',
  202. align: 'center',
  203. render: (x, row) => <Navigate onClick={getJoinPeople(row.dynamicId)}>{row.count}</Navigate>,
  204. },
  205. // {
  206. // title: '阅读量',
  207. // dataIndex: 'pvNum',
  208. // key: 'pvNum',
  209. // align: 'center',
  210. // // width: '10%',
  211. // },
  212. // {
  213. // title: '转发量',
  214. // dataIndex: 'shareNum',
  215. // key: 'shareNum',
  216. // align: 'center',
  217. // // width: '10%',
  218. // },
  219. // {
  220. // title: '收藏数',
  221. // dataIndex: 'saveNum',
  222. // key: 'saveNum',
  223. // align: 'center',
  224. // // width: '10%',
  225. // },
  226. {
  227. title: '报名状态',
  228. dataIndex: 'activityStatus',
  229. key: 'activityStatus',
  230. align: 'center',
  231. render: activityStatus =>
  232. activityStatus == 0 ? '进行中' : activityStatus == 1 ? '未开始' : '已结束',
  233. },
  234. {
  235. title: '权重',
  236. dataIndex: 'heavy',
  237. key: 'heavy',
  238. align: 'center',
  239. },
  240. {
  241. title: '操作',
  242. dataIndex: 'handle',
  243. key: 'handle',
  244. align: 'center',
  245. render: withActions((x, row) => [
  246. <AuthButton name="admin.buildingDynamic.send.dynamicId.put" noRight={null}>
  247. <EditIcon
  248. type={row.status === 1 ? 'cancel' : 'publish'}
  249. text={row.status === 1 ? '取消发布' : '发布'}
  250. onClick={() => sendOrPublicDynamic(row)}
  251. />
  252. </AuthButton>,
  253. // // <EditIcon type="look" text="查看详情" onClick={toLookHouseActivityDetail(row.dynamicId)} />,
  254. row.activityStatus === 0 ? (
  255. <AuthButton name="admin.buildingDynamic.finish.put" noRight={null}>
  256. <EditIcon type="end" text="结束活动" onClick={finishDynamic.bind(this, row)} />
  257. </AuthButton>
  258. ) : null,
  259. <AuthButton name="admin.buildingDynamic.tag" noRight={null}>
  260. <EditIcon
  261. type={row.weight === 1 ? 'cancel' : 'add'}
  262. text={row.weight === 1 ? '取消标签' : '添加标签'}
  263. onClick={topDynamic(row)}
  264. />
  265. </AuthButton>,
  266. <EditIcon
  267. type={row.home === 1 ? 'cancel' : 'top'}
  268. text={row.home === 1 ? '取消推首页' : '推荐首页'}
  269. onClick={homeDynamic(row)}
  270. />,
  271. // <AuthButton name="admin.buildingDynamic.dataRecord" noRight={null}>
  272. // <EditIcon type="record" text="数据记录" onClick={toDataReacord(row.dynamicId)} />
  273. // </AuthButton>,
  274. row.activityStatus === 0 || row.activityStatus === 1 ? (
  275. <AuthButton name="admin.buildingDynamic.update.put" noRight={null}>
  276. <EditIcon
  277. type="edit"
  278. text="编辑"
  279. onClick={() => toLookHouseActivityEdit(row.dynamicId, row.count)}
  280. />
  281. </AuthButton>
  282. ) : null,
  283. ]),
  284. },
  285. ];
  286. const actionRender = () => {
  287. return (
  288. <Button type="primary" icon="plus" onClick={() => toLookHouseActivityEdit()}>
  289. 新增
  290. </Button>
  291. );
  292. };
  293. return (
  294. <QueryTable
  295. ref={ref}
  296. rowKey="dynamicId"
  297. api={apis.activity.list}
  298. searchFields={searchFields}
  299. columns={columns}
  300. postData={data => {
  301. data.time && (data.time = `${moment(data.time).format('YYYY-MM-DDT00:00:00.000')}Z`);
  302. return data;
  303. }}
  304. actionRender={actionRender}
  305. // onPageChange={(pg) => setPage(pg)}
  306. />
  307. );
  308. };
  309. export default LookHouseActivity;