知与行后台管理端

userBehavior.jsx 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. import React, { Component, useState, useEffect } from 'react';
  2. import { Radio, DatePicker, Form, Input, Button, Icon, Select, message, Table , Row, Col, Menu, Dropdown } from 'antd';
  3. import moment from 'moment';
  4. import UserBehavior from './components/UserBehavior'
  5. import EChart from '../../components/EchartsTest/EChart';
  6. import request from '../../utils/request';
  7. import apis from '../../services/apis';
  8. import BuildSelect from '../../components/SelectButton/BuildSelect'
  9. import { func } from 'prop-types';
  10. // const formatDate = (start, end) => {
  11. // const startDate = moment(start).format('YYYY-MM-DDT00:00:00.000') + 'Z'
  12. // const endDate = moment(end).format('YYYY-MM-DDT23:59:59.999') + 'Z'
  13. // return { startDate, endDate }
  14. // }
  15. const { Option } = Select;
  16. const header = props => {
  17. // eslint-disable-next-line react-hooks/rules-of-hooks
  18. const [tableData, setTableData] = useState({ records: [] })
  19. // eslint-disable-next-line react-hooks/rules-of-hooks
  20. const [endDate, setEndDate] = useState({})
  21. // eslint-disable-next-line react-hooks/rules-of-hooks
  22. const [startDate, setStartDate] = useState({})
  23. const daterange = []
  24. // eslint-disable-next-line react-hooks/rules-of-hooks
  25. useEffect(() => {
  26. window.scrollTo(0, 0)
  27. setEndDate(new Date())
  28. setStartDate(moment().subtract(7, 'day').toDate())
  29. getBizEventType()
  30. getBizEventList()
  31. getProperties()
  32. props.form.setFieldsValue({ radioGroup: 'a' })
  33. }, [])
  34. // eslint-disable-next-line react-hooks/rules-of-hooks
  35. const [eventypes, setEventTypes] = useState([])
  36. function getBizEventType(row) {
  37. request({
  38. ...apis.indexEcharts.bizEvent.dict,
  39. }).then(data => {
  40. const eventType = ['agent', 'main']
  41. setEventTypes(data.records.filter(item => !eventType.includes(item.typeId)))
  42. })
  43. }
  44. const [eventList, setEventList] = useState([])
  45. function getBizEventList(row) {
  46. request({
  47. ...apis.indexEcharts.bizEvent.list,
  48. }).then(data => {
  49. setEventList(data.records)
  50. })
  51. }
  52. const [properties, setProperties] = useState([])
  53. function getProperties(row) {
  54. request({
  55. ...apis.indexEcharts.bizEvent.properties,
  56. }).then(data => {
  57. setProperties(data.records)
  58. })
  59. }
  60. const { RangePicker } = DatePicker;
  61. function handleSubmit(e) {
  62. e.preventDefault();
  63. props.form.validateFields((err, values) => {
  64. if (!err) {
  65. const { rangePicker } = values
  66. console.log('Received values of form: ', values.rangePicker);
  67. setEndDate(rangePicker[1])
  68. setStartDate(rangePicker[0])
  69. }
  70. });
  71. }
  72. const getDataOf = days => () => {
  73. setEndDate(new Date())
  74. setStartDate(moment().subtract(days, 'day').toDate())
  75. }
  76. function redata(e) {
  77. console.log('行为回调数据:', e)
  78. }
  79. const [eventType, setEventType] = useState('')
  80. function handleChangeType(value) {
  81. setEventType(value)
  82. }
  83. const [event, setEvent] = useState('')
  84. function handleChangeEvent(value) {
  85. setEvent(value)
  86. }
  87. const [activity, setActivity] = useState('')
  88. function handleChangeProperty(value) {
  89. setActivity(value)
  90. }
  91. const [buildingId, setBuildingId] = useState('')
  92. function handleBuildingChange(value) {
  93. setBuildingId(value)
  94. }
  95. // 重置
  96. function resetQuery() {
  97. props.form.resetFields()
  98. props.form.setFieldsValue({ radioGroup: 'a' })
  99. }
  100. const columns = [
  101. {
  102. title: '访问事件',
  103. dataIndex: 'personName',
  104. key: 'personName',
  105. width: '20%',
  106. },
  107. {
  108. title: '访问用户',
  109. dataIndex: 'phone',
  110. key: 'phone',
  111. width: '20%',
  112. },
  113. {
  114. title: '访问次数',
  115. dataIndex: 'buildingName',
  116. key: 'buildingName',
  117. width: '20%',
  118. },
  119. {
  120. title: '首次访问时间',
  121. dataIndex: 'intention',
  122. key: 'intention',
  123. width: '20%',
  124. },
  125. {
  126. title: '离开时间',
  127. dataIndex: 'stion',
  128. key: 'stion',
  129. },
  130. ];
  131. const dataSource = []
  132. const { getFieldDecorator, getFieldsError, getFieldError, isFieldTouched } = props.form;
  133. return (
  134. <>
  135. <div>
  136. <div>
  137. <Form layout="inline" onSubmit={handleSubmit}>
  138. <Form.Item>
  139. {getFieldDecorator('radioGroup')(
  140. <Radio.Group buttonStyle="solid">
  141. <Radio.Button value="a" onClick={getDataOf(7)}>最近7天</Radio.Button>
  142. <Radio.Button value="b" onClick={getDataOf(30)}>最近1月</Radio.Button>
  143. </Radio.Group>,
  144. )}
  145. </Form.Item>
  146. <Form.Item>
  147. {getFieldDecorator('rangePicker')(
  148. <RangePicker
  149. style={{ paddingLeft: '30px', width: '400px' }}
  150. ranges={{
  151. Today: [moment(), moment()],
  152. 'This Month': [moment().startOf('month'), moment().endOf('month')],
  153. }}
  154. // defaultValue={[moment(new Date(new Date().setDate((new Date().getDate() - 6))), 'YYYY-MM-DD HH:MM:SS'), moment(new Date(), 'YYYY-MM-DD HH:MM:SS')]}
  155. showTime
  156. />,
  157. )}
  158. </Form.Item>
  159. <Button type="primary" htmlType="submit" style={{ marginLeft: '30px', float: 'right' }}>
  160. 搜索
  161. </Button>
  162. <Button style={{ marginLeft: '30px', float: 'right' }} onClick={resetQuery}>
  163. 重置
  164. </Button>
  165. <div style={{ display: 'flex', margin: '24px 0' }}>
  166. <Form.Item>
  167. {getFieldDecorator('buildingId')(
  168. <BuildSelect style={{ width: '14%', minWidth: '160px' }} slot="action" onChange={(e => handleBuildingChange(e))}></BuildSelect>,
  169. )}
  170. </Form.Item>
  171. <Form.Item>
  172. {getFieldDecorator('handleType')(
  173. <Select style={{ width: '14%', minWidth: '160px', marginLeft: '2%' }} placeholder="所有事件组" onChange={handleChangeType}>
  174. {eventypes.map(type => (
  175. <Option key={type.typeId}>{type.typeName}</Option>
  176. ))}
  177. </Select>,
  178. )}
  179. </Form.Item>
  180. <Form.Item>
  181. {getFieldDecorator('handleEvent')(
  182. <Select style={{ width: '14%', minWidth: '200px', marginLeft: '2%' }} placeholder="请选择事件" onChange={handleChangeEvent}>
  183. {eventList.map(event => (
  184. <Option key={event.eventId}>{event.eventName}</Option>
  185. ))}
  186. </Select>,
  187. )}
  188. </Form.Item>
  189. <Form.Item>
  190. {getFieldDecorator('handleProperty')(
  191. <Select style={{ width: '14%', minWidth: '160px', marginLeft: '2%' }} placeholder="请选择属性" onChange={handleChangeProperty}>
  192. {properties.map(property => (
  193. <Option key={property.propertyId}>{property.propertyName}</Option>
  194. ))}
  195. </Select>,
  196. )}
  197. </Form.Item>
  198. </div>
  199. </Form>
  200. </div>
  201. <div style={{ margin: '24px 0' }}>
  202. <UserBehavior tableShow BuildSelectHide buildingId={buildingId} endDate={endDate} startDate={startDate} eventType={eventType} activity={activity} event={event} dataZoom onReData={e => redata(e)}></UserBehavior>
  203. </div>
  204. {/* <Table dataSource={dataSource} columns={columns} pagination={false} scroll={{ y: 500 }} /> */}
  205. </div>
  206. </>
  207. )
  208. }
  209. const WrappedHorizontalLoginForm = Form.create({ name: 'header' })(header);
  210. export default WrappedHorizontalLoginForm