index.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import React, { PureComponent } from 'react';
  2. import { connect } from 'react-redux';
  3. //import { BrowserRouter, Route,Link } from 'react-router-dom';
  4. import StaffHeader from '../../common/staffHeader'
  5. import { Table, Input,Radio} from 'antd';
  6. import 'antd/dist/antd.css';
  7. import { actionCreators } from './store';
  8. import Popups from '../../common/popupstockDetail';
  9. //import { AudioOutlined } from '@ant-design/icons';
  10. const radioStyle = {
  11. display: 'block',
  12. height: '30px',
  13. lineHeight: '30px',
  14. };
  15. const { Search } = Input;
  16. let popupsObj = null;
  17. class lock_store extends PureComponent {
  18. render() {
  19. const {dataSource,columns,pagination,handleLockstoreList,loading,handleSearch,columnsData,columnsNum,handleInputChange,handleColumnsShow,sortField,sort,handleLockstoreSortField,handleLockstoreSort} = this.props;
  20. return (
  21. <div>
  22. {/* <StaffHeader /> */}
  23. <main id="js-page-content" role="main" className="page-content">
  24. <div className="row">
  25. <div className="col-xl-12">
  26. <div id="panel-1" className="panel">
  27. <div className="panel-hdr">
  28. <div className="col-auto pr-0">
  29. <div className="input-group input-group-sm bg-white shadow-inset-2">
  30. <Search
  31. placeholder="锁号"
  32. onSearch={value => handleSearch(pagination.toJS(),this.props,value)}
  33. onKeyUp={(e) => handleSearch(pagination.toJS(),this.props,e.target.value,'keyup')}
  34. style={{ width: 200 }}
  35. loading={loading}
  36. />
  37. </div>
  38. </div>
  39. <div className="col-auto pr-0">
  40. <button className="btn btn-sm btn-default" type="button" data-toggle="modal" data-target="#filter"><i className="fal fa-filter"></i> 筛选</button>
  41. </div>
  42. <div className="col-auto ml-auto">
  43. <button className="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">已显示{columnsNum}列</button>
  44. <div className="dropdown-menu">
  45. <ul className="list-unstyled px-3 pt-2 mb-0">
  46. {
  47. columnsData.map((item, index) => {
  48. return (
  49. <li key={index} className="mb-2">
  50. <div className="custom-control custom-switch">
  51. <input type="checkbox" name={index} onChange={(e) => handleInputChange(e, index)} value={item.get('columnsValue')} checked={item.get('columnsValue')} className="custom-control-input" id={"lie" + index} />
  52. <label onClick={() => handleColumnsShow(index,this.props)} htmlFor={"lie" + index} className="custom-control-label" >{item.get('columnsName')}</label>
  53. </div>
  54. </li>
  55. )
  56. })
  57. }
  58. </ul>
  59. </div>
  60. </div>
  61. <div className="col-auto pl-0">
  62. <button className="btn btn-sm btn-default" data-toggle="dropdown"><i className="fal fa-sort-amount-down"></i> 排序</button>
  63. <div className="dropdown-menu dropdown-menu-right" id="paixu">
  64. <ul className="list-unstyled px-3 pt-2 mb-0">
  65. <li className="mb-2">
  66. {/* <Radio.Group onChange={this.onChange} value={value}> */}
  67. <Radio.Group onChange={(e) => handleLockstoreSortField(pagination.toJS(), this.props, e)}value={sortField}>
  68. <Radio style={radioStyle} value='KEYNUM'>
  69. 锁号
  70. </Radio>
  71. <Radio style={radioStyle} value='UPDATETIME'>
  72. 出库时间
  73. </Radio>
  74. </Radio.Group>
  75. </li>
  76. </ul>
  77. <ul className="list-unstyled px-3 pt-2 mb-0 border-top">
  78. <li className="mb-2">
  79. <Radio.Group onChange={(e) => handleLockstoreSort(pagination.toJS(), this.props,e)} value={sort}>
  80. <Radio style={radioStyle} value='DESC'>
  81. 降序
  82. </Radio>
  83. <Radio style={radioStyle} value='ASC'>
  84. 升序
  85. </Radio>
  86. </Radio.Group>
  87. </li>
  88. </ul>
  89. </div>
  90. </div>
  91. </div>
  92. <div className="panel-container show">
  93. <div className="panel-content">
  94. <Table
  95. onChange={(pagination,sorter) => handleLockstoreList(pagination,this.props)}
  96. pagination={pagination.toJS()}
  97. loading={loading}
  98. bordered
  99. dataSource={dataSource.toJS()}
  100. columns={columns.toJS()}
  101. />
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </main>
  108. <Popups onRef={(ref) => popupsObj = ref} />
  109. </div>
  110. );
  111. }
  112. //组件即将要被挂在的时候执行的方法--
  113. componentDidMount(){
  114. const{handleLockstoreList,pagination,initData}= this.props;
  115. // console.log(pagination.toJS());
  116. handleLockstoreList(pagination.toJS(),this.props);
  117. // console.log(this.props);
  118. initData();
  119. }
  120. }
  121. let delaySwitch = null;
  122. /**
  123. * store里的数据映射到这个组件里的state
  124. * @param {*} state
  125. */
  126. const mapStateToProps = (state) => {
  127. return {
  128. dataSource: state.getIn(['lockstore', 'dataSource']),
  129. loading: state.getIn(['lockstore', 'loading']),
  130. columns: state.getIn(['lockstore', 'columns']),
  131. pagination: state.getIn(['lockstore', 'pagination']),
  132. searchValue: state.getIn(['lockstore', 'searchValue']),
  133. columnsData: state.getIn(['lockstore', 'columnsData']),
  134. columnsNum:state.getIn(['lockstore', 'columnsNum']),
  135. sortField: state.getIn(['lockstore', 'sortField']),
  136. sort: state.getIn(['lockstore', 'sort']),
  137. locksotreDetail: state.getIn(['lockDetailPopups', 'locksotreDetail']),
  138. }
  139. }
  140. /**
  141. * 要改变store里的内容需要调用dispatch方法
  142. * @param {*} dispatch
  143. */
  144. const mapDispathToProps = (dispatch) => {
  145. return {
  146. //列隐藏显示
  147. handleColumnsShow(index,support) {
  148. dispatch(actionCreators.toggleColumns(index,support));
  149. },
  150. initData(){
  151. dispatch(actionCreators.toggleColumnsAll());
  152. dispatch(actionCreators.toggleSorter());
  153. },
  154. //获得表格数据
  155. handleLockstoreList(pagination,support){
  156. //console.log(support)
  157. dispatch(actionCreators.changeLoading());
  158. dispatch(actionCreators.getLockstoreList(pagination,support));
  159. },
  160. //排序设置
  161. handleLockstoreSortField(pagination, support, e) {
  162. dispatch(actionCreators.changeLoading());
  163. dispatch(actionCreators.changeSortField(e.target.value));
  164. dispatch(actionCreators.getLockstoreList(pagination, support));
  165. },
  166. handleLockstoreSort(pagination, support, e) {
  167. dispatch(actionCreators.changeLoading());
  168. dispatch(actionCreators.changeSort(e.target.value));
  169. dispatch(actionCreators.getLockstoreList(pagination, support));
  170. },
  171. //搜索
  172. handleSearch(pagination,support,searchValue,keyup){
  173. dispatch(actionCreators.changeLoading());
  174. if(keyup === 'keyup'){
  175. if(delaySwitch != null){
  176. clearTimeout(delaySwitch);
  177. }
  178. delaySwitch = setTimeout(() => {
  179. dispatch(actionCreators.getLockstoreList(pagination, support, searchValue));
  180. },350);
  181. }
  182. else{
  183. dispatch(actionCreators.getLockstoreList(pagination,support,searchValue));
  184. }
  185. },
  186. handleInputChange(e, index){
  187. // dispatch(actionCreators.changeInputValue(columnsNum));
  188. // dt.handleColumnVisible(index, e.target.value);
  189. },
  190. handlelockDetailPopups(key) {
  191. popupsObj.handlelockDetailPopups(key);
  192. // console.log(255);
  193. },
  194. }
  195. }
  196. //mapStateToProps接收,mapDispathToProps发送
  197. export default connect(mapStateToProps, mapDispathToProps)(lock_store);